用两种方式可以实现在一个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
相关推荐
通过LT3932实现模拟调光驱动LUW-W5AP 程序已经调试好,注释齐全。 基于LTspice仿真。 1.输入特性:Ui=24V 2.输出特性:Uo=6.6V(2A max) 3.LED负载:LUW-W5AP 4.电路具有UVLO功能 5.实现模拟调光 文件...
### DB2 for LUW Advanced Database Administration for Experts #### 一、课程概述 《DB2 for LUW Advanced Database Administration for Experts》是一门针对高级数据库管理员的专业培训课程,旨在深入讲解 IBM ...
DB2 LUW 问题诊断技术详解 在 Db2 LUW Problem Determination and Troubleshooting Workshop 中,Pavel Sustr 从 IBM Toronto Lab 演示了 Db2 11.1 问题诊断技术和现场演示。该 Workshop 的主要目的是教会参与者...
### DB2 LUW 至 UDB400 v3 移植指南关键知识点解析 #### 一、并发与恢复(Concurrency and Recovery) 并发控制和恢复机制是数据库管理系统中的核心功能,确保了数据的一致性和可靠性。在从 DB2 LUW 迁移到 UDB400...
在IT领域,尤其是在数据库管理与优化方面,IBM的DB2 LUW(Linux, UNIX, and Windows)系统一直是业界关注的焦点。本次分享聚焦于“高级性能诊断技术在DB2 LUW中的最新应用”,旨在深入探讨如何有效提升DB2 LUW的性能...
### IBM Optim PerformanceManager for DB2 for LUW:深入解析与应用指南 #### 一、IBM Optim PerformanceManager概览 IBM Optim PerformanceManager是一款专为DB2 for Linux, UNIX, and Windows (LUW)设计的性能...
LUW DB2 v11的新特性,包括新功能,不推荐使用的功能和已经停用的功能的说明
### DB2 9 for LUW 高级性能与调优 #### 一、DB2调优机会 在DB2 9 for Linux, UNIX 和 Windows (LUW) 的环境中,调优是一个关键步骤,旨在提高数据库系统的性能并确保其能够有效地支持业务需求。本章节将深入探讨...
### IBM InfoSphere Change Data Capture (CDC) for DB2 LUW 版本 6.5.2 #### 一、概述 IBM InfoSphere Change Data Capture (CDC) for DB2 for Linux, UNIX, and Windows (简称 DB2 LUW) 是一款强大的数据库变更...
本文将深入解析《DB2 LUW在SAP环境下的实用备份与恢复指南》的核心知识点,包括DB2 LUW数据库的基础架构、日志管理、备份与恢复策略以及在SAP NetWeaver中的集成。 ### 数据库对象 DB2 LUW(Linux, UNIX, Windows...
本文档深入探讨了IBM DB2 for Linux, UNIX, and Windows (LUW) 的高可用性(High Availability, HA)和灾难恢复(Disaster Recovery, DR)选项。该文档由Whei-Jen Chen、Masafumi Otsuki、Paul Descovich、...
在SAP R/3系统中,背景处理(Background Processing)是一项关键功能,它允许执行非对话型且耗时较长的任务,如批量处理、数据迁移或报表生成等。与对话处理不同,对话处理中的每个逻辑工作单元(LUW)由调度程序...
DB2 UDB is available on a variety of platforms, including -large systemssuch as z/OS, OS/390, VM, and VSE -mid-sized systemssuch as AS/400, AIX, and Solaris ...and UNIX Systems ( DB2 FOR LUW )
This book is free because I want people to use it. The more people that use it, and the more that it helps them, the more inclined I am to keep it up to date.
亲自测过,完美运行,license在文本里,运行软件时,输入license即可。
DB2数据库是由IBM开发的一款关系型数据库管理系统,广泛应用于企业级的数据存储和管理。在与DB2进行交互时,特别是通过编程语言(如Java)进行连接时,需要依赖特定的驱动包来建立通信桥梁。标题提到的"DB2数据库...
DB2 Driver,正如标题所示,是指IBM的DB2数据库系统为Java应用程序提供的JDBC(Java Database Connectivity)驱动程序。这个驱动使得Java开发者能够通过编写Java代码来与DB2数据库进行交互,实现数据的增删改查等...
Log4db2是DB2 LUW的日志记录实用程序,它使用带有SQL PL代码SQL指令。 其目的是提供一种从SQL例程编写消息的简便方法,并有可能直接从数据库中查询这些消息并查看生成的输出,从而可以监视进程的进度。 该实用程序...
DB2 UDB for z/OS and OS/390 Database Administration Workshop Setting up a DB2 Database Referential Integrity Getting Data into and out of DB2 Keeping Your DB2 Data in Good Shape ...