|
在做好录屏以后SHDB。
首先必须定义BDC变量:
* BDC table
DATA: t_bdc LIKE bdcdata OCCURS 0 WITH HEADER LINE,
t_bdcmsg LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE.
DATA: BEGIN OF t_log OCCURS 0,
information(289) TYPE c, "返回信息
END OF t_log.
DATA: v_mode TYPE c VALUE 'N'.
其中TABLE t_bdc中记录的具体的操作步骤,而TABLE t_bdcmsg是记录系统返回的信息,成功与否都记录到自定义的信息表t_log中。
先写个记录BDC的函数:
FORM. fm_set_bdc TABLES t_bdc STRUCTURE bdcdata
USING u_sign TYPE c
u_par1
u_par2.
CLEAR: t_bdc.
IF u_sign = 'X'.
t_bdc-program = u_par1.
t_bdc-dynpro = u_par2.
t_bdc-dynbegin = u_sign.
ELSE.
t_bdc-fnam = u_par1.
t_bdc-fval = u_par2.
ENDIF.
APPEND t_bdc.
ENDFORM.
然后写入T_bdc:
PERFORM. fm_set_bdc:
TABLES t_bdc USING 'X' 'SAPMV45A' '0102',
TABLES t_bdc USING ' ' 'BDC_OKCODE' '/00',
TABLES t_bdc USING ' ' 'VBAK-VBELN' it_display-vbeln,
TABLES t_bdc USING 'X' 'SAPMV45A' '4001',
TABLES t_bdc USING ' ' ' VBKD-BSTDK' '2006.10.01'.
因为此处是修改操作,所以要切记写入的只是你修改的数据,千万别把订单本来的数据也写入t_bdc,如果写入则会把需要修改的所有订单都该成举例的订单的数据,而我们需要修改的仅仅是增加一个PO DATE“2006.10.01”。
然后是调用事物代码:
CALL TRANSACTION 'VA42'
USING t_bdc
MODE v_mode "Background performance
UPDATE 'S' "local updata
MESSAGES INTO t_bdcmsg. "all message table
v_mode是显示模式:
“A”表示显示每一步操作步骤,
“N”表示不显示步骤,
“E”表示当出现错误的时候显示出错的位置。
系统信息写入到t_bdc中。
最后是收集系统信息(成功与否,要是失败,失败的原因)并输出到SAP程序屏幕
READ TABLE t_bdcmsg WITH KEY msgtyp = 'S'
msgid = 'V1'
msgnr = '311'. "批导入成功的标志,可以自己debug表t_bdcmsg中去找.
IF sy-subrc EQ 0.
CONCATENATE '订单号码:'
it_display-vbeln
',项目号:'
it_display-posnr
'修改成功' INTO t_log.
APPEND t_log.
CLEAR t_log.
ELSE.
LOOP AT t_bdcmsg.
IF t_bdcmsg-msgtyp = 'E'
OR t_bdcmsg-msgv1 <> ''
OR t_bdcmsg-msgv2 <> ''
OR t_bdcmsg-msgv3 <> ''
OR t_bdcmsg-msgv4 <> ''.
MESSAGE ID t_bdcmsg-msgid “收集错误信息,并写入自定义的表t_log中。
TYPE 'S'
NUMBER t_bdcmsg-msgnr
WITH t_bdcmsg-msgv1
t_bdcmsg-msgv2
t_bdcmsg-msgv3
t_bdcmsg-msgv4
INTO t_log-information.
CONCATENATE '订单号码:'
it_display-vbeln
',项目号:'
it_display-posnr
'出错:'
t_log-information
INTO t_log-information.
APPEND t_log.
CLEAR t_log.
ENDIF.
ENDLOOP.
ENDIF.
LOOP AT t_log. "显示出错信息
WRITE:/ t_log-information.
ENDLOOP.
到此一个批导入程序基本完成。 |
|
|