Sunteți pe pagina 1din 15

How to create customer screen on ME21N/ME22N/ME23N Item Level using BadI

This is manual how to use the BadIs ME_GUI_PO_CUST and ME_PROCESS_PO_CUST to create a customer screen on item level in ME21/22/23n. And how to fill this screen with a customer field.

Needed Badis:

ME_GUI_PO_CUST (classical) ME_PROCESS_PO_CUST (enhancement spot) Helpful information and sample code in example implementation class CL_EXM_IM_ME_GUI_PO_CUST and CL_EXM_IM_ME_PROCESS_PO_CUST. In both examples all needed information is metioned, but not always easy to find!

SAP Notes: 1910516

Step by step:

1.

Append CI_EKPODB with your customer field

2.

Create with SE11 a table with the following fields a. b. c. d. MANDT EBELN EBELP Your customer field:

3.

Create with SE11 a structure with the following fields a. Your customer field

4.

Create with screen painter (SE51) a screen with the new field a. Program should be either your already existing function pool for MM exits or create a copy of the SAP example

SAPLMEPOBADIEX

b.

Attributes

c.

Element List (referring to your structure fields)!

d. i.

Flow Logic Important to add the two modules event_pbo and module_pai!

5.

Change the function pool for global data in the top include a. b. c. Tables: your structure of step 3 Internal tables both referring to your table of step 2 Include lmeviewsf01 (otherwise you will get a dump!!)

6.

Create the following function modules in the same function pool you used in the layout! a. Y_MM_MEPOBADI_GET_DATA as copy of example code MEPOBADIEX_GET_DATA i. 1. 2. Import Parameter IM_EBELN type EBELN IM_EBELP type EBELP

ii. 1.

Export parameter EX_DATA type your table of step 2

iii.

Source code completely identically to MEPOBADIEX_GET_DATA

b.

Function module Y_MM_MEPOBADI_PUSH as copy of MEPOBADIEX_PUSH i. 1. Import Parameter IM_DYNP_DATA type your structure of step 3

ii.

Source code: fill your structure with the import parameter

c.

Function module Y_MM_MEPOBADI_POP as copy of MEPOBADIEX_POP i. 1. Export Parameter EX_DYNP_DATA type your structure of step 3

ii.

Source code: fill export parameter with your structure

d.

Y_MM_MEPOBADI_SET_DATA as copy of example code MEPOBADIEX_SET_DATA i. 1. 2. Import Parameter: IM_DATA type your table of step 2 IM_PHYSICAL_DELETE_REQUEST type MMPUR_BOOL

ii. 1.

Source code: Important to change the in line your customer field: * update existing data <data>-yyrevisionstand = im_data-yyrevisionstand.

7. a.

BADI (SE18) ME_GUI_PO_CUST

i. ii. b.

Go to Menu --> Implementation --> Overview and choose your implementation If there is no implementation you have to create one (search in scn how to do)

Change Class Interface YCL_IM_MM_ME_GUI_PO_CUST i. Attribute: 1. SUBSCREEN1 / Level: Constant / Visibility: Public / Type: MEPO_NAME / Initial Value DYNP_DATA_PBO / Level Instance Attribute / Visibility Private / Associated Type your structure of step DYNP_DATA_PAI / Level Instance Attribute / Visibility Private / Associated Type your structure of step

ITEMSCREEN1 2. 3 3. 3

c.

Method: i. SUBSCRIBER: enter copy of source code of CL_EXM_IM_ME_GUI_PO_CUST~SUBSCRIBE

1. Method SUBSRIBE it mandatory to show your own tab. 2. According to Note 1910516 it is not possible to show more than one customer tab (one in header, one in position). I did not test if this is still true

Important: ls_subscriber-name = defined attribute ls_subscriber-dynpro = dynpro number of your SE51 screen of step 4 ls_subscriber-program = function pool of your SE51 screen of step 4 ls_subscriber-struct_name = your structure of step 3 ls_subscriber-label = either direct text of via text definition of your class ls_subscriber-position = position of the tab in the position details. According to Note 1910516 it should be between 30 and 50 to avoid problems with existing screens.

ii.

MAP_DYNPRO_FIELDS: : enter copy of source code of

CL_EXM_IM_ME_GUI_PO_CUST~MAP_DYNPRO_FIELDS 1. Change source code by entering your field in the when case in line 56 2. Important: mapping one of the following customer fields in Line 58

iii. TRANSPORT_FROM_MODEL enter copy of source code of CL_EXM_IM_ME_GUI_PO_CUST~TRANSPORT_FROM_MODEL 1. Important: Change function module to your module of step 6a

iv.

TRANSPORT_TO_DYNP enter copy of source code of

CL_EXM_IM_ME_GUI_PO_CUST~TRANSPORT_TO_DYNP 1. Change function module to your module of step 6b

v. TRANSPORT_FROM_DYNP enter copy of source code of CL_EXM_IM_ME_GUI_PO_CUST~TRANSPORT_FROM_DYNP

1.

Change function module with your module of step 6c

vi. TRANSPORT_TO_MODEL enter copy of source code of CL_EXM_IM_ME_GUI_PO_CUST~TRANSPORT_TO_MODEL 1. 2. 3. 4. 5. 6. 7. Delete lines for standard fields (line20 32 of the example coding are not necessary for custom fields) Change if case of line 64 to your own field Change function module of line 66 to your module of step 6a Change line 73 to your own field Change function module of line 74 to your module of step 6d Enter line 78 (move changed value to local structure) Enter call of method set_data

8.

BADI Enhancement Spot ME_PROCESS_PO_CUST

Have a look into CL_EXM_IM_ME_PROCESS_PO_CUST to get sample coding

Important: you can call only one Enhancement Implementation, if there is already an active implementation you have to either use this or deactivate it!

a.

Method IF_EX_ME_PROCESS_PO_CUST~FIELDSELECTION_ITEM i. Necessary to display your customer field (compare to Note 1910516)

1.

Enter the following coding: Important: Change line 45 to your customer field used in Method MAP_DYNPRO_FIELDS

b.

Method IF_EX_ME_PROCESS_PO_CUST~PROCESS_ITEM i. ii. iii. Necessary to pre-fill you customer field with e.g values from material master Enter e.g. some lines like below: Important is to use the following lines to get the entered data

data: lwa_mepoitem type mepoitem, lwa_po_lgfsb type ymm_po_lgfsb. data ls_ekpo type uekpo. data ls_eban type eban. data lt_eban type table of eban. data: gv_objid type toav0-object_id, gt_conn type table of toav0, gt_conn_av type table of toav0, gs_conn type toav0, gs_toa01 type toa01, lw_banfn type banfn. call method im_item->get_data receiving re_data = lwa_mepoitem.

call method im_item->get_data receiving re_data = lwa_mepoitem.

iv.

And after your select to use the following lines to set your selected data

select single yyrevisionstand from marc into lwa_mepoitem-yyrevisionstand where matnr = lwa_mepoitem-matnr and werks = lwa_mepoitem-werks. if sy-subrc eq 0 and lwa_mepoitem-yyrevisionstand is not initial. call method im_item->set_data exporting im_data = lwa_mepoitem. endif.

If you just followed all steps and also put all function modules into the same function pool you should see now your custom tab and field in the item details: Problems:

Own tab not displayed in ME21N and ME22N but displayed in ME23N

o You forget to code IF_EX_ME_PROCESS_PO_CUST~FIELDSELECTION_ITEM of ME_PROCESS_PO_CUST o Compare to Note 1910516, you there is not display field you will not see the whole tab

Own field changeable in ME23N o Mistake in declaration of screen and/or method SUBSRICBE of ME_GUI_PO_CUST

Refer in created screen/dynpro to your defined structure Refer in method by ls_subscriber-struct_name to the same structure Methods of ME_GUI_PO_CUST not proceeded o Check your screen definition

You need to use both modules (event_pbo and event_pai) to get the method run, they are mandatory Dump (PERFORM_NOT_FOUND CX_SY_DYN_CALL_ILLEGAL_FORM ) when choosing the new tab

o You forgot to add the include lmeviewsf01 in the top include of your function module

System does not react like you expect o Ensure that all your function modules are in the same function pool

S-ar putea să vă placă și