如何判断代码是否是在UPDATE TASK的Session中执行?

1. 背景

有时我们想控制ABAP代码在UPDATE TASK中的逻辑,例如某些逻辑执行,某些逻辑不执行。

那么,我们应该如何判断当前代码运行的环境呢?也即,怎么知道一段运行时代码是运行在当前的ABAP session中,还是运行在update session中呢?

2. 解决方案

要识别这个场景,需要使用到ABAP的系统类CL_SYSTEM_TRANSACTION_STATE, 它提供了一系列的系统级别的方法,以返回当前SAP LUW状态。

系统类类CL_SYSTEM_TRANSACTION_STATE是与SAP LUW概念紧密绑定在一起的一个服务类,他会直接调用ABAP Kernel返回对应的信息。

在这里插入图片描述

CL_SYSTEM_TRANSACTION_STATE类描述正在运行的事务的当前状态,其对应方法的含义如下:

  • 如果事务正在进行本地(UPDATE LOCAL)或远程更新(IN UPDATE TASK),方法GET_INUPDATE_TASK( )返回值1,否则返回值为0。
  • 如果为事务开启了本地更新( SET UPDATE TASK LOCAL ),方法GET_UPDATE_TASK_LOCAL( )返回值1。否则返回值为0。
  • 如果事务正在PERFORM … ON COMMIT或PERFORM … ON ROLLBACK注册的子程序中执行,方法GET_ON_END_OF_TRANSACTION( )返回值1,否则返回值为0。
  • 如果事务正在PERFORM … ON COMMIT注册的子程序中执行,方法GET_ON_COMMIT( )返回值1,否则返回值为0。
  • 如果事务正在PERFORM … ON ROLLBACK注册的子程序中执行,方法GET_ON_ROLLBACK( )返回值1。在回滚。否则返回值为0。
  • 方法GET_SAP_LUW_KEY( )返回一个唯一标识当前SAP-Transaction的键值,这个键值在事务的对话框部分和更新部分都是相同的。

因此,借助此系统类,可以轻易地完成对于程序运行环境的判断。例如,判断代码是否是在UPDATE TASK的Session中执行的程序如下:

IF cl_system_transaction_state=>get_in_update_task( ) = 1.
  WRITE 'Update task is active'.
ELSE.
  WRITE 'Update task is inactive'.
ENDIF.

3. 小结

本文介绍了ABAP程序中的一个系统类CL_SYSTEM_TRANSACTION_STATE,通过此类,可以识别出程序在当前SAP LUW状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十年铸器

给作者赏杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值