Abap 从代码调用PA30事务后回滚数据库访问

Abap 从代码调用PA30事务后回滚数据库访问,abap,rollback,Abap,Rollback,我们使用以下调用更改infotype记录: CALL TRANSACTION 'PA30' USING gt_bdcdata OPTIONS FROM ls_ctu_params MESSAGES INTO et_mess. 其中gt\u bdecdata包含: 而ls_ctu_参数包含: 之所以使用CALL TRANSACTION而不是HR_INFOTYPE_OPERAION等功

我们使用以下调用更改infotype记录:

CALL TRANSACTION 'PA30' USING         gt_bdcdata
                        OPTIONS FROM  ls_ctu_params
                        MESSAGES INTO et_mess.
其中gt\u bdecdata包含:

而ls_ctu_参数包含:

之所以使用CALL TRANSACTION而不是HR_INFOTYPE_OPERAION等功能模块,是因为t588z表中存在老式的动态动作,只有CALL TRANSACTION才会触发这些动作

在那个调用之后,我们有了进一步的数据库访问,当访问失败时,应该会导致一个一般的回滚,这需要影响所提到的调用

我们没有意识到如何将DB状态回滚到调用事务调用之前的状态

我们试图:

使用回滚工作语句。 调用BAPI\u事务\u回滚FM。 在ls_ctu_参数结构中打开RACOMMIT标志。
没有人进行回滚。

无法回滚已完成的调用。 调用的事务在一个单独的内部会话和另一个内部会话中加载,因此一旦处理了数据库更改,PA30将提交,并且无法撤消


您应该尝试使用FM/BAPI和类似BADI的实现来处理给您带来麻烦的操作,或者通过重复事务将数据更改回初始状态。

程序SAPMP50A TA PA30中有大量Commit Work语句。我会在它们上设置断点,并在调试时检查是否通过断点。你试过了吗?在我看来,在你能够检查它之前,LUW已经完成了。hanks@stego我已经试着跳过它们了。然后做了选项1、2、3但没有成功。UPMODE='K'!?希望所有无效值都是。谢谢@SandraRossi。键盘邻居。。。编辑。一般来说,我不知道PA30做什么,如果事务做了一些更新但没有做提交工作,那么在调用事务`之后添加回滚工作将取消更新。当然,这将被认为是任何代码中的缺陷,这些代码只执行更新,而不执行提交工作或数据库提交。我设置了语句断点,跳过了任何单个提交工作,并在调用事务后进行了回滚,数据没有回滚。@多拉德,谢谢。我忘了说,这很重要,因为这里讨论的是屏幕的批输入模拟:在每次屏幕显示或模拟之后都有一个隐式的数据库提交。因此,如果更新是在没有更新任务的情况下直接完成的,请确保跳过的提交工作仅发生在最后一个BDCDATA屏幕之后。最终,它可能要求事务保留未完成的1001返回码和消息s34400没有dynpro&&的批输入数据。但不建议跳过提交工作,因为这是对标准的修改。