SAPAG第十一章:错误!使用“开始”选项卡将Heading1应用于要在此处显示的文字。11第十一章调用外部程序组件概览在ABAP/4中,有多种使事务模块化的选项可供选择。这些选项包括所有可以调用程序外部代码组件的方法。这些外部组件可以是功能模块、其它事务、对话模块或报表。内容嵌入程序调用..................................................................................................................................1外部程序和滚动区.....................................................................................................................1外部程序和LUW处理...............................................................................................................1调用功能模块..................................................................................................................................2访问功能库..................................................................................................................................2进行调用.....................................................................................................................................2使用功能模块接口.....................................................................................................................2处理例外情况............................................................................................................................3调用其它事务..................................................................................................................................4转到事务.....................................................................................................................................4调用事务.....................................................................................................................................4调用与调用程序共享SAPLUW的事务...................................................................................4调用对话模块..................................................................................................................................4运行时执行对话模块..................................................................................................................4用事务作为对话模块..................................................................................................................4提交报表...........................................................................................................................................5向报表传送数据.........................................................................................................................6保存或打印报表.........................................................................................................................7在程序间传送数据...........................................................................................................................7用SPA/GPA参数传送数据......................................................................................................7详细信息,参见:嵌入程序调用(页1)调用功能模块(页2)调用其它事务(页4)调用对话模块(页4)提交报表(页5)在程序间传送数据(页7)嵌入程序调用外部程序组件由系统进行维护,对所有程序都可用。可在事务中按任意组合调用这些组件。外部程序和滚动区滚动区包含程序的运行时间上下文。除运行时间堆栈和其它结构外,所有局部变量和程序可以识别的任何数据都存储在这里。系统是如何处理外部程序组件的滚动区的呢?事务在各自的滚动区中运行报表在各自的滚动区中运行对话模块在各自的滚动区中运行功能模块在其调用程序的滚动区中运行调用运行自己的滚动区的外部程序时,可以最多嵌入9层调用。所调用的功能模块不单独增加一层。外部程序和LUW处理运行时,事务必须以“全都或全都不”方式对数据库进行更新。或者全部执行,或者全部丢弃。“LUW”(逻辑工作单元)是某一时间段,在此期间所需的任何更新都属于“全都或全都不”单元。SAPAG第十一章:错误!使用“开始”选项卡将Heading1应用于要在此处显示的文字。22“SAPLUW”是指ABAP/4事务进行单式组更新的时间段。(SAP-LUW,也称为更新事务(页Error!Notavalidlink.),与数据库LUW不同)。在调用外部程序时,了解相关的被调程序或调用程序如何进行更新非常重要。外部程序与调用程序在同一SAPLUW中运行,还是在单独的SAPLUW运行?事务用单独的SAPLUW运行报表用单独的SAPLUW运行对话模块与调用程序在同一SAPLUW中运行功能模块与调用程序在同一SAPLUW中运行上述规则的唯一例外是用INUPDATETASK(只是V2功能)或INBACKGROUNDTASK(ALE应用程序)调用的功能模块。它们总是在自己的(单独的)更新事务中运行。如果程序调用更新任务功能或使用COMMITWORK,则外部程序与其调用程序共享(或不共享)SAPLUW这一事实会产生特殊效果。详细信息,参见编程数据库更新(页Error!Notavalidlink.)。调用功能模块功能模块是通用库例程,在整个系统内都能使用。有多种用途,如操作串、进行特殊计算、调用远程系统上的程序或发行标准的屏幕序列。每个功能模块都属于某个“功能组”。功能组是逻辑相关的模块集合,相互共享全局数据。组内的所有模块都包括在同一主程序中。当ABAP/4程序包含CALLFUNCTION语句时,系统会在运行时与程序代码一起将整个功能组装载进去。访问功能库系统在功能库中管理功能模块。从中可查阅现有功能、其调用接口和文档,以及创建新功能等。要访问功能库,请按工作台中的“功能库”。在ABAP/4编辑器中,可以双击代码中的功能模块名,或使用“编辑-插入语句”功能。“插入语句”会查找功能模块接口并在程序中插入功能调用模板。所插入的调用包含预先格式化的参数。进行调用用CALLFUNCTION语句调用功能模块。例如,假定要在用户未保存就退出事务时给出要求进行的提示。有一个功能模块可以完成这一提示任务:CALLFUNCTION'POPUP_TO_CONFIRM_LOSS_OF_DATA'EXPORTINGTEXTLINE1='Doyouwanttosave?'TEXTLINE2='????'TITEL='REMINDER'IMPORTINGANSWER=REPLY.POPUP_TO_CONFIRM_LOSS_OF_DATA使用TEXTLINE参数产生一个弹出窗口:从调用返回后,变量REPLY包含用户的回答:是(‘J’)或否(‘N’)。本节讲述如何调用和编写功能模块。关于使用功能库工具的信息,参见ABAP/4工作台工具(页Error!Notavalidlink.)。使用功能模块接口程序只能使用在功能模块接口中说明的参数向功能模块传送数据。在CALLFUNCTION语句中,参数赋值的形式通常为:形参=实参。其中,形参是接口中指定的名字。实参可以是变量或常数。在对POPUP_TO_CONFIRM_LOSS_OF_DATA的调用中,调用程序使用形参TEXTLINE1、TEXTLINE2和TITEL将文本串‘想保存吗?’、‘????’和‘REMINDER’发送给功能。用户的回答放在变量REPLY中。功能模块通常可以包含四种类型的参数:EXPORTING:用于向被调功能传送数据。相应的形参在功能模块接口中被指定为输入参数。如果EXPORTING参数在功能模块接口屏幕中标记为“可选”,则可将其忽略。IMPORTING:用于接受从功能模块返回的数据。形参在功能模块接口中被指定为输出参数。如果不需要,可忽略任何IMPORTING参数:这些都是可选的。TABLES:只用于通过引用(即通过地址)传送内部表。TABLES参数在功能模块接口屏幕中未标记为“可选”,则不能将其忽略。CHANGING:用于与功能相互传送参数(可能更改为调用程序版本)。如果CHANGING参数在功能模块接口屏幕中标记为“可选”,则可将其忽略。SAPAG第十一章:错误!使用“开始”选项卡将Heading1应用于要在此处显示的文字。33也可以使用“编辑-插入语句”功能(位于ABAP/4编辑器中)指明哪些参数可选。在功能插入CALLFUNCTION语句之后,就将可选参数标注出来。关于处理功能模块中例外情况的详细信息,参见:处理例外情况功能模块允许程序员决定出现例外之后是由调用程序进行处理还是由系统进行处理。