SAP Solution:BDC执行后,结果与手工执行TCODE不一样怎么办

昨天帮朋友解决一个BDC的问题,把相关知识分享一下。

问题描述


WB01创建工厂。手工执行TCode创建,没有问题;但是通过BDC创建,总是有部分数据无法写入。

问题解决


CALL TRANSACTION时,OPTION中的RACOMMIT设置为X即可。

问题分析


如果RACOMMIT为空,COMMIT语句会中断BDC的执行。如果加上RACOMMIT,COMMIT语句执行后,被调用程序在执行COMMIT语句后,还会继续执行后续的代码。

而对于WB01,该程序在执行COMMIT后,还有后续代码需要执行,如果不设置RACOMMIT为X,就会导致很多代码执行不了,所以BDC执行结果也就与手工执行TCODE的结果不一样了。

测试分析


下图是测试代码。

1、我在该代码中调用事物代码ZTEST003,并记录执行的消息到LT_BDCMSG中

2、事务代码ZTEST003中,会报两条消息,其中一条是在COMMIT语句后报出来的

文字版代码附上

*&---------------------------------------------------------------------*
*& Report ZTESTSL
*&---------------------------------------------------------------------*
*& 微信公众号:SAP亮亮
*&---------------------------------------------------------------------*
REPORT ZTESTSL NO STANDARD PAGE HEADING.

PARAMETERS: p_typ TYPE ctu_mode AS LISTBOX OBLIGATORY DEFAULT 'N' VISIBLE LENGTH 20,
            p_upd TYPE ctu_update AS LISTBOX OBLIGATORY DEFAULT 'S' VISIBLE LENGTH 20,
            p_racom TYPE c AS CHECKBOX.

DATA: lt_bdcdata TYPE TABLE OF bdcdata,
      lt_bdcmsg TYPE TABLE OF bdcmsgcoll WITH HEADER LINE,
      l_opt TYPE ctu_params.

INITIALIZATION.
%_p_typ_%_app_%-text = '处理模式'.
%_p_upd_%_app_%-text = '更新模式'.
%_p_racom_%_app_%-text = '提交后继续'.

START-OF-SELECTION.
l_opt-racommit = p_racom.
l_opt-dismode = p_typ.
l_opt-updmode = p_upd.

CALL TRANSACTION 'ZTEST003' USING lt_bdcdata[] OPTIONS FROM l_opt MESSAGES INTO lt_bdcmsg[].
LOOP AT lt_bdcmsg.
  WRITE: lt_bdcmsg-msgtyp, lt_bdcmsg-msgv1, /.
ENDLOOP.

"附:事务代码ZTEST003对应的程序的代码如下
*REPORT ZTEST003.
*
*MESSAGE 'Message 1' TYPE 'S'.
*COMMIT WORK.
*
*MESSAGE 'Message 2' TYPE 'S'.*COMMIT WORK. 

RACOMMIT为空时,执行代码


RACOMMIT为X时,执行代码


如上图所示,理论得到验证。

等什么呢,还不快在看、关注、分享?


文中如有公众号广告,请忽视。

你可能感兴趣的:(SAP Solution:BDC执行后,结果与手工执行TCODE不一样怎么办)