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: 

BDC code inside a method in a BADI implementation.?

Former Member
0 Kudos

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.

3 REPLIES 3

Former Member
0 Kudos

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

RichHeilman
Developer Advocate
Developer Advocate
0 Kudos

Or you can encapsulate your BDC coding within a function module and simply call the funciton module, passing the appropriate parameters.

Regards,

Rich Heilman

Former Member
0 Kudos

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.