abap - 尽管 BAPI_TRANSACTION_ROLLBACK 仍提交数据库更新
问题描述
我有一个Modify
更新自定义表的声明,之后我调用BAPI_CONTRACT_CHANGE
. 当 BAPI 未能更改它正在调用的文档时BAPI_TRANSACTION_ROLLBACK
。但是,它不会将数据更改回由Modify
语句更新的自定义表中。
IF gt_return[] IS NOT INITIAL.
READ TABLE gt_return INTO gwa_return WITH KEY type = 'E'.
IF sy-subrc EQ 0.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
MESSAGE i021(zxx).
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = abap_true.
ENDIF.
ENDIF.
感谢您的回复。
修改语句存在于 bapi 调用之前的某处。该程序也可以从外部门户运行。当我从门户网站运行它时,行为与预期一致,即 BAPI_TRANSACTION_ROLLBACK 有效,并且自定义表中的数据没有得到更新。只有当我从 ECC 运行它时它才会失败。
解决方案
您会在每个 PBO 屏幕交互中获得隐式提交。因此,插入/修改/更新数据库之后的任何用户交互都将被提交,而无需发出提交工作的代码。如果要回滚,必须在下一个 PBO 周期之前完成。
推荐阅读
- azure-devops - MSIX:应用程序安装失败并显示错误消息
- excel - 如何编写 Excel 公式,计算匹配多个条件的多个单元格
- spring-integration - 如何让 Spring Integration Http.inboundGateway 返回 HAL Json?
- python - 为什么脚本无法创建注册表项?
- python - Jupyter 导入函数中的相对文件路径
- python - 如何在自定义 Bazel 规则或 genrule 中打包生成的 python 文件?
- python - 使用列表推导根据列表中的条件更改字符串
- angular - 如何在 http 错误的情况下停止订阅
- c - Linux I2C:读取消息的长度
- c++ - 覆盖 C++ 中的成员变量