Floorplan Manager (FPM) es una infraestructura para aplicaciones Web Dynpro que proporciona un marco flexible y estandarizado para desarrollar interfaces de usuario. FPM se utiliza para:
Estandarización: Proveer un diseño consistente en todas las aplicaciones SAP.
Reusabilidad: Facilitar la reutilización de componentes de UI y lógica de negocio.
Configurabilidad: Permitir a los usuarios de negocio configurar ciertos aspectos de la aplicación sin necesidad de cambios en el código.
Extensibilidad: Facilitar la extensión de funcionalidades existentes mediante ampliaciones.
GuÃa para agregar un nuevo campo en una orden de mantenimiento en FPM
En esta guÃa, se detallarán los pasos para agregar un campo adicional a la orden de mantenimiento en una aplicación FPM estándar. Este campo será solo de lectura y se llenará con información relevante obtenida de la lógica de negocio implementada.
1. Crear una estructura append en la estructura estándar
Primero, debemos crear una estructura append en la estructura estándar EAMS_S_SP_ORD_OPER. Esta estructura será extendida para incluir nuestro nuevo campo.
Ir a la transacción SE11 y abrir la estructura EAMS_S_SP_ORD_OPER.
Seleccionar la opción para agregar una estructura append.
Definir el campo nuevo, en este caso ZZTEXTO, y guardarlo.
* Tablas
DATA: lt_lines TYPE STANDARD TABLE OF tline,
lt_ord_oper TYPE eams_t_sp_ord_oper,
lt_node_id TYPE STANDARD TABLE OF eams_s_sp_ord_ltxt_id,
lt_node_data TYPE STANDARD TABLE OF eams_s_sp_ord_ltxt.
* Estructuras
DATA: ls_node_id TYPE eams_s_sp_ord_ltxt_id.
* Variables
DATA: lv_aplzl TYPE afvc-aplzl,
lv_aufpl TYPE afvc-aufpl,
lv_ltsch TYPE stxh-tdname.
* Obtenemos los regisotros de pantalla
me->core_object->mo_context->get_rows( IMPORTING et_row = lt_ord_oper ).
* Los recorremos y aplicamos una lógica de modificación para los textos
LOOP AT lt_ord_oper ASSIGNING FIELD-SYMBOL().
DATA(lv_index) = sy-tabix.
REFRESH: lt_node_id, lt_node_data.
MOVE-CORRESPONDING TO ls_node_id.
APPEND ls_node_id
TO lt_node_id.
me->core_object->mo_application_model->retrieve(
EXPORTING
iv_node_name = cl_eams_mp_ord=>gc_node-ord_ltxt
it_node_id = lt_node_id
IMPORTING
et_node_data = lt_node_data ).
READ TABLE lt_node_data
ASSIGNING FIELD-SYMBOL()
INDEX 1.
IF sy-subrc IS INITIAL.
READ TABLE me->core_object->gt_data_aux
ASSIGNING FIELD-SYMBOL()
WITH KEY eams_aufnr = -eams_aufnr
eams_vornr = -eams_vornr
eams_uvorn = -eams_uvorn.
IF sy-subrc IS INITIAL.
= .
ELSE.
APPEND TO me->core_object->gt_data_aux.
ENDIF.
SPLIT -new_text AT cl_abap_char_utilities=>newline INTO TABLE DATA(lt_split).
LOOP AT lt_split ASSIGNING FIELD-SYMBOL().
IF sy-tabix EQ 01.
-zztexto = .
ELSE.
-zztexto = |{ -zztexto } { }|.
ENDIF.
ENDLOOP.
ELSE.
UNASSIGN .
READ TABLE me->core_object->gt_data_aux
ASSIGNING
WITH KEY eams_aufnr = -eams_aufnr
eams_vornr = -eams_vornr
eams_uvorn = -eams_uvorn.
IF sy-subrc IS INITIAL.
REFRESH lt_split.
SPLIT -new_text AT cl_abap_char_utilities=>newline INTO TABLE lt_split.
UNASSIGN .
LOOP AT lt_split ASSIGNING .
IF sy-tabix EQ 01.
-zztexto = .
ELSE.
-zztexto = |{ -zztexto } { }|.
ENDIF.
ENDLOOP.
ELSE.
" Tal vez esto no sea necesario, se podria descartar y probar
lv_aplzl = -maintenanceorderroutingnode.
lv_aufpl = -maintenanceorderrouting.
CALL FUNCTION 'CO_ZK_TEXTKEY_AFVG'
EXPORTING
aplzl = lv_aplzl
aufpl = lv_aufpl
IMPORTING
ltsch = lv_ltsch.
CALL FUNCTION 'READ_TEXT'
EXPORTING
id = 'AVOT'
language = 'S'
name = lv_ltsch
object = 'AUFK'
TABLES
lines = lt_lines
EXCEPTIONS
id = 1
language = 2
name = 3
not_found = 4
object = 5
reference_check = 6
wrong_access_to_archive = 7
OTHERS = 8.
IF sy-subrc IS INITIAL.
DELETE lt_lines INDEX 1.
LOOP AT lt_lines ASSIGNING FIELD-SYMBOL().
IF sy-tabix EQ 01.
-zztexto = -tdline.
ELSE.
-zztexto = |{ -zztexto } { -tdline }|.
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.
ENDIF.
* Guardamos los cambios
me->core_object->mo_context->set_row( iv_index = lv_index is_row = ).
ENDLOOP.