Complex LUW processing

<!--左侧开始-->

Complex LUW processing

用两种方式可以实现在一个program内部调用其它的ABAP program:

l 被调用的program是被inserted的,即目前的program停止运行,当被调用的program执行完毕后,当前的program继续执行。CALL FUNCTION… CALL TRANSACTION… SUBMIT <program> AND RETURN可以实现这种方式的调用。

l Calling program被interrupted,被调用的program被started。 SUBMIT <program> LEAVET TO TRANSACTION <t_code>是这种方式的调用。

SUBMIT和SUBMIT AND RETURN用来调用excutable program。CALL TRANSACTION和LEAVET TO TRANSACTION用来调用transactions。

Function module可以asynchronously call,通过addition STARTING NEW TASK <task name>来实现。Function module的异步调用与调用程序是平行运行的。可以在调用程序中通过RECEIVE RESULTS FROM FUNCTION来得到function module的运行结果。想使用STARTING NEW TASK的function module必须被标识为remote enable。

一个user session可以有多个external session(mode)。一个external session对应于一个SAP R/3 window。一个external session可以最多有20个internal session。一个程序运行在一个internal session中。Program data只有在program中是visible的。可以通过ABAP MEMORY和SAP MEMORY在不同的程序间传递data。一个user session有一个SAP MEMORY,这个user session的所有external session都可以访问他。SAP MEMORY用于存储变量值,其生命周期与user session一样。可以用SAP MEMORY中的值作为screen input fields的缺省值。由于user session的所有external session都可以访问SAP MEMORY,所以在external session的internal session之间传递值时应当使用ABAP MEMORY。

每个external session有自己的ABAP MEMORY,external session中的internal session都可以访问ABAP MEMORY中的值。ABAP MEMORY可以存储internal program的variable,可以用来在external session的internal session中传递数据。一旦external session结束相应的ABAP MEMORY也会被初始化。

在程序中调用function module时,function module所在的function group就会被加载到当前的internal session,当前的程序中断,function module处理完后,程序继续执行。一旦function group被加载,function group的全局变量就会一直存在在internal session中直到程序结束。这也意味着当调用这个function group的另外一个function module时,function group不需要再被加载。

CALL TRANSACTION SUBMIT AND RETURN运行在另外一个新的internal session中,被调用的program结束时,这个internal session就会被terminated,调用程序就会继续执行。被调用程序可以通过LEAVE PROGRAM来结束自己。

当使用SUBMIT调用程序时,当前的program就会被从internal session中removed,被调用的程序被load到当前的internal session。

LEAVE TO TRANSACTION会remove掉当前external session中的所有internal session,然后创建新的internal session来执行调用的transaction。同时ABAP MEMORY也会被initialized。

Asynchronously function module call会在当前的application server上新的opened的external session上执行。可以在调用程序上得到function module的运行结果(RECIEIVING RESULTS FROM FUNCTION)。

有五种方式可以实现程序间传递数据;

l 通过被调用程序的interface(subroutine,function module,dialog modules,standard selection screen of a report)

l 通过ABAP MEMORY

l 通过SAP MEMORY

l Database tables(EXPROT IMPORT)

l Presentation server(GUI_UPLOAD GUI_DOWNLOAD)或者application server(TRANSFER READ DATASET)上的文件

SUBROUTINE和FUNCTION MODULE可以通过INTERFACE来传递数据,standard selection screen程序可以通过下列方式来实行:

l 通过variant:SUBMIT addition USING SELECTION-SET

l 给selection-screen的input fields赋值

SUBMIT <program> [AND RETURN] [VIA SELECTION-SCREEN]

WITH <parameter> EQ <value>

WITH <sel_opt> <operator> <value> SIGN <s>

WITH <sel_opt> BETWEEN <value1> AND <value2> SIGN <s>

WITH <sel_opt> NOT BETWEEN <value1> AND <value2> SIGN <s>

WITH <sel_opt> IN <sel_tab>

通过EXPORT TO MEMORY ID <id>可以把程序中变量的值以data cluster的形式copy到ABAP memory中。<id>最长为13个字符是创建的data cluster的唯一标识。如果EXPROT有相同的memory id,原来的就会被overwrite。通过IMPORT FROM MEMORY ID <id>可以把data cluster中的值读到程序的变量中。Read和write程序的变量必须有相同的format。FREE MEMORY ID <id>可以删除对应的data cluster。FREE MEMORY则会初始化当前external session的ABAP MEMORY。通过IMPORT可以只读取data cluster的部分数据。

在object navigator中你可以定义PARAMETER ID(存储在表TPARA中),parameter ID不能超过20个字符。通过SET PARAMETE ID可以为当前user session的SAP MEMOORY的parameter设置值。可以在同一个user session中通过GET PARAMETER ID得到SAP MEMORY中parameter的值。也可以通过在screen field中输入值来设置SAP MEMORY中parameter的值。为了做到这点定义screen field的data element必须与相应的parameter联系起来。而且screen field的set parameter属性必须激活。反过来,screen field也可以取得SAP MEMORY中parameter的值,做到这点需要下面三个前提条件:

l 定义screen field的data element要与parameter id联系起来

l Screen field的GET function被激活。

l 程序只为screen field提供初始值。

这样program和screen就可以与SAP MEMORY交换数据了。可以通过screen field的f1 help->technical info直到screen field与那个parameter id有联系。

通过SAP MEMORY可以为screen field设置缺省值,如:

Carrid = ‘LH’.

SET PARAMETER ID ‘CAR’ FIELD carrid.

CALL TRANSACTION ‘TABC’ [AND SKIP FIRST SCREEN].

Function module和调用他的program在一个LUW中。通过SUBMIT AND RETURN,CALL TRANSACTION,SUBMIT,LEAVE TO TRANSACTION调用的program,运行在它们自己的LUW中,也就是说它们的CHANGE REQUEST有自己的update key。对于SUBMIT AND RETURN和CALL TRANSACTION调用的程序,在被调用的程序完成后,调用程序的LUW还会继续。调用和被调用程序的LUW是分开独立运行的,这样就会出现下面的情况:

l 直接的inline change会在screen改变时写到数据库中

l 对于update flag或PERFORM ON COMMIT在各自的LUW中需要一个COMMIT WORK

如果使用SUBMIT或LEVAE TO TRANSACTION,调用程序的LUW就会结束。Direct inline change在每次screen改变时会更新到数据库中。然而如果在调用程序之前你的update flag没有通过COMMIT WORK关闭,log table中的update request就被会被update work process执行。对于PERFORM ON COMMIT也是这样。

如果transaction是通过call transaction调用的,可以在没有user dialog的情况下执行transaction。这种情况下你需要通过using addition传入一个batch input format internal table并且指定MODE参数为‘N’。另外MODE还可以设置为’A’或’E’。通过参数UPDATE可以改变transaction更新数据的方式。默认情况下为’A’(asynchronous),还可以是S(synchronous)和L(local)。如果UPDATE=’S’,只有被调用的transaction的update完成后,调用程序的LUW才能继续。如果被调用transaction的update成功,sy-subrc就会返回0。通过UPDATE=’S’可以实现只有被调用事务的更新成功后才能进行后续处理。

通过CALL FUNCTION ‘ABC’ IN NEW TASK ‘T1’异步调用的function module运行在单独的SAP LUW中。Calling program的处理会暂时停止,直到function module被触发。也就是说registered update flag和PERFORM ON COMMIT仍然被保留。Asynchronous function call会激发implicitly database commit,也就是说在此时inline changes会写入到数据库中。

如果一个data record有类型为E的lock,程序本身以及synchronous调用的function module所在的function group可以访问这条记录。Original lock的cumulative counter会被加1。通过SUBMINT AND RETURN和CALL TRANSACTION调用的程序不能在这条记录上再设置lock。通过SUBMIT和LEAVET TO TRANSACTION调用程序时,调用程序被终止,相应的locks也会被删除掉。Calling program和called program之间便不会存在lock conflict。同一个用户的不同external session的lock request与不同用户的user session的lock request的处理方式一样。

SUBMIT AND RETURN和CALL TRANSACTION有自己的SAP LUW,可以通过它们实现nested SAP LUW。Asynchronous function module call可以实现处理同时运行。使用异步function module调用的场景:

你希望在另外一个external session中显示相关的数据,异步调用一个function module,function module中通过call transaction来调用程序,通过function module的interface来传递相关数据。在调用transaction之前可以把相应的数据写入到SAP MEMORY中。

几种程序调用方式的比较列表:

Call

Data

SAP LUW

Suitable for

CALL FUNCTION

Own

Same

Display data

Data change(within the same SAP LUW)

SUBMIT AND RETURN

CALL TRANSACTION

Own

Own

Display data

Data change(in different LUWs)

CALL FUNCTION…STARTING NEW TASK

Own

Own

Parallel tasks

<!-- You can follow any responses to this entry through the <a href="http://scnblogs.techweb.com.cn/abaplv/archives/176.html/feed" mce_href="http://scnblogs.techweb.com.cn/abaplv/archives/176.html/feed">RSS 2.0</a> feed. -->Trackback: http://scnblogs.techweb.com.cn/abaplv/archives/176.html/trackback

abap_报表程序各事件详解 文章目录前言1、LOAD-OF-PROGRAM2、INITIALIZATION3、AT SELECTION-SCREEN OUTPUT4、AT SELECTION-SCREEN5、START-OF-SELECTION6、END-OF-SELECTION总结 前言 一个程序是怎么跑起来了,中间经历了什么,我们今天学习peport程序的各个节点触发时机。 1、LOAD-OF-PROGRAM 这个事件主要是针对与全局变量的加载,internalSession加载的时候会在这个步骤把所有的全局变量加载都内存。 阅读详情

相关推荐

SAP-ABAP:程序间调用举例

在 SAP ABAP 中,程序间的调用是常见的需求,通常用于模块化代码、重用功能或分离逻辑。以下是几种常见的程序间调用方式及其详解:

baidu_35680696的博客 931

ABAP program的类型及其创建

我们在se38会看到创建程序有以下这些类型: 1 Executable program I INCLUDE program M Module pool F Function group S Subroutine pool J Interface pool K Class pool T Type pool X XSLT program  其中F J K T X是不能通过se38直

liangziyisheng的专栏 2425

sap abap program

sap abap program 全套编程教材

abap program sample

*****************************************************TITLE:BUY DOWN REPORT(RFQ PRICE DIFFERECE)*TRANSACETION CODE:ZNC17*AUTHOR:RICHARD L. CHANG*DEVELPMENT DATE:2002.07.02~2002.07.03*******************

Arise P. Song-曾经的你(风) 1101

first abap program

这本比较爽 博文链接:https://fourfire.iteye.com/blog/208229

HTML5期末大作业:关于家乡介绍的HTML网页设计——郑州美景HTML+CSS(5页) 学生DW家乡介绍网页设计作业成品 web课程设计网页规划与设计

HTML5期末大作业:我的家乡——郑州美景HTML+CSS(5页) 学生DW网页设计作业成品 web课程设计网页规划与设计 计算机毕设网页设计源码 常见网页设计作业题材有 个人、 美食、 公司、 学校、 旅游、 电商、 宠物、 电器、 茶叶、 家居、 酒店、 舞蹈、 动漫、 明星、 服装、 体育、 化妆品、 物流、 环保、 书籍、 婚纱、 游戏、 节日、 戒烟、 电影、 摄影、 文化、 家乡、 鲜花、 礼品、 汽车、 其他 等网页设计题目, A+水平作业, 可满足大学生网页大作业网页设计需求, 喜

qq_365392777 1万+

matinal:ABAP 小工具之Program的导出与导入

CLASS ZSAPLINK源码。

matinal 當冬夜漸暖 。公众号:matinal 296

Allegro 16.6 高级技巧实战:用Region规则和动态间距搞定高密度连接器布局布线

本文深入探讨了Allegro 16.6在高密度连接器布局布线中的高级技巧,重点介绍了Region规则和动态间距属性的应用。通过局部规则覆盖和分层控制,解决0.5mm以下引脚间距的布线难题,提升PCB设计效率和质量。

weixin_30352645的博客 439

ABAP报表细节功能精选

一, ABAP 的程序的类型: Program type (程序类型) Introductory statement (类型描述) REPORT(报表 报表 M PROGRAM(屏幕程序) FFUNCTION-POOL (函数组) KCLASS-POOL (类组) JCLASS-POOL...

qq_42080586的博客 2134

【保研经验】北科自动化到北大工学院

作者:办公室某学长 谢邀。。。作为拖延症晚期患者,希望能在我科开学前写完。 先简单介绍一下我的保研过程,申请了清华叉院&amp;北大叉院大数据&amp;北大信科计算机夏令营,三者都没入营;申请了自所夏令营(自所来宣讲时未交简历,这是重大错误),给了第二批补录但没去;最终九推去了北大工学院。我的这次保研最终成功的经历可以说有一定运气成分,不具有普适性,但在前期准备过程中还是有经验可以分享的。 ...

ruanjianbu的博客 1796

【面试题】MySQL索引相关的面试题(红黑树,hash,B树,B+树)

自己整理了几个面试题分享给大家 问题1:红黑树为什么那样设计? 首先聊一下二叉搜索树,主要特点是左节点比根节点小,右节点比根节点大,并且左右子树都是二叉搜索树。缺点是在极端情况下,比如插入都是有序的,就会出现退化的情况有序序列树退化成链表。 二叉搜索树 退化成链表的二叉搜索树 此时,要想让树的节点平均分布就需要平衡树了,红黑树就是平衡树的一种(平衡二叉搜索树)。然后,一棵树的查询性能取决...

Mr_黑_ 的博客 4042

Complex LUW processing (internal/external Session)

用两种方式可以实现在一个program内部调用其它的ABAP program:l      被调用的program是被inserted的,即目前的program停止运行,当被调用的program执行完毕后,当前的program继续执行。CALL FUNCTION… CALL TRANSACTION… SUBMIT <program> AND RETURN可以实现这种方式的调用。l   ...

weixin_30826095的博客 112

ADS2023仿真变容二极管特性

仿真S-Param仿真控件,设置为Single Point,将频率设置为1MHz,同时勾选Z-parameters,取消S-parameters,从元件库中选择元器件搭建原理图,并根据器件spice提供的相关参数,对原理图中器件参数进行修改,修改完成的电路图如下图所示。添加var控件和MeasEqn控件,相关设置如图所示,Ct为变容管的电容值,Q0为其品质因数。因此,对变容二极管的模型仿真结果是可以信赖的。将其解压,在spice文件夹中,可以找到我们想要的器件参数,和仿真简要电路图。

weixin_45811090的博客 1万+

常规函数模块CALL in new task 报错

使用START NEW TASK, 函数需要是远程调用模块。 错误:FUNCTION module ' ZMMFM0021' cannot be used for 'remote' CALLS. CALL FUNCTION 'ZMMFM0201' STARTING NEW TASK pv_zproid TABLES it_item = l...

anchangong3418的博客 1213

《SOC架构-ARM架构-文档导读》-目录

小白请看“Armv8/Armv9架构从入门到精通”专栏。以翻译为主的,深度深度深度深度/深入深入深入 学习ARM架构的文章。

baron-周贺贺-代码改变世界ctw 2083

Python爬虫实战:利用Scrapy+Playwright高效爬取TED演讲数据

在当今信息爆炸的时代,TED演讲作为全球知名的思想传播平台,汇聚了各领域顶尖人才的精彩分享。对于数据分析师、研究人员或内容创作者来说,获取TED演讲的完整数据集具有重要价值。本文将详细介绍如何使用Python中最先进的爬虫技术组合——Scrapy框架配合Playwright浏览器自动化工具,高效爬取TED演讲的完整数据。传统爬虫技术在处理现代动态网页时面临诸多挑战,而本文将展示如何利用最新工具解决这些问题。

2201_76125261的博客 205

ABAP程序互调用:SUBMIT、CALL TRANSACTION、LEAVE TO TRANSACTION

Calling Executable Programs(SUBMIT) 设置选择屏幕参数值(SUBMIT...WITH) 实例一:参数传递 实例二:参数传递及返回值接收 控制Called Programs中LISTS输出 修改输出LISTS行列数 将被调程序的输出列表打印到spool system 将输出列表保存到ABAP memory 使用LEAVE语句退出被调程序 CALL

想飞请准备 1万+

Skill的嵌套

Skill的嵌套就很简单,直接引用其他的Skill就好了。在一个 Skill 的 SKILL.md 中,可以明确指示 Claude 去读取另一个 Skill 的文档。

Criss@陈磊 956

ABAP-小工具之Program的导出与导入

在SAP某ECC版本中,迁移了一个含有screen的程序到HANA系统里,但是遇到一个问题,在迁移的时,光将屏幕通过se80创建会遇到一种情况,此ECC版本的screen的图像编辑器无法像HANA中一样调用出来,也不清楚是否是组件没装,还是其他原因,反正很是头疼。 因为是使用了 SAP 自带的ALV控件功能,ALV_SHOW 在ECC系统中,这个ALV_SHOW无法自动匹配上,而且屏幕编辑器也有问题,那么没办法,不能复制代码这种方法行不通呀! 那么怎么办,把程序导出来,以某种格式,就像JAVA一样,序列化

LinkStar的博客 1109

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

一些常用ABAP program 的例子

1. 接口的实现REPORT z_interface_demo.interface status.methods write.endinterface. "statusclass counter definition.publi...

cmcagfdvr09264907的博客 265

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

解决:The current ABAP program "SAPLSLVC" had to be terminated because ...

错误提示:发生了什么?      Error in the ABAP Application Program      The current ABAP program "SAPLSLVC" had to be terminated because it has      come across a statement that unfortunately cannot be execu

先知的程序 7161

ABAP FM总结

ABAP 函数总结 常用函数解释 函数名 描述 SD_VBAP_READ_WITH_VBELN 根据销售订单读取表vbap中的信息 EDIT_LINES 把READ_TEXT返回的LINES中的行按照TDFORMAT=“*”重新组织 VIEW_MAINTENANCE_CALL 维护表视图 函数名 描述 DY_GET_FOCUS 获得屏幕焦点 DY_GET_SET_FIELD_VA

SAP Consultant - Improve myself everyday 每天进步一点 3049
上一篇: 选择屏幕 子屏幕
下一篇: DEMO_DYNPRO_SUBSCREENS
java_smalltalk
博客等级 码龄20年 8粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值