您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > SAP的ABAP4语言中文培训教材第三部分第四章控制屏幕流程
1第四章控制屏幕流程概览内容屏幕流程控制介绍...........................................................................................................................1设置下一个屏幕..............................................................................................................................2调用新的屏幕序列...........................................................................................................................2退出当前屏幕..................................................................................................................................3后台处理屏幕..................................................................................................................................5对于用户来说,事务就是逐个出现的一系列屏幕。在事务程序中,屏幕由一系列的“下一个屏幕”号链接在一起。定义事务时,要指定第一个屏幕的号码。然后,对事务中的每个屏幕,可以静态地或动态地指定“下一个屏幕”静态屏幕指示器定义屏幕时,要为它指定“下一个屏幕”属性。该属性给出紧随着当前屏幕的默认屏幕名称。然而,无论何时动态设置“下一个屏幕”,都会覆盖静态属性。动态屏幕序列任何屏幕都可以设置它自己的“下一个屏幕”作为屏幕处理的一部分。做到这一点的ABAP/4命令是SETSCREEN和CALLSCREEN。动态设置屏幕时,可以逐个地串在一起(象在链中一样),或将它们的组插入到当前链中。下列主题提供关于在事务中处理屏幕的信息:屏幕流程控制介绍(页1)设置下一个屏幕(页2)调用新的屏幕序列(页2)退出当前屏幕(页3)示例事务:设置和调用屏幕(页3)后台处理屏幕(页5)屏幕流程控制介绍关于在事务中控制屏幕流程的示例,请参见事务TZ40。(该事务在开发类SDWA中,同系统一起传送。)TZ40让用户显示航班信息并将更新信息输入到显示中。TZ40使用两个屏幕和对话框(弹出窗口)用于获得用户的更新。事务总是显示开始的两个屏幕(号码为100和200)。第三个(210)只是在一定的条件下才显示。可能的屏幕流程如下:在实践中,用户见到如下序列:屏幕100:用户输入航班信息,并按ENTER请求显示航班详情。屏幕200:系统在更新模式中显示关于航班的全部细节。用户通过键入全部显示输入所作的更改。屏幕2102屏幕210只在用户试图不保存而退出屏幕200时才出现。弹出内容提醒用户保存所作的更改或取消(通过指定“是”或“否”)要想使该屏幕序列成为可能,事务TZ40必须能够有条件地调用对话框屏幕。ABAP/4模块可以“转入”或“调用”下一个屏幕。两者的差别在于处理完下一个屏幕之后用户要让控制转到哪里。相关的ABAP/4命令是:SETSCREENscreen-number.CALLSCREENscreen-number.LEAVESCREEN.LEAVETOSCREENscreen-number.通过SETSCREEN,在链中当前屏幕简单地指定下一个屏幕。当前屏幕处理完毕后,控制转入该下一个屏幕。从下一个屏幕返回到当前屏幕不是自动的。使用CALLSCREEN,挂起当前(正调用的)链,调入下一个屏幕(或屏幕链)。通过语句LEAVESCREENTOSCREEN0调用的屏幕就能够返回到挂起的链上。详细信息,参见:设置下一个屏幕(页2)调用新的屏幕序列(页2)退出当前屏幕(页3)设置下一个屏幕每一个屏幕都有静态的“下一个屏幕”属性,该属性指定跟随当前屏幕的下一个屏幕。可以使用SETSCREEN语句覆盖该指定:SETSCREENscreennumber.SETSCREEN告诉系统忽略静态定义的“下一个屏幕”,而使用屏幕号作为下一个屏幕。该覆盖是暂时的并且对储存在屏幕制作器中的属性值没有影响。SETSCREEN语句只指定下一个屏幕:它不中断当前屏幕的处理。如果未完成当前屏幕就要转入下一个屏幕,请使用LEAVESCREEN语句。注意可以使用变量指定下一个屏幕号:DATA:REQSCRNLIKESY-DYNNRVALUE'100'.MODULESET_NEXT_SCREEN.SETSCREENREQSCRN.ENDMODULE.系统字段SY-DYNNR总是包含当前屏幕的号码。调用新的屏幕序列有时要将屏幕或整个屏幕序列插入到事务过程中。例如,可能要让某个用户从主应用程序屏幕中调用弹出屏幕,以输入辅助信息。完成输入以后,用户应当能够关闭弹出屏幕并直接返回到主屏幕中先前所离开的地方。要做到这一点,有两种方法:使用CALLSCREEN语句CALLSCREEN可以向当前序列中插入这样的序列。在此对该语句的使用作了说明。调用对话模块对话模块是能够调用的、不属于特定事务的屏幕序列。对话模块有自己的模块池,能被任何事务调用。关于使用对话模块的详细信息,参见调用对话模块(页Error!Notavalidlink.)。调用新屏幕序列的语法是:CALLSCREENscreennumber.3既然该语句实际上是挂起当前序列并启动新序列,因此可以将CALLSCREEN看作“堆积”序列。系统继续进行新序列,直到它完成才恢复先前挂起的序列。(CALLSCREEN之后直接恢复处理该命令)要调用屏幕作为对话框(弹出),请使用带选项STARTINGAT、ENDINGAT的CALLSCREEN:CALLSCREENscreennumberSTARTINGATstartcolumnstartlineENDINGATendcolumnendlineSTARTINGAT和ENDINGAT选项告诉系统在何处定位弹出屏幕。屏幕本身必须比常规屏幕小。在ABAP/4中,屏幕的每个可堆积序列都是“调用模式”。从给定当前序列返回的方法使得这一点很重要。要终止调用模式并返回到挂起链,请将“下一个屏幕”设置为0并退出:LEAVETOSCREEN0.或SETSCREEN0.LEAVESCREEN.返回到挂起链时,用直接跟随初始CALLSCREEN语句的语句来恢复执行。事务中的初始屏幕序列本身即是调用模式。如果在该序列中LEAVETOSCREEN0(也就是说,没有堆积任何其它的调用模式),则从事务中一起返回。一次可以堆积最多9个调用模式。退出当前屏幕要终止处理当前屏幕,请使用:LEAVETOSCREENscreennumber。或SETSCREENnumber。LEAVESCREEN。这两个命令都终止处理当前屏幕,并直接跳到屏幕号。如果使用SETSCREEN而没有使用LEAVESCREEN,则程序在转入屏幕号之前完成当前屏幕的处理。如果使用LEAVESCREEN而之前没有使用SETSCREEN,则终止当前屏幕,并直接转入屏幕属性中指定为默认的下一个屏幕在“调用模式”中,特殊屏幕号0(LEAVETOSCREEN0)导致系统跳回到先前的调用级别。也就是说,如果使用CALLSCREEN调用屏幕序列,则LEAVETOSCREEN0将终止该序列并返回调用屏幕。如果没有调用过屏幕序列,LEAVETOSCREEN0将终止事务。关于CALLSCREEN的详细信息,参见调用新的屏幕序列(页2)。示例事务:设置和调用屏幕要了解屏幕流程控制的完整实施,查看事务TZ40(开发类SDWA)是如何组织的很有用。屏幕流程逻辑要显示事务如何转入或调用屏幕,请看屏幕200的处理。退出命令的处理(功能代码为BACK和EXIT)显示了该过程。处理BACK或EXIT功能代码时,PAI模块必须检查在屏幕显示或最后保存之后航班细节是否更改。如果是,屏幕200必须调出弹出屏幕210以提示保存。屏幕200流程逻辑的相关部分是:*---------------------------------------------------------------**Screen200:FlowLogic**&--------------------------------------------------------------*PROCESSAFTERINPUT.MODULEEXIT_0200ATEXIT-COMMAND.*(...Fieldcheckshere...)MODULEUSER_COMMAND_0200.4ABAP/4代码屏幕200的PAI模块如下。事务TZ40提供所有返回功能(“后退”、“退出”和“取消”)作为退出命令。然而,在屏幕200中,只有“取消”功能允许立即从屏幕退出。要使取消生效,使用标准退出逻辑告诉系统跳回到屏幕100:*&---------------------------------------------------------------**&ModuleEXIT_0200INPUT*&---------------------------------------------------------------*MODULEEXIT_0200INPUT.CASEOK_CODE.WHEN'CANC'.CLEAROK_CODE.SETSCREEN100.LEAVESCREEN.ENDCASE.ENDMODULE.屏幕200的所有其它的功能代码处理如下:“保存”功能触发数据库的更新“退出”和“后退”功能触发调用SAFETY_CHECK例程。该例程检查屏幕上未保存的数据,必要时提醒用户保存。注意返回方法。对于“退出”功能,控制从事务中一起返回(SETSCREEN0)。对于“后退”功能,将先前屏幕设置为后继屏幕(SETSCREEN100)。*&---------------------------------------------------------------**&ModuleUSER_COMMAND_0200INPUT*&---------------------------------------------------------------*MODULEUSER_COMMAND_0200INPUT.CASEOK_CODE.WHEN'SAVE'.UPDATESPFLI.IFSY-SUBRC=0.MESSAGES001WITHSPFLI-CARRIDSPFLI-CONNID.ELSE.MESSAGEA002WITHSPFLI-CARRIDSPFLI-CONNID.ENDIF.CLEAROK_CODE.WHEN'EXIT'.CLEAROK_CODE.PERFORMSAFETY_CHECKUSINGRCODE.IFRCODE='EXIT'.SETSCREEN0.LEAVESCREEN.ENDIF.WHEN'BACK'.CLEAROK_CODE.PERFORMSAFETY_CHECKUSINGRCODE.IFRCODE='EXIT'.SETSCREEN100.LEAVESCREEN.ENDIF.ENDCASE.ENDMODULE.SAFETY_CHECK例程代码如下。CHECK语句将当前屏幕值与保存屏幕值作比较。如果值匹配,则不需要保存并且终止例程。如果值不同,则SAFETY_CHECK调用弹出屏幕210。弹出屏幕询问用户是否要保存,并在OK_COD
本文标题:SAP的ABAP4语言中文培训教材第三部分第四章控制屏幕流程
链接地址:https://www.777doc.com/doc-2849007 .html