版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
–12)setZ_011pagepage11嵌入程序调用外部程序组件由系统进行维护,对所有程序都可用。可在事务中按任意组合调用这些组件。外部程序和滚动区滚动区包含程序的运行时间上下文。除运行时间堆栈和其它结构外,所有局部变量和程序可以识别的任何数据都存储在这里。系统是如何处理外部程序组件的滚动区的呢? 事务在各自的滚动区中运行 报表在各自的滚动区中运行 对话模块在各自的滚动区中运行 功能模块在其调用程序的滚动区中运行调用运行自己的滚动区的外部程序时,可以最多嵌入9层调用。所调用的功能模块不单独增加一层。外部程序和LUW处理运行时,事务必须以"全都或全都不"方式对数据库进行更新。或者全部执行,或者全部丢弃。"LUW"(逻辑工作单元)是某一时间段,在此期间所需的任何更新都属于"全都或全都不"单元。"SAPLUW"是指ABAP/4事务进行单式组更新的时间段。(SAP-LUW,也称为更新事务(页9–4),与数据库LUW不同)。在调用外部程序时,了解相关的被调程序或调用程序如何进行更新非常重要。外部程序与调用程序在同一SAPLUW中运行,还是在单独的SAPLUW运行? 事务用单独的SAPLUW运行 报表用单独的SAPLUW运行 对话模块与调用程序在同一SAPLUW中运行 功能模块与调用程序在同一SAPLUW中运行上述规则的唯一例外是用INUPDATETASK(只是V2功能)或INBACKGROUNDTASK(ALE应用程序)调用的功能模块。它们总是在自己的(单独的)更新事务中运行。如果程序调用更新任务功能或使用COMMITWORK,则外部程序与其调用程序共享(或不共享)SAPLUW这一事实会产生特殊效果。详细信息,参见编程数据库更新(页9–1)。setZ_002pagepage22调用功能模块功能模块是通用库例程,在整个系统内都能使用。有多种用途,如操作串、进行特殊计算、调用远程系统上的程序或发行标准的屏幕序列。每个功能模块都属于某个“功能组”。功能组是逻辑相关的模块集合,相互共享全局数据。组内的所有模块都包括在同一主程序中。当ABAP/4程序包含CALLFUNCTION语句时,系统会在运行时与程序代码一起将整个功能组装载进去。访问功能库系统在功能库中管理功能模块。从中可查阅现有功能、其调用接口和文档,以及创建新功能等。要访问功能库,请按工作台中的"功能库"。在ABAP/4编辑器中,可以双击代码中的功能模块名,或使用“编辑->插入语句”功能。“插入语句”会查找功能模块接口并在程序中插入功能调用模板。所插入的调用包含预先格式化的参数。进行调用用CALLFUNCTION语句调用功能模块。例如,假定要在用户未保存就退出事务时给出要求进行的提示。有一个功能模块可以完成这一提示任务:CALLFUNCTION'POPUP_TO_CONFIRM_LOSS_OF_DATA'
EXPORTING
TEXTLINE1='Doyouwanttosave?'
TEXTLINE2='????'
TITEL='REMINDER'
IMPORTING
ANSWER=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中。功能模块通常可以包含四种类型的参数:也可以使用"编辑->插入语句"功能(位于ABAP/4编辑器中)指明哪些参数可选。在功能插入CALLFUNCTION语句之后,就将可选参数标注出来。关于处理功能模块中例外情况的详细信息,参见:setZ_003pagepage33处理例外情况功能模块允许程序员决定出现例外之后是由调用程序进行处理还是由系统进行处理。要告知系统由调用程序处理例外,则应在CALLFUNCTION语句中指定EXCEPTIONS:CALLFUNCTION'CONVERT_TO_FOREIGN_CURRENCY'
EXPORTING
DATE=TRANS_DATE
FOREIGN_CURRENCY=FCURRKEY
LOCAL_AMOUNT=AMOUNT
LOCAL_CURRENCY=LCURRKEY
IMPORTING
EXCHANGE_RATE=RATE_USED
FOREIGN_AMOUNT=CONVD_AMT
FOREIGN_FACTOR=FCURR_FACTOR
EXCEPTIONS
NO_RATE_FOUND=1
OVERFLOW=2.例外类型在功能模块接口中进行定义。对于CALLFUNCTION中提到的各种例外类型,系统都假定调用程序自己处理该错误类型。在上述语句中,程序员指明程序处理两种错误类型(NO_RATE_FOUND和OVERFLOW),其他则由系统进行处理。要处理所有的例外类型,请使用:CALLFUNCTION'CONVERT_TO_FOREIGN_CURRENCY'
EXPORTING...
IMPORTING...
EXCEPTIONS
NO_RATE_FOUND=1
OVERFLOW=2
NO_FACTORS_FOUND=3
OTHERS=4.OTHERS关键字包含CALLFUNCTION语句中未列出的所有例外。使用OTHERS可包含打算用同一方法处理的所有例外类型。例如,如果编写以下代码:CALLFUNCTION'CONVERT_TO_FOREIGN_CURRENCY'
EXPORTING...
IMPORTING...
EXCEPTIONS
OTHERS=4.则程序仍将得到所有相同的例外通知,但这次都使用单独例外代码。调用程序处理例外时如果出现了程序应处理的例外,功能模块就将SY-SUBRC设置为相应的数字,并将控制直接返回给程序。只有引用所调用的参数才包含返回值。如果例外是由MESSAGERAISING产生的,则系统用以下系统字段中将消息传回去:这些字段有助于使用具有特殊参数的MESSAGE语句: MESSAGESY-MSGIDTYPESY-MSGTYNUMBERSY-MSGNO
WITHSY-MSGV1SY-MSGV2SY-MSGV3SY-MSGV4.如果字段SY-MSGV1到SY-MSGV4中有任何一个为空,系统就将其全部忽略。关于发布消息的详细信息,参见发布消息(页3–12)。系统处理例外时如果让系统处理例外,对于用户则会发生以下两种情况之一: 程序终止 系统显示消息并根据消息类型继续进行处理。如果既要编写功能模块又要编写调用程序,参见编程功能模块(页9–41)以获取有关例外处理的详细信息。setZ_004pagepage44调用其它事务可以从事务内部转到或调用其它事务。"转到"新事务将完全终止原事务:用户无法返回。"调用"新的事务则可在被调事务结束后返回原事务。返回后,将恢复执行紧跟在调用后面的指令。转到事务要转到另一事务并结束当前事务,请使用LEAVETOTRANSACTION语句: LEAVETOTRANSACTION'<TRAN>'.系统将显示要转到的事务初始屏幕。开始新事务之后,用户就无法通过按"退出"图标返回上一事务的上下文。在上一事务中用户没有保存的所有数据都将丢失。调用事务如果希望用户在处理完中间事务后能够返回初始事务,请使用ABAP/4语句: CALLTRANSACTION'<TRAN>'.与LEAVETOTRANSACTION语句不同,CALLTRANSACTION语句使系统开始新的SAPLUW(或更新事务(页9–4))。第二个SAPLUW与调用事务的SAPLUW并行运行。通过在被调事务中使用关键字LEAVE,可以让用户返回调用程序的程序上下文。在调用事务时,可以告知系统取消事务的初始屏幕而直接到序列中的下一个屏幕: CALLTRANSACTION'<TRAN>'ANDSKIPFIRSTSCREEN.对初始屏幕进行处理但不显示。只有当初始屏幕中所有必需字段都已赋值时取消初始屏幕才有意义。否则,调用事务时程序必须传送数据值。有关参数传送技术的信息,参见在程序间传送数据(页11–12)。调用与调用程序共享SAPLUW的事务有时需要调用独立的事务,但又希望其与调用程序在同一SAPLUW中运行。其技巧在于将现有事务转换成对话模块。为此,只需创建一个新的对话模块,使其主程序和初始屏幕与现有事务相同。然后用CALLDIALOG调用新的对话模块。必须按照一定规则对同时用作事务和对话模块的事务进行编程。详细信息,参见用事务作为对话模块(页11–8)。setZ_005pagepage44调用对话模块对话模块是不属于特定事务的可调用屏幕序列。对话模块有自己的模块池,可由任何事务调用。对话模块与调用事务在同一SAPLUW(或更新事务(页9–4))中运行。因此,系统忽略对话模块发送给更新任务的任何更新例程。这就使得在编写使用异步更新的应用程序时对话模块特别有用。因为对话模块在自己的滚动区中运行(功能模块共享调用程序的滚动区),所以对话模块比功能模块运行速度慢的多。系统采用类似于功能库的工具管理对话模块。可以使用该工具查阅现有对话、其调用接口和文档,以及创建新对话等。要在Workbench中使用对话模块工具,请使用菜单选项“开发->编程环境->对话模块”。在“对象浏览器”中,使用“环境->程序开发->对话模块”。运行时执行对话模块使用CALLDIALOG语句调用对话模块。例如: CALLDIALOG'SWO_OBJTYPE_GENERATE'
EXPORTING
DIALOG_MODE FROMMODE
DIALOG_OBJTYPE FROMOBJTYPE
IMPORTING
DIALOG_RETURNTORESULT.setZ_012pagepage44用事务作为对话模块xe"CALL,嵌入程序调用"xe"COMMITWORK,在对话模块"xe"LUW,SAPLUW和对话模块"xe"SAPLUW和对话模块"xe"SY-CALLD"xe"调用模式"xe"对话模块,SAPLUW"xe"对话模块,使用COMMITWORK"xe"对话模块,使用LEAVE语句"xe"对话模块,转换事务到"xe"两次使用事务"xe"事务,用作对话模块"xe"退出,在对话模块中"xe"退出模式"必须将用作对话模块的事务编程为要作为事务和对话模块运行。以下各节讲述事务代码必须适合两种用途的两个区域。编写两用SAPLUW事务必须既能够在自己的SAPLUW(或更新事务(页9–4))中运行,也能够在调用程序的SAPLUW中运行。对话模块运行时,(在其调用程序的SAPLUW中),要有特殊的条件: 继承调用程序用ENQUEUE创建的锁事务作为对话模块运行时,可以假定给定对象的锁已存在。事务作为事务运行时,则必须排列自己的锁。可以使用系统变量SY-CALLD来确定在运行时程序是否在调用模式下运行。关于锁的详细信息,参见SAP系统中的锁 继承调用程序的更新任务关键字关于更新任务处理的信息,参见更新任务中的绑定更新(页9–14)。 忽略COMMITWORK语句可以在两用事务中包含COMMITWORK,但在程序作为对话模块运行时则被将忽略。对话模块中所要求的全部更新将在调用程序的下一COMMITWORK中进行处理。详细信息,参见COMMITWORK处理(页9–20)。 调用INUPDATETASK的功能模块不在对话模块中触发。必须确保用ONUPDATETASK调用的任何功能模块都可以延迟到调用程序中的下一COMMITWORK之后。 PERFORMONCOMMIT例程不在对话模块中执行。必须确保用PERFORMONCOMMIT调用的任何FORM例程都可以延迟到调用程序中的下一COMMITWORK之后。特殊情况下,在控制返回调用程序时,对话模块滚动区中的局部数据会消失。用这种方式调用的FORM例程不应依赖该局部数据。详细信息,参见调用更新任务功能的对话模块(页9–19)。在编写“保存”功能(F12)或在其它允许用户确认其操作的地方,通常需要上述特征。通常情况下,在编写两用事务的代码时,必须使所有托付处理所需的更新既可以在被调程序中发生也可以在调用程序中发生,而不失去其正确性。编写两用退出从两用事务中退出必须符合两种情况:即从调用模式返回和从离开模式返回。如果程序由CALLTRANSACTION、CALLDIALOG或SUBMITREPORT(及其它)等激活,则以调用模式执行。在这种情况下,系统变量SY_CALLD设置为‘X’。如果当前没有活动的嵌入调用,则以离开模式执行。LEAVE语句用于以下情况: LEAVE语句导致从调用模式返回。 LEAVETOSCREENNNN导致从离开模式返回。由于两用事务既能在调用模式下,又能在离开模式下,因此,应该同时使用两个语句,其顺序如下: ATUSER-COMMAND.
LEAVE.
LEAVETOSCREENNNN.如果当前是作为事务运行的,则忽略第一个LEAVE,而执行LEAVETOSCREENNNN。如果是作为对话模块运行的,则执行第一个LEAVE,而始终不会执行第二个LEAVE。setZ_006pagepage55提交报表有两种从事务生成报表的选项:LEAVETOLIST-PROCESSING语句或SUBMIT语句。在模块池中使用LEAVETOLIST-PROCESSING来编写列表处理权。当事务收集到大量报表数据时,用LEAVETOLIST-PROCESSING生成报表是最好的方法。详细信息,参见转到列表过程(页7–1)。使用SUBMIT语句开始独立于事务的报表。该报表在自己的滚动区中运行,不与调用程序共享公共数据区。因此,当事务和报表很少使用共同数据时,SUBMIT比较合适。使用SUBMIT的语法为: SUBMITRSBBB013.要执行该语句,系统将离开当前程序并启动报表。返回调用程序:要允许用户返回调用事务,请使用关键字ANDRETURN。 SUBMITRSFLFINDANDRETURN.在这种情况下,系统将为报表打开内部会话。当用户从列表显示返回时,系统将返回启动报表的事务屏幕。(直接从紧跟SUBMIT后的指令继续执行。)显示选择屏幕:缺省情况下,在使用简单SUBMIT语句时,不会出现报表的选择屏幕。要显示报表的选择屏幕,请使用VIASELECTION-SCREEN关键字: SUBMITRSFLFINDVIASELECTION-SCREEN.系统显示选择屏幕,用户可指定自己的选择条件。在从列表显示返回后,再次出现选择屏幕(以便用户请求另一列表)。关于使用SUBMIT的详细信息,参见:setZ_007pagepage66向报表传送数据有三种向报表传送选择和参数数据的选项。分别是: 使用SUBMIT...WITH 使用报表变量 使用RANGE表下面将讲述这些选项。使用WITH关键字可以使用WITH关键字指定参数或选择项所需的全部值: SUBMITRSBBB013WITHCARRID=SPFLI-CARRID.在上述语句中,"航空公司"是报表RSBBB013的选择项(航空公司)。报表只显示与要求的航空公司相关的记录。可以通过以下方法找到相应选择屏幕字段的名字:指定值的范围可以用WITH指定值的范围。例如: SUBMITRSFLFINDWITHDATEBETWEEN'19950301'AND'19951003'.其中,date是RSFLFIND的选择项,要求程序带指定边界值之间的日期显示所有记录。WITH规范有多种合法的格式:WITH<P><OPERATION><Q>SIGN<S>
WITH<P>BETWEEN<F1>AND<F2>SIGN<S>
WITH<P>NOTBETWEEN<F1>AND<F2>SIGN<S>WITH<P>IN<RANGES-TABLE>
WITHSELECTION-TABLE<SELTAB>
WITHFREESELECTIONS<EXPRESSION-TABLE><operation>可以是EQ、NE、CP、NP、GE、LT、LE、GT中的任何一个。符号<S>可选。如果使用,则<S>必须是‘I’(包含)或‘E’(排斥)。所有操作符<Q>、<F1>和<F2>都将按内部(非显示)格式传送给程序。当<P>是选择项时,系统将在相关选择项表中创建条目,按照指定情况对LOW、HIGH、OPTION和SIGN字段进行。如果<P>是参数,则将<operation>的所有值都解释为EQ。关于使用WITH的详细信息,参见SUBMIT的关键字文档。关于使用RANGES表的信息,参见RANGES语句(页2–15)。关于选择项表的详细信息,参见选择表(页2–14)。在报表中使用变量可以使用报表变量来指定参数和选择项值。为此,请使用USINGSELECTION-SET关键字: SUBMITRSFLFINDUSINGSELECTION-SETVARIANT1.关于报表变量的详细信息,参见使用变式预定义选择(页3–1)。使用RANGES指定选择项可以通过填写RANGES表指定选择项值。例如:TABLESSPFLI.
RANGESS_CARRIDFORSPFLI-CARRID.S_CARRID-SIGN='I'.
S_CARRID-OPTION='EQ'.
S_CARRID-LOW='LH'.APPENDS_CARRID.SUBMITRSFLFINDWITHCARRIDINS_CARRID.在此例中,S_CARRID是结构与选择表相同的内部表。通过引用列CARRID(数据库表SPFLI),字段S_CARRID-LOW和S_CARRID-HIGH获得与CARRID相同的数据类型。内部表S_CARRID的表头行将被填写并被附加到表中。该表功能中定义的选择条件类似于逻辑表达式SPFLI-CARRIDEQ'LH'。关于使用RANGES表的详细信息,参见RANGES语句(页2–15)。setZ_008pagepage77保存或打印报表不必为用户显示列表。可以将其打印出来,或保存到其它存储设备中。将报表发送给打印机可以将报表发送给打印机而不显示在屏幕上。为此,请使用关键字TOSAP-SPOOL: SUBMITRSFLFIND...TOSAP-SPOOLDESTINATION'LT50'.在使用该特征时,有多种选项可指定打印所需的参数。详细信息,请参见SUBMIT联机文档(ABAP/4编辑器中的"工具->有关帮助...")。将报表保存在内存中可以使用SUBMIT生成报表并将其保存在ABAP/4内存中,而不显示在屏幕上。为此,请使用关键字EXPORTINGLISTTOMEMORY: SUBMITRSFLFIND...ANDRETURN
EXPORTINGLISTTOMEMORY.该特征将生成的报表放在ABAP/4内存中,从SUBMIT调用返回之时,调用程序可从中进行访问。功能组SLST提供访问已保存的报表的功能模块,其中包括: LIST_FROM_MEMORY
WRITE_LIST
DISPLAY_LIST请注意,ANDRETURN关键字是该特征所必需的,但不允许使用TOSAP-SPOOL关键字。详细信息,参见SUBMIT联机文档(ABAP/4编辑器中的"工具->有关帮助...")。setZ_009pagepage77在程序间传送数据事务、对话模块和报表都在自己的滚动区中运行。在从事务中调用其中任何一个时,都必须给它们传送运行所需的数据。向外部程序传送数据的选项有:这是在外部程序之间传送数据的最常用方法。详细信息,参见:用SPA/GPA参数传送数据(页11–12)。任何程序都可以使用EXPORT语句在ABAP/4内存中存储数据字段簇。因此,该数据就全局有效(使用IMPORT),在程序本身中以及任何被调事务、报表或其它模块中都有效。使用EXPORT: EXPORT<OBJECT1><OBJECT2>...<OBJECTN>TOMEMORYID<ID-NAME>.然后调用程序就会检索数据: IMPORT<OBJECT1><OBJECT2>...<OBJECTN>FROMMEMORYID<ID-NAME>.ID参数标识唯一的数据簇。如果将同一对象多次输出到同一ID,则会改写内存中该簇的第一个版本。如果第二次输出对象的子集,则仍会改写该组的第一个版本中的"所有"对象(不仅是子集)。只有调用程序和被调用程序经常一起使用时,才用EXPORT/IMPORT实现参数传送。对于外部应用程序可用的调用程序不推荐EXPORT/IM
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 地质事业单位常见试题及答案分享
- 重庆国显科技:整套LED显示系统包含哪些服务
- 2026年环境友好型社会评价指标体系试卷
- 2026年幼儿数学思维与解决问题能力测试卷
- 2026年河南省北师大版高三英语一轮复习听力冲刺试卷
- 2026年北京市绿色生活知识测试卷
- 2026年古代历史与艺术素养测试
- 2026年天津市高一英语必修一单元测试卷
- 2026年信息安全防护技术综合测试题库
- 2026年环境监测与环境保护知识竞赛试卷
- 2025-2030年中国天然石膏行业深度研究分析报告
- CJJ1-2025城镇道路工程施工与质量验收规范
- 2025年“雄鹰杯”小动物医师技能大赛备考试题库(含答案)
- 心血管科中医护理方案
- 2024学年高职高专《生理学》理论教案
- 2022年山东省临沂市兰山区小升初数学试卷
- DL∕T 1524-2016 发电机红外检测方法及评定导则
- 2023年12月东北大学招聘工作人员 笔试历年典型考题及考点剖析附答案详解
- 干部履历表(中共中央组织部2015年制)
- 中国恶性胸腔积液诊断与治疗专家共识课件
- 网络发展与我国意识形态安全
评论
0/150
提交评论