ABAP中的SET UPDATE TASK LOCAL是什么意思?


 

经常有小伙伴问,看到有些ABAP程序中,在CALL FUNCTION IN UPDATE TASK之前,会加上一步SET UPDATE TASK LOCAL,这个到底是什么意思呢?

1. 基础知识
1.1 SAP LUW
要弄清楚SET UPDATE TASK LOCAL的作用,要先了解SAP LUW这个概念,不知道的小伙伴可以先百度下。简而言之, SAP LUW (logical unit of work) 是一个逻辑业务单元,将属于同一业务单元的数据看做一个整体。在一个SAP LUW内的操作,要么一起成功,要么一起失败。这样可以确保业务逻辑数据的一致性。

注册SAP LUW的方式有下面三种:

◾ Update (bundling using function modules) 
语法:CALL FUNCTION ... IN UPDATE TASK

◾Transactional RFC (bundling using function modules) 
语法:CALL FUNCTION ... IN BACKGROUND UNIT

◾Bundling using subroutines 
语法:PERFORM ... ON COMMIT 


仅当遇到COMMIT WORK关键字是,SAP LUW内注册的内容才会真正的执行。

1.2 Internal Session
一个Session也即一个进程,SAP系统内有三种类型的进程:

DIA - 会话进程
UPD / UPD2 - 更新进程
BTC - 后台进程
SPO - Spool Request (处理打印请求)
对于注册与SAP LUW内的请求,通常是通过UPD请求处理的。也即,在会话进程DIA内,用户可能进行了若干的业务操作(例如,更新了某些业务数据),操作结束后,客户点击保存(程序中触发Commit Work),退出会话进程。

此时,从用户的角度,业务已经结束。但实际,在Commit Work触发后,系统后台会触发UPD进程,处理更新操作。

2. SAP LUW举例
下面代码是注册SAP LUW, 并触发Commit Work的一个最简单的实例:

ls_linkage-aapm_guid = cl_system_uuid=>create_uuid_x16_static( ).
CALL FUNCTION 'ZTEST_INSERT_LINKAGE' IN UPDATE TASK
  EXPORTING
    is_linkage = ls_linkage.

COMMIT WORK.
WRITE: 'done.'.


在调试器中,打开Update Debugging 模式,这样我们可以追踪到执行COMMIT WORK后,系统打开的UPD更新进程。

在这里插入图片描述 

效果入下:
在DIA进程外,会并行打开一个UPD进程来执行SAP LUW注册的内容。

在这里插入图片描述
3. SET UPDATE TASK LOCAL的作用
了解了以上的基础知识,理解SET UPDATE TASK LOCAL就非常容易啦。其实这组关键字已经很好地表达了其作业,也即 “在本进程中执行更新任务” 。

示例代码:

SET UPDATE TASK LOCAL.

ls_linkage-aapm_guid = cl_system_uuid=>create_uuid_x16_static( ).
CALL FUNCTION 'ZTEST_INSERT_LINKAGE' IN UPDATE TASK
  EXPORTING
    is_linkage = ls_linkage.

COMMIT WORK.
WRITE: 'done.'.


这段代码和之前代码的区别就在于,在注册LUW前,先声明了SET UPDATE TASK LOCAL.

这样的效果是,在执行COMMIT WORK时,并不会开启新的UPD进程来进行LUW内程序的执行,而是在本DIA进程内,顺序执行LUW的内容。

效果如下:

在注册IN UPDATE TASK时,没有任何区别,仅注册,不执行
遇到Commit Work后,在本session内,执行Function Module 内部的内容

在这里插入图片描述 

4. 小结与对比
相信通过上面的两个小例子,已经清楚地说明了SET UPDATE TASK LOCAL这组关键字的作用。下面是几点小结和对比:

SET UPDATE TASK LOCAL要声明在CALL FUNCTION IN UPDATE TASK前才会其效果
在使用SET UPDATE TASK LOCAL模式下,COMMIT WORK和COMMIT WORK AND WAIT的效果是一样的(因为顺序执行其实就是在wait 😃 )
SET UPDATE TASK LOCAL模式下只影响high-priority 的Update Function Module, 对于Low-priority 的Function Module是不起作用的,也即low-priority的update function module还是会开启新的UPD进程进行执行

在这里插入图片描述

 

以上便是对于SET UPDATE TASK LOCAL的解读,希望可以解答你的疑问。
————————————————
版权声明:本文为CSDN博主「SAP-nkGavin」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/nkGavinGuo/article/details/122707200

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值