一個完整的BDC程式,僅供參考!(包括各種引數的配置)
BDC的引數我們都比較熟悉了:可能有一個opt我們用得比較少,而且經常有問題的時候我們還需要F1去檢視是否有辦法可以解決。(例如由於commit work導致沒有返回message的)
LOOP AT IT_BDC.
PERFORM bdc_dynpro USING 'SAPMF05A' '0122'.
PERFORM bdc_field USING: 'BDC_CURSOR' 'BKPF-WAERS',
'BDC_OKCODE' '=SL',
'BKPF-BLDAT'
'BKPF-BLART' 'dz',
'BKPF-BUKRS' 'JP01',
'BKPF-BUDAT' L_BUDAT,
'BKPF-WAERS' 'jpy',
'BKPF-XBLNR' IT_BDC-BELNR,
'FS006-DOCID'
PERFORM bdc_dynpro USING 'SAPMF05A' '0710'.
PERFORM bdc_field USING: 'BDC_CURSOR' 'RF05A-XPOS1(03)',
'BDC_OKCODE' '/00',
'RF05A-AGBUK' 'JP01',
'RF05A-AGKOA' 'D',
'RF05A-AGUMS'
'RF05A-XNOPS' 'X',
'RF05A-XMULK' 'X',
'RF05A-XPOS1(01)' ' ',
'RF05A-XPOS1(03)' 'X'.
PERFORM bdc_dynpro USING 'SAPMF05A' '0609'.
PERFORM bdc_field USING: 'BDC_CURSOR' 'RF05A-XNOPS(01)',
'BDC_OKCODE' '=GO',
'RF05A-AGKON(01)' '0001027941',
'RF05A-AGKOA(01)' 'S',
'RF05A-XNOPS(01)' 'X'.
PERFORM bdc_dynpro USING 'SAPMF05A' '0731'.
PERFORM bdc_field USING: 'BDC_CURSOR' 'RF05A-SEL01(02)',
'BDC_OKCODE' '/00',
'RF05A-SEL01(01)' IT_BDC-BELNR,
'RF05A-SEL01(02)' IT_BDC-BELNR1,
'RF05A-SEL01(03)' IT_BDC-BELNR2,
'RF05A-SEL01(04)' IT_BDC-BELNR3,
'RF05A-SEL01(05)' IT_BDC-BELNR4,
'RF05A-SEL01(06)' IT_BDC-BELNR5.
PERFORM bdc_dynpro USING 'SAPMF05A' '0731'.
PERFORM bdc_field USING: 'BDC_CURSOR' 'RF05A-SEL01(01)',
'BDC_OKCODE' '=PA'.
PERFORM bdc_dynpro USING 'SAPDF05X' '3100'.
PERFORM bdc_field USING: 'BDC_OKCODE' '=BU',
'BDC_SUBSCR' 'SAPDF05X 6102PAGE',
'BDC_CURSOR' 'RF05A-ABPOS',
'RF05A-ABPOS' '1'.
CALL TRANSACTION 'F-30' USING BDCDATA
MODE P_MODE
MESSAGES INTO L_BDCMSG.
* IF SY-SUBRC EQ 0.
* COMMIT WORK AND WAIT.
* ELSE.
* ROLLBACK WORK.
* ENDIF.
WAIT UP TO p_wait SECONDS.
READ TABLE GT_LOG INTO WA_LOG WITH KEY BELNR = IT_BDC-BELNR.
LOOP AT L_BDCMSG.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
msgid = L_BDCMSG-MSGID
msgnr = L_BDCMSG-MSGNR
msgv1 = L_BDCMSG-MSGV1
msgv2 = L_BDCMSG-MSGV2
msgv3 = L_BDCMSG-MSGV3
msgv4 = L_BDCMSG-MSGV4
IMPORTING
message_text_output = WA_LOG-MSG.
IF L_BDCMSG-MSGTYP EQ 'S'.
CHECK L_BDCMSG-MSGID EQ 'F5' AND L_BDCMSG-MSGNR EQ '312'.
WA_LOG-AUGBL = L_BDCMSG-MSGV1.
ENDIF.
ENDLOOP.
LOOP AT GT_LOG WHERE BELNR = IT_BDC-BELNR.
IF L_BDCMSG-MSGTYP EQ 'S'.
CHECK L_BDCMSG-MSGID EQ 'F5' AND L_BDCMSG-MSGNR EQ '312'.
MODIFY GT_LOG FROM WA_LOG TRANSPORTING AUGBL.
ELSE.
CHECK L_BDCMSG-MSGTYP EQ 'E'.
MODIFY GT_LOG FROM WA_LOG TRANSPORTING MSG.
ENDIF.
ENDLOOP.
CLEAR BDCDATA[].
CLEAR L_BDCMSG[].
ENDLOOP.
*----------------------------------------------------------------------*
* Start new screen *
*----------------------------------------------------------------------*
FORM bdc_dynpro USING program dynpro.
CLEAR bdcdata.
bdcdata-program = program.
bdcdata-dynpro = dynpro.
bdcdata-dynbegin = 'X'.
APPEND bdcdata.
ENDFORM. "bdc_dynpro
*----------------------------------------------------------------------*
* Insert field *
*----------------------------------------------------------------------*
FORM bdc_field USING fnam fval.
* IF fval <> nodata.
CLEAR bdcdata.
bdcdata-fnam = fnam.
bdcdata-fval = fval.
APPEND bdcdata.
* ENDIF.
ENDFORM. "bdc_field