ABAP 子屏幕教程:在 SAP 中调用子屏幕
在阅读本教程之前,请确保您了解什么是对话程序……
调用子屏幕
- 子屏幕是一个独立屏幕,显示在另一个(“主”)屏幕的区域内。
- 子屏幕允许您在运行时将一个屏幕嵌入到另一个屏幕中。您可以在主屏幕上包含多个子屏幕。
- 子屏幕一词既指您嵌入的屏幕,也指主屏幕上放置它的区域。本教程讨论的是子屏幕区域。通过 SE51 事务创建的实际屏幕,如果在屏幕属性中定义,则称为子屏幕屏幕。
- 使用子屏幕时,嵌入屏幕的流程逻辑也嵌入到主屏幕的流程逻辑中。因此,在屏幕上使用子屏幕就像在ABAP 程序中使用 INCLUDE 一样。
要使用子屏幕,您必须遵循三个简单步骤
- 在屏幕上定义子屏幕区域
- 定义合适的子屏幕
- 将子屏幕包含到子屏幕区域中。
此外,您还需要调整子屏幕和主屏幕的框架。您需要在字段名称字段中命名它。
此外,您还需要调整子屏幕内的字段,使其在主屏幕上显示。如果子屏幕定义的大小大于主屏幕上的可用区域,则只会显示适合可用区域的子屏幕部分。区域始终从屏幕的左上角开始测量。因此,在定义子屏幕区域和创建子屏幕时应格外小心。
示例
例如,我们在此处为主屏幕定义了两个子屏幕区域,并将两个不同的子屏幕附加到相应的区域。每当调用主屏幕时,都会调用主屏幕的 PBO。但在显示之前,还会调用主屏幕上附加的子屏幕区域的 PBO。
您可以使用 CALL SUBSCREEN 语句在主屏幕的流程逻辑中包含子屏幕。
要在主屏幕的子屏幕区域中包含子屏幕并调用其 PBO 流程逻辑,请在主屏幕的 PBO 事件中使用以下语句
PROCESS BEFORE OUTPUT. CALL SUBSCREEN <area> INCLUDING [<prog>] <dynp>.
此语句将编号为 <dynp> 的子屏幕分配给名为 <area> 的子屏幕区域。您还可以指定定义子屏幕的程序(可选)。如果未显式指定程序,系统将在主程序所在的 ABAP 程序中查找子屏幕。如果找不到相应的子屏幕,则会发生运行时错误。子屏幕的 PBO 流程逻辑也包含在同一位置。这可以调用定义子屏幕的 ABAP 程序的 PBO 模块。在子屏幕 PBO 结束时,将全局字段从程序传递到子屏幕屏幕中同名的屏幕字段。子屏幕的 PBO 流程逻辑本身也可以包含其他子屏幕。
子屏幕区域的名称 <area> 必须直接输入,无需引号。您可以将名称 <prog> 和 <dynp> 指定为文字或变量。如果使用变量,则必须在 ABAP 程序中声明并填充同名变量。屏幕编号 <dynp> 必须为 4 位数。如果未将子屏幕分配给某个区域,该区域将保持为空。
要调用子屏幕的 PAI 流程逻辑,请在主屏幕的 PAI 流程逻辑中使用以下语句
PROCESS AFTER INPUT. CALL SUBSCREEN <area>.
此语句在 PBO 事件中包含包含在子屏幕区域 <area> 中的子屏幕的 PAI 流程逻辑。这可以调用定义子屏幕的 ABAP 程序的 PAI 模块。数据在子屏幕屏幕和 ABAP 程序中的同名字段之间传输,要么在触发 PAI 事件时,要么在子屏幕 PAI 流程逻辑中相应的 FIELD 语句处。
要点
- 屏幕内的子屏幕元素的名称应唯一
- 您不应将 OK_CODE 或 FCODE 附加到子屏幕。主屏幕本身的 OK_CODE 就是子屏幕的 OK_CODE
- 子屏幕不能包含任何包含 SET TITLEBAR、SET PF-STATUS、SET SCREEN、LEAVE SCREEN 或 LEAVE TO SCREEN 的对话模块。这将导致运行时错误。
- 您需要在主屏幕的流程逻辑(PBO 和 PAI)中调用它。
- 不允许在 CHAIN..ENDCHAIN 和 LOOP ENDLOOP 语句中使用 CALL SUBSCREEN
- 不能有 AT EXIT-COMMAND 模块
- 您使用的字段是全局字段。它们必须在顶层 include 中声明
- 如果使用来自另一个对话程序的子屏幕,除非您添加特定代码,否则数据传输不会发生。