Para implementar una nueva pestaña debemos de crearnos una
copia del grupo de funciones MEPOBADIEX. En el grupo de funciones
que nos creemos debemos declarar la dynpro que vamos a utilizar para la nueva
pestaña. Además utilizaremos las funciones de este grupo para introducir toda
la lógica necesario para tratar los datos que se muevan en esta nueva pestaña.
La dynpro la debemos declarar como subscreen:
Además los campos que añadamos en la subscreen los tomaremos
de la estructura que hemos utilizado para el APPEND a la tabla EKKO o EKPO.
Además deberemos implementar la BADI ME_GUI_PO_CUST. En los métodos de esta BADI definiremos la nueva
pestaña y utilizaremos sus métodos para tratar el flujo de datos para la nueva
pestaña.
A continuación se muestra un ejemplo del código utilizado en
el grupo de funciones ZMEPOBADIEX.
-
ZMEPOBADIEX_GET_DATA
CLEAR ex_data.
CHECK NOT im_ebeln IS INITIAL.
* Recuperamos los registros de la tabla EKKO
SELECT SINGLE zekko1 zekko2 zekko3 zekko4 zekko5 INTO CORRESPONDING FIELDS OF ex_data
FROM ekko
WHERE ebeln = im_ebeln.
INSERT ex_data INTO TABLE gt_data.
CHECK NOT im_ebeln IS INITIAL.
* Recuperamos los registros de la tabla EKKO
SELECT SINGLE zekko1 zekko2 zekko3 zekko4 zekko5 INTO CORRESPONDING FIELDS OF ex_data
FROM ekko
WHERE ebeln = im_ebeln.
INSERT ex_data INTO TABLE gt_data.
-
ZMEPOBADIEX_INIT
CLEAR: gt_persistent_data[], gt_data[].
-
ZMEPOBADIEX _POP
* get dynpro data
ex_dynp_data = zekko.
ex_dynp_data = zekko.
-
ZMEPOBADIEX _POST
DATA: ls_data LIKE LINE OF gt_data,
lt_data_new TYPE STANDARD TABLE OF zekko,
lt_data_old TYPE STANDARD TABLE OF zekko.
* prepare customers data for posting
CHECK NOT im_ebeln IS INITIAL.
lt_data_new[] = gt_data.
lt_data_old[] = gt_persistent_data.
lt_data_new TYPE STANDARD TABLE OF zekko,
lt_data_old TYPE STANDARD TABLE OF zekko.
* prepare customers data for posting
CHECK NOT im_ebeln IS INITIAL.
lt_data_new[] = gt_data.
lt_data_old[] = gt_persistent_data.
-
ZMEPOBADIEX _ PUSH
zekko = im_dynp_data.
A continuación se muestra un ejemplo del código utilizado la
clase ZCL_IM_ME_GUI_PO_CUST. Se han modificado los siguientes métodos:
-
IF_EX_ME_GUI_PO_CUST~SUBSCRIBE
DATA: ls_subscribe LIKE LINE OF re_subscribers.
CHECK im_application = 'PO'.
CHECK im_element = 'HEADER'.
CLEAR re_subscribers[].
ls_subscribe-name = 'SCREEN_V'.
ls_subscribe-dynpro = '0001'.
ls_subscribe-program = 'SAPLZMEPOBADIEX'.
ls_subscribe-struct_name = 'ZEKKO'.
ls_subscribe-label = 'Nueva Pestaña'.
ls_subscribe-position = 10.
ls_subscribe-height = 7.
APPEND ls_subscribe TO re_subscribers.
DATA: ls_subscribe LIKE LINE OF re_subscribers.
CHECK im_application = 'PO'.
CHECK im_element = 'HEADER'.
CLEAR re_subscribers[].
ls_subscribe-name = 'SCREEN_V'.
ls_subscribe-dynpro = '0001'.
ls_subscribe-program = 'SAPLZMEPOBADIEX'.
ls_subscribe-struct_name = 'ZEKKO'.
ls_subscribe-label = 'Nueva Pestaña'.
ls_subscribe-position = 10.
ls_subscribe-height = 7.
APPEND ls_subscribe TO re_subscribers.
-
IF_EX_ME_GUI_PO_CUST~MAP_DYNPRO_FIELDS
FIELD-SYMBOLS: <mapping> LIKE LINE OF ch_mapping.
LOOP AT ch_mapping ASSIGNING <mapping>.
CASE <mapping>-fieldname.
WHEN 'ZEKKO1'.
<mapping>-metafield = 1.
WHEN 'ZEKKO2'.
<mapping>-metafield = 2.
WHEN 'ZEKKO3'.
<mapping>-metafield = 3.
WHEN 'ZEKKO4'.
<mapping>-metafield = 4.
WHEN 'ZEKKO5'.
<mapping>-metafield = 5.
ENDCASE.
ENDLOOP.
FIELD-SYMBOLS: <mapping> LIKE LINE OF ch_mapping.
LOOP AT ch_mapping ASSIGNING <mapping>.
CASE <mapping>-fieldname.
WHEN 'ZEKKO1'.
<mapping>-metafield = 1.
WHEN 'ZEKKO2'.
<mapping>-metafield = 2.
WHEN 'ZEKKO3'.
<mapping>-metafield = 3.
WHEN 'ZEKKO4'.
<mapping>-metafield = 4.
WHEN 'ZEKKO5'.
<mapping>-metafield = 5.
ENDCASE.
ENDLOOP.
-
IF_EX_ME_GUI_PO_CUST~TRANSPORT_FROM_MODEL
DATA: l_item TYPE REF TO if_purchase_order_item_mm,
ls_mepoitem TYPE mepoitem,
pedido TYPE ebeln,
modelo TYPE REF TO cl_po_header_handle_mm,
ex_data TYPE zekko.
FIELD-SYMBOLS: <zekko1> TYPE ekko-zekko1,
<zekko2> TYPE ekko-zekko2,
<zekko3> TYPE ekko-zekko3,
<zekko4> TYPE ekko-zekko4,
<zekko5> TYPE ekko-zekko5.
CASE im_name.
WHEN 'SCREEN_V'.
modelo ?= im_model.
pedido = modelo->po_number.
IF pedido IS NOT INITIAL AND dynp_data_pai IS INITIAL.
CALL FUNCTION 'ZMEPOBADIEX_GET_DATA'
EXPORTING
im_ebeln = pedido
IMPORTING
ex_data = ex_data.
MOVE-CORRESPONDING ex_data TO dynp_data_pbo.
ELSEIF dynp_data_pai IS NOT INITIAL.
dynp_data_pbo = dynp_data_pai.
ENDIF.
ASSIGN ('(SAPLMEPO)EKKO-ZEKKO1') TO <zekko1>.
IF sy-subrc = 0.
<zekko1> = dynp_data_pbo-zekko1.
ENDIF.
ASSIGN ('(SAPLMEPO)EKKO-ZEKKO2') TO <zekko2>.
IF sy-subrc = 0.
<zekko2> = dynp_data_pbo-zekko2.
ENDIF.
ASSIGN ('(SAPLMEPO)EKKO-ZEKKO3') TO <zekko3>.
IF sy-subrc = 0.
<zekko3> = dynp_data_pbo-zekko3.
ENDIF.
ASSIGN ('(SAPLMEPO)EKKO-ZEKKO4') TO <zekko4>.
IF sy-subrc = 0.
<zekko4> = dynp_data_pbo-zekko4.
ENDIF.
ASSIGN ('(SAPLMEPO)EKKO-ZEKKO5') TO <zekko5>.
IF sy-subrc = 0.
<zekko5> = dynp_data_pbo-zekko5.
ENDIF.
ENDCASE.
DATA: l_item TYPE REF TO if_purchase_order_item_mm,
ls_mepoitem TYPE mepoitem,
pedido TYPE ebeln,
modelo TYPE REF TO cl_po_header_handle_mm,
ex_data TYPE zekko.
FIELD-SYMBOLS: <zekko1> TYPE ekko-zekko1,
<zekko2> TYPE ekko-zekko2,
<zekko3> TYPE ekko-zekko3,
<zekko4> TYPE ekko-zekko4,
<zekko5> TYPE ekko-zekko5.
CASE im_name.
WHEN 'SCREEN_V'.
modelo ?= im_model.
pedido = modelo->po_number.
IF pedido IS NOT INITIAL AND dynp_data_pai IS INITIAL.
CALL FUNCTION 'ZMEPOBADIEX_GET_DATA'
EXPORTING
im_ebeln = pedido
IMPORTING
ex_data = ex_data.
MOVE-CORRESPONDING ex_data TO dynp_data_pbo.
ELSEIF dynp_data_pai IS NOT INITIAL.
dynp_data_pbo = dynp_data_pai.
ENDIF.
ASSIGN ('(SAPLMEPO)EKKO-ZEKKO1') TO <zekko1>.
IF sy-subrc = 0.
<zekko1> = dynp_data_pbo-zekko1.
ENDIF.
ASSIGN ('(SAPLMEPO)EKKO-ZEKKO2') TO <zekko2>.
IF sy-subrc = 0.
<zekko2> = dynp_data_pbo-zekko2.
ENDIF.
ASSIGN ('(SAPLMEPO)EKKO-ZEKKO3') TO <zekko3>.
IF sy-subrc = 0.
<zekko3> = dynp_data_pbo-zekko3.
ENDIF.
ASSIGN ('(SAPLMEPO)EKKO-ZEKKO4') TO <zekko4>.
IF sy-subrc = 0.
<zekko4> = dynp_data_pbo-zekko4.
ENDIF.
ASSIGN ('(SAPLMEPO)EKKO-ZEKKO5') TO <zekko5>.
IF sy-subrc = 0.
<zekko5> = dynp_data_pbo-zekko5.
ENDIF.
ENDCASE.
-
IF_EX_ME_GUI_PO_CUST~TRANSPORT_TO_DYNP
CASE im_name.
WHEN 'SCREEN_V'.
CALL FUNCTION 'ZMEPOBADIEX_PUSH'
EXPORTING
im_dynp_data = dynp_data_pbo.
WHEN OTHERS.
ENDCASE.
CASE im_name.
WHEN 'SCREEN_V'.
CALL FUNCTION 'ZMEPOBADIEX_PUSH'
EXPORTING
im_dynp_data = dynp_data_pbo.
WHEN OTHERS.
ENDCASE.
-
IF_EX_ME_GUI_PO_CUST~TRANSPORT_FROM_DYNP
FIELD-SYMBOLS: <zekko1> TYPE ekko-zekko1,
<zekko2> TYPE ekko-zekko2,
<zekko3> TYPE ekko-zekko3,
<zekko4> TYPE ekko-zekko4,
<zekko5> TYPE ekko-zekko5.
CASE im_name.
WHEN 'SCREEN_V'.
IF sy-ucomm = 'MECHOB'.
CLEAR dynp_data_pai.
ELSE.
CALL FUNCTION 'ZMEPOBADIEX_POP'
IMPORTING
ex_dynp_data = dynp_data_pai.
IF dynp_data_pai NE dynp_data_pbo.
* something has changed therefor we have to notify the framework
* to transport data to the model
re_changed = mmpur_yes.
ASSIGN ('(SAPLMEPO)EKKO-ZEKKO1') TO <zekko1>.
IF sy-subrc = 0.
<zekko1> = dynp_data_pai-zekko1.
ENDIF.
ASSIGN ('(SAPLMEPO)EKKO-ZEKKO2') TO <zekko2>.
IF sy-subrc = 0.
<zekko2> = dynp_data_pai-zekko2.
ENDIF.
ASSIGN ('(SAPLMEPO)EKKO-ZEKKO3') TO <zekko3>.
IF sy-subrc = 0.
<zekko3> = dynp_data_pai-zekko3.
ENDIF.
ASSIGN ('(SAPLMEPO)EKKO-ZEKKO4') TO <zekko4>.
IF sy-subrc = 0.
<zekko4> = dynp_data_pai-zekko4.
ENDIF.
ASSIGN ('(SAPLMEPO)EKKO-ZEKKO5') TO <zekko5>.
IF sy-subrc = 0.
<zekko5> = dynp_data_pai-zekko5.
ENDIF.
ENDIF.
ENDIF.
ENDCASE.
<zekko2> TYPE ekko-zekko2,
<zekko3> TYPE ekko-zekko3,
<zekko4> TYPE ekko-zekko4,
<zekko5> TYPE ekko-zekko5.
CASE im_name.
WHEN 'SCREEN_V'.
IF sy-ucomm = 'MECHOB'.
CLEAR dynp_data_pai.
ELSE.
CALL FUNCTION 'ZMEPOBADIEX_POP'
IMPORTING
ex_dynp_data = dynp_data_pai.
IF dynp_data_pai NE dynp_data_pbo.
* something has changed therefor we have to notify the framework
* to transport data to the model
re_changed = mmpur_yes.
ASSIGN ('(SAPLMEPO)EKKO-ZEKKO1') TO <zekko1>.
IF sy-subrc = 0.
<zekko1> = dynp_data_pai-zekko1.
ENDIF.
ASSIGN ('(SAPLMEPO)EKKO-ZEKKO2') TO <zekko2>.
IF sy-subrc = 0.
<zekko2> = dynp_data_pai-zekko2.
ENDIF.
ASSIGN ('(SAPLMEPO)EKKO-ZEKKO3') TO <zekko3>.
IF sy-subrc = 0.
<zekko3> = dynp_data_pai-zekko3.
ENDIF.
ASSIGN ('(SAPLMEPO)EKKO-ZEKKO4') TO <zekko4>.
IF sy-subrc = 0.
<zekko4> = dynp_data_pai-zekko4.
ENDIF.
ASSIGN ('(SAPLMEPO)EKKO-ZEKKO5') TO <zekko5>.
IF sy-subrc = 0.
<zekko5> = dynp_data_pai-zekko5.
ENDIF.
ENDIF.
ENDIF.
ENDCASE.
Finalmente si ejecutamos alguna de las tres transacciones veremos que la nueva pestaña ya aparece.
No hay comentarios:
Publicar un comentario