前提是这几个BAPI产生的结果互不影响,可以同步提交,下面是理论,还需要实例测试!
由于对表直接MODIFY 、insert、update等都触发隐士提交,建议写在后面。
DO循环里面成功 则EXIT跳出DO循环。进入LOOP下一层。
LOOP
DO 5 TIMES.
CALL A
if sy-subrc eq 0
CALL B
IF SY-SUBRC EQ 0.
CALL C
IF SY-SUBRC EQ 0
modify db.
1.如 果 是 commit work还是BAPI 那个异步提交,异步提交,则按顺序 则有4个更新进程需要去提交,这时判断 commit work 返回sy-subrc 只是 modify db结果,前面成功与否需要查看实际数据情况。
2.如果是同步提交,则 判断 返回的 sy-subrc 如果成功 则整体提交成功 并EXIT当前DO循环,失败 则 ROLLBACK ,则全部失败。
ENDIF.
ENDIF.
endif.
ENDO.
由于对表直接MODIFY 、insert、update等都触发隐士提交,建议写在后面。
DO循环里面成功 则EXIT跳出DO循环。进入LOOP下一层。
LOOP
DO 5 TIMES.
CALL A
if sy-subrc eq 0
CALL B
IF SY-SUBRC EQ 0.
CALL C
IF SY-SUBRC EQ 0
modify db.
1.如 果 是 commit work还是BAPI 那个异步提交,异步提交,则按顺序 则有4个更新进程需要去提交,这时判断 commit work 返回sy-subrc 只是 modify db结果,前面成功与否需要查看实际数据情况。
2.如果是同步提交,则 判断 返回的 sy-subrc 如果成功 则整体提交成功 并EXIT当前DO循环,失败 则 ROLLBACK ,则全部失败。
ENDIF.
ENDIF.
endif.
ENDO.
ENDLOOP.
经过多年努力,终于找到失散多年的 多个Bapi提交思路, 首先这个思路是 每个BAPI OR ZBAPI用一个CLASS中的正向方法A中实现,它的逆向方法(即Reverse冲销方法)B中实现正向A的冲正。(不存在逆向不在此说了,比如起死回生),A执行成功后 commit work. 然后下一步BAPI OR ZBAPI,成功继续COMMIT WORK.如果 第N步正向骤失败,则去catch exception 然后Reverse N-1步骤的 B方法(冲销方法),Until N-1 = 1 步骤的B方法成功。基本保持事物一致性,写的好 ,一致性在98%以内控制,2%冲销失败,不能保证一致,需要人工介入。