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' L_BUDAT,
'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' 'A',
'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
本文通过具体的SAP BDC示例代码,详细展示了如何使用BDC进行数据的批量导入,包括设置程序、动态程序步骤及字段输入等关键操作。
3895

被折叠的 条评论
为什么被折叠?



