07-13-2007 2:07 PM
Hi,
How do we use BDC code inside a BADI?
I have tried to call a transaction and pasted the code inside a method PROCESS_CUSTOMER_UI_FUNCTIONS.
It gives error " FORMS cannot be used in class pools.For this reason there are no PERFORM statements for internal FORMS."
Pease give me suggestions or alternative for the same.
Thanks in advance.
07-13-2007 2:13 PM
Hi,
You can't really call a PERFORM within a method unless you specify a program in the call
You can use macros insted of perform stmts in BADI
hERE iam giving my code:
METHOD if_ex_le_shp_goodsmovement~change_input_header_and_items .
----
Internal table declaration
----
DATA: t_lipsheader TYPE TABLE OF lipsvb .
DATA :t_messtab TYPE TABLE OF bdcmsgcoll.
DATA: t_lipsitem TYPE TABLE OF lipsvb.
DATA :t_bdcdata TYPE TABLE OF bdcdata.
----
Structure declaration
----
DATA: wa_lipsheader TYPE lips.
DATA: wa_likp TYPE likp.
DATA: wa_lips TYPE lipsvb.
DATA: wa_bdcdata TYPE bdcdata.
DATA: wa_messtab TYPE bdcmsgcoll.
DATA: wa_textout TYPE t100-text.
----
variable declaration
----
DATA :fval TYPE bdc_fval.
DATA :ctumode TYPE ctu_params-dismode,
cupdate TYPE ctu_params-updmode.
DATA :date1(10) TYPE c,date2(10) TYPE c.
DATA: budat TYPE sy-datum,
bldat TYPE likp-bldat,
usnam TYPE sy-uname,
uzeit TYPE sy-uzeit,
hhmm(4) TYPE n.
----
Constant declaration
----
CONSTANTS: nodata TYPE c VALUE '/' .
CONSTANTS: c_bwart TYPE lips-bwart VALUE '101'.
Logic for Posting date and Document date.
Check for Actual GI date from delivery.
IF is_likp-wadat_ist NE space.
budat = is_likp-wadat_ist.
ELSE.
If Actual GI date is initial then populate today's date
budat = sy-datum.
ENDIF.
Populate today's date for document date
bldat = sy-datum.
usnam = sy-uname.
----
Start new screen
----
DEFINE bdc_dynpro.
clear wa_bdcdata.
wa_bdcdata-program = &1.
wa_bdcdata-dynpro = &2.
wa_bdcdata-dynbegin = 'X'.
append wa_bdcdata to t_bdcdata.
END-OF-DEFINITION.
----
Insert field
----
DEFINE bdc_field.
if fval <> nodata.
clear wa_bdcdata.
wa_bdcdata-fnam = &1.
wa_bdcdata-fval = &2.
append wa_bdcdata to t_bdcdata.
endif.
END-OF-DEFINITION.
----
loops through the internal table and validates *
the data in the internal table *
----
LOOP AT it_xlips INTO wa_lipsheader.
IF wa_lipsheader-uepos IS INITIAL AND wa_lipsheader-pstyv =
'taq' AND wa_lipsheader-oic_mot = 'PK'.
MOVE wa_lipsheader-matnr TO wa_lips-ummat.
MOVE wa_lipsheader-werks TO wa_lips-umwrk.
MOVE wa_lipsheader-werks TO wa_lips-werks.
MOVE wa_lipsheader-lgort TO wa_lips-lgort .
MOVE wa_lipsheader-lgort TO wa_lips-umlgo.
MOVE c_bwart TO wa_lips-bwart.
MOVE wa_lipsheader-posnr TO wa_lips-posnr.
MOVE wa_lipsheader-lfimg TO wa_lips-lfimg.
MOVE wa_lipsheader-meins TO wa_lips-meins.
MOVE wa_lipsheader-volum TO wa_lips-volum.
MOVE wa_lipsheader-vbeln TO wa_lips-vbeln.
MOVE wa_lipsheader-bwtar TO wa_lips-bwtar.
APPEND wa_lips TO t_lipsheader.
ELSE.
IF wa_lipsheader-uepos IS NOT INITIAL AND wa_lipsheader-pstyv
= 'TAE'.
MOVE wa_lipsheader-matnr TO wa_lips-matnr.
MOVE wa_lipsheader-werks TO wa_lips-werks.
MOVE wa_lipsheader-lgort TO wa_lips-lgort.
MOVE wa_lipsheader-lfimg TO wa_lips-lfimg.
MOVE wa_lipsheader-posnr TO wa_lips-posnr.
MOVE wa_lipsheader-voleh TO wa_lips-voleh.
MOVE wa_lipsheader-meins TO wa_lips-meins.
MOVE wa_lipsheader-volum TO wa_lips-volum.
MOVE wa_lipsheader-vbeln TO wa_lips-vbeln.
MOVE wa_lipsheader-bwtar TO wa_lips-bwtar.
IF wa_lips-lgort IS INITIAL.
wa_lips-lgort = wa_lips-umlgo.
ENDIF.
APPEND wa_lips TO t_lipsitem.
ENDIF.
ENDIF.
ENDLOOP.
----
BDC TABLE CONTROL
----
LOOP AT t_lipsheader INTO wa_lipsheader.
WRITE : bldat TO date1 MM/DD/YYYY,
budat TO date2 MM/DD/YYYY.
bdc_dynpro 'SAPMM07M' '0400'.
bdc_field 'BDC_CURSOR' 'RM07M-LGORT'.
bdc_field 'BDC_OKCODE' '/00' .
bdc_field 'MKPF-BLDAT' date1.
bdc_field 'MKPF-BUDAT' date2.
bdc_field 'MKPF-OIB_BLTIME' hhmm.
bdc_field 'RM07M-BWARTWA' c_bwart.
bdc_field 'RM07M-WERKS' wa_lips-werks.
bdc_field 'RM07M-LGORT' wa_lips-lgort.
bdc_field 'XFULL' 'X'.
bdc_field 'RM07M-WVERS2' 'X'.
bdc_dynpro 'SAPMM07M' '0421'.
bdc_field 'BDC_CURSOR' 'MSEG-WERKS(02)'.
bdc_field 'BDC_OKCODE' '/00'.
bdc_field 'MSEGK-UMWRK' wa_lips-umwrk.
bdc_field 'MSEGK-UMLGO' wa_lips-umlgo.
bdc_field 'MSEGK-UMMAT' wa_lips-ummat.
----
Data declaration
----
DATA:quan(17) TYPE c.
DATA:ftable(20) TYPE c.
DATA:k TYPE n.
MOVE 1 TO k.
LOOP AT t_lipsitem INTO wa_lips WHERE vbeln
= wa_lipsheader-vbeln.
IF sy-subrc = 0.
CONCATENATE 'MSEG-MATNR(' k ')' INTO ftable.
bdc_field ftable wa_lips-matnr.
MOVE wa_lips-lfimg TO quan.
CONCATENATE 'MSEG-ERFMG(' k ')' INTO ftable.
bdc_field ftable quan .
CONCATENATE 'MSEG-LGORT(' k ')' INTO ftable.
bdc_field ftable wa_lips-lgort.
CONCATENATE 'MSEG-CHARG(' k ')' INTO ftable.
bdc_field ftable wa_lips-bwtar.
CONCATENATE 'MSEG-WERKS(' k ')' INTO ftable.
bdc_field ftable wa_lips-werks.
ENDIF.
k = k + 1.
ENDLOOP.
bdc_field 'DKACB-FMORE' 'X'.
bdc_dynpro 'SAPLKACB' '0002'.
bdc_field 'BDC_OKCODE' '=ENTE' .
bdc_dynpro 'SAPLOIB_QCI' '0500'.
bdc_field 'BDC_CURSOR' 'OIB_A08-TDICH'.
bdc_field 'BDC_OKCODE' '=CALC'.
bdc_dynpro 'SAPLOIB_QCI' '0500'.
bdc_field 'BDC_CURSOR' 'OIB_A08-TDICH'.
bdc_field 'BDC_OKCODE' '=CONT'.
bdc_dynpro 'SAPLKACB' '0002'.
bdc_field 'BDC_OKCODE' '=ENTE'.
bdc_dynpro 'SAPLOIB_QCI' '0500'.
bdc_field 'BDC_CURSOR' 'OIB_A08-TDICH'.
bdc_field 'BDC_OKCODE' '=CALC'.
bdc_dynpro 'SAPLOIB_QCI' '0500'.
bdc_field 'BDC_CURSOR' 'OIB_A08-TDICH'.
bdc_field 'BDC_OKCODE' '=CONT'.
bdc_dynpro 'SAPLKACB' '0002'.
bdc_field 'BDC_OKCODE' '=ENTE'.
bdc_dynpro 'SAPMM07M' '0421'.
bdc_field 'BDC_CURSOR' 'MSEG-ERFMG(01)'.
bdc_field 'BDC_OKCODE' '=BU'.
bdc_field 'DKACB-FMORE' 'X'.
bdc_dynpro 'SAPLKACB' '0002'.
bdc_field 'BDC_OKCODE' '=ENTE'.
*set the parametrs for call transaction.
ctumode = 'N'.
cupdate = 'L'.
CALL TRANSACTION 'MB11' USING t_bdcdata MODE ctumode
UPDATE cupdate MESSAGES INTO t_messtab.
LOOP AT t_messtab INTO wa_messtab .
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
msgid = wa_messtab-msgid
msgnr = wa_messtab-msgnr
msgv1 = wa_messtab-msgv1
msgv2 = wa_messtab-msgv2
msgv3 = wa_messtab-msgv3
msgv4 = wa_messtab-msgv4
IMPORTING
message_text_output = wa_textout.
MESSAGE wa_textout TYPE wa_messtab-msgtyp.
ENDLOOP.
ENDLOOP.
ENDMETHOD.
Refer the link:
https://forums.sdn.sap.com/click.jspa?searchID=3846401&messageID=3725212
<b>Reward points</b>
Regards
07-13-2007 2:28 PM
07-19-2007 7:06 AM
Hi,
I am recording transaction FBS1.At the end of third screen on saving the record it gives an addiotional pop-up (conatining irrelevant data as per RFD).On debugging i found that for batch input data on transaction FBS1 this pop-up will be called.On saying OK to this pop-up without putting any entry it exits the recording.However if we cancel it the recording is incomplete.I cannot suppress this code as it is standard SAP code.
Please help.
I cant use BAPI as the client wants to see the screen with data as per the logic and then save to generate the doc.