Skip to Content
0
Former Member
Mar 18, 2011 at 03:40 PM

Problem with customised subscreen in ME21N

277 Views

I am using BadI ME_GUI_PO_CUST & ME_PROCESS_PO_CUST to add a customized subscreen in the header. But the subscreen is only visible with ME23N & ME22N not with ME21N . I am new to BadI, so help is needed.

I have used the following code:

In BadI ME_GUI_PO_CUST with interface IF_EX_ME_GUI_PO_CUST~SUBSCRIBE the code i ve written .. the following code ..

.

DATA: ls_subscriber LIKE LINE OF re_subscribers.

* we want to add a customer subscreen on the item detail tab
CHECK im_application = 'PO'.
CHECK im_element = 'HEADER'.

* each line in re_subscribers generates a subscreen. We add one
* subscreen in this example
CLEAR re_subscribers[].
* the name is a unique identifier for the subscreen and defined in this
* class definition
ls_subscriber-name = subscreen1.
* the dynpro number to use
ls_subscriber-dynpro = '0002'.
* the program where the dynpro can be found
* "Created in a module pool program in SE80 to hold the subscreen in 
*the tcode me21n, me22n, me23n*
ls_subscriber-program = 'ZME_GUI_PO_CUST_SCREEN'.
* each subscreen needs his own DDIC-Structure
ls_subscriber-struct_name = 'CI_EKKODB'.
* a label can be defined
ls_subscriber-label = text-001.
* the position within the tabstrib can be defined
ls_subscriber-position = 13.
* the height of the screen can be defined here. Currently we support two
* screen sizes:
* value <= 7 a sevel line subscreen
* value > 7 a 16 line subscreen
ls_subscriber-height = 7.

APPEND ls_subscriber TO re_subscribers.

.

********************************************************************

In IF_EX_ME_GUI_PO_CUST~MAP_DYNPRO_FIELDS i ve changed the follwoing .......

type-pools : MMMFD.
FIELD-SYMBOLS: <mapping> LIKE LINE OF ch_mapping.

LOOP AT ch_mapping ASSIGNING <mapping>.

CASE <mapping>-fieldname.
WHEN 'ZZPAYMENT'. <mapping>-metafield = mmmfd_cust_03.
ENDCASE.

ENDLOOP.

In the badi ME_PROCESS_PO_CUST, their is a method called FIELDSELECTION_HEADER

method IF_EX_ME_PROCESS_PO_CUST~FIELDSELECTION_HEADER .
DATA: l_persistent TYPE mmpur_bool.

FIELD-SYMBOLS: <fs> LIKE LINE OF ch_fieldselection.

* if the item is already on the database, we disallow to change field
* badi_bsgru
l_persistent = im_item->is_persistent( ).

IF l_persistent EQ mmpur_yes.
READ TABLE ch_fieldselection ASSIGNING <fs> WITH TABLE KEY metafield = mmmfd_cust_03.
IF sy-subrc IS INITIAL.
* <fs>-fieldstatus = '*'. " Display <-- this one was as per the sample code given.
<fs>-fieldstatus = '+'. " Input <-- this i added to make the field mandatory.
ENDIF.
ENDIF.

I have figured out the issue but do not the idea to fix the issue. I have put a break-point in the badi ME_PROCESS_PO_CUST, having the method called FIELDSELECTION_HEADER & run the tcode ME21N. In the line l_persistent = im_item->is_persisten & IF l_persistent EQ mmpur_yes and found out that the value of mmpur_yes equal to 'X', l_persistent is blank.

Suggestion is widely accepted.

Thanks & regards

Feluda