Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

Hot to access MB_DOCUMENT_BADI table parameters.

Former Member
0 Kudos

Hi experts,

i'm trying to getting access to the data structures XMKPF XMSEG of the MB_DOCUMENT_BADI but i can't reference them by typing XMKPF-FIELD or XMSEG-FIELD it returns an error : "they isn't header tables" , how can i get access to these structures to validate some fields when the user saves a record on the MIGO tcode ?.

Tnxs a lot.

2 REPLIES 2

Former Member
0 Kudos

Hi

Implement the BADI in SE19 Tcode and use the code similar to the following

if needed change as per your requirement

this is a sample code used by me

BAdI Name: ZMB_DOCUMENT_BADI (Implementation name) Controlling the Unlimited GR in PO from MIGO

Definition Name: MB_DOCUMENT_BADI

Interface Name : IF_EX_MB_DOCUMENT_BADI

Implementing Class: ZCL_IM_MB_DOCUMENT_BADI

Method : MB_DOCUMENT_BEFORE_UPDATE

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

method IF_EX_MB_DOCUMENT_BADI~MB_DOCUMENT_BEFORE_UPDATE .

DATA : return TYPE STANDARD TABLE OF bapiret2 INITIAL SIZE 0 ,

poitem TYPE STANDARD TABLE OF bapimepoitem INITIAL SIZE 0,

poitemx TYPE STANDARD TABLE OF bapimepoitemx INITIAL SIZE 0,

i_ekbe TYPE STANDARD TABLE OF ekbe INITIAL SIZE 0.

DATA : xmkpf1 TYPE mkpf,

xmseg1 TYPE mseg,

w_ekbe TYPE ekbe,

w_ekpo TYPE ekpo,

poitem1 TYPE bapimepoitem,

gv_qty TYPE menge13,

poitemx1 TYPE bapimepoitemx.

*BEFORE

LOOP AT xmseg INTO xmseg1.

IF xmseg1-bwart EQ '103' AND xmseg1-grund EQ '0001'.

poitem1-po_item = xmseg1-ebelp.

poitem1-unlimited_dlv = 'X'.

APPEND poitem1 TO poitem.

poitemx1-po_item = xmseg1-ebelp.

poitemx1-unlimited_dlv = 'X'.

APPEND poitemx1 TO poitemx.

CALL FUNCTION 'BAPI_PO_CHANGE'

EXPORTING

purchaseorder = xmseg1-ebeln

TABLES

return = return

poitem = poitem

poitemx = poitemx.

ELSEIF xmseg1-bwart EQ '104' AND xmseg1-grund EQ '0001'.

*

COMMIT WORK .

WAIT UP TO 3 SECONDS.

poitem1-po_item = xmseg1-ebelp.

poitem1-unlimited_dlv = space.

APPEND poitem1 TO poitem.

poitemx1-po_item = xmseg1-ebelp.

poitemx1-unlimited_dlv = 'X'.

APPEND poitemx1 TO poitemx.

CALL FUNCTION 'BAPI_PO_CHANGE'

EXPORTING

purchaseorder = xmseg1-ebeln

TABLES

return = return

poitem = poitem

poitemx = poitemx.

read TABLE return with key type = 'S'

ID = '06'

NUMBER = '023' TRANSPORTING NO FIELDS.

IF SY-SUBRC EQ 0.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.

ENDIF.

ELSEIF xmseg1-bwart EQ '105'.

  • SELECT * INTO TABLE i_ekbe FROM ekbe WHERE ebeln = xmseg1-ebeln AND

  • ebelp = xmseg1-ebelp AND

  • bwart = '105' OR bwart = '106'.

  • LOOP AT i_ekbe INTO w_ekbe.

  • IF w_ekbe-bwart EQ '105'.

  • gv_qty = gv_qty + w_ekbe-menge.

  • ELSE.

  • gv_qty = gv_qty - w_ekbe-menge.

  • ENDIF.

  • ENDLOOP.

*

  • SELECT single * INTO w_ekpo FROM ekpo WHERE ebeln = xmseg1-ebeln AND

  • ebelp = xmseg1-ebelp.

  • gv_qty = w_ekpo-menge - gv_qty.

  • IF xmseg1-menge > gv_qty.

  • MESSAGE ID 'ZM_MSG' TYPE 'E' NUMBER '012' raising .

  • MESSAGE ID 'ZM_MSG' TYPE 'E' NUMBER '000' WITH 'You already reached the PO quantity'

  • raising exception error_message.

  • ENDIF.

ENDIF.

ENDLOOP.

endmethod.

Reward points if useful

Regards

Anji

former_member583013
Active Contributor

Try using Field-Symbols....


FIELD-SYMBOLS: <XMKPF> TYPE  XMKPF.

ASSIGN XMKPF TO <XMKPF>.

Then, you can access <XMKPF>-FIELD

Greetings,

Blag.