Dialog 屏幕操作
语法
-
Module ... END MODULE. -
SET screen xxxx . -
CALL screen xxxx. -
LEAVE screen. -
CALL screen xxx [starting at lc ur] [ending at rc lr].(Modal dialog box类型) -
SET CURSOR FIELD <f> [offset <o>]. -
MODULE EXIT AT EXIT-COMMAND.
Static Attributes
| Attribute | Attribute | Attribute | Attribute | Attribute | Attribute |
|---|---|---|---|---|---|
| screen-name | screen-active | screen-invisible | screen-input | screen-group1 | screen-group3 |
| screen-length | screen-required | screen-intensified | screen-output | screen-group2 | screen-group4 |
| screen-color | screen-request | screen-value_help | screen-intensified |
字段检查与逻辑流的控制
有许多方法可以验证在 Dialog screen 程序的 dynpro 上创建的字段,一般在 PAI Module 中进行验证。
单字段检查
- 单个字段检查:
FIELD <FLD1> MODULE <MDL1> . - 单个字段多个 MODULE 检查,如 FLD1 有两个 MODULE 检查:
FIELD <FLD1> MODULE <MDL1>. MODULE <MDL2>.
检查多字段,使用 CHAIN
CHAIN.
FIELD <FLD1>.
FIELD <FLD2>,<FLD3>,<FLD4>.
MODULE <MDL1>.
MODULE <MDL2>.
ENDCHAIN.
"表示FLD1,FLD2,FLD3,FLD4有MDL1与MDL2检查"
直接通过 ABAP 表查询验证 dynpro 屏幕字段
FIELD scr_field-ebeln
SELECT * FROM ekko
WHERE ebeln = scr_field-ebeln
INTO ekko
WHENEVER NOT FOUND SEND ERRORMESSAGE 001 WITH 'Document Number' ON INPUT.
其它检查
不是初始值检查: FIELD <FLD1> MODLE <MDL1> ON INPUT.
- ON INPUT表示是初始值改变时执行。
- 有一个特殊情况:
FIELD <FLD1> MODULE <MDL1> ON *-INPUT表示用户输入字段首先输入’*',并且输入字段属性,MODULE无效。
- 有一个特殊情况:
有改变检查:FIELD <FLD1> MODULE <MDL1> ON REQUEST.
CHAIN 中有字段不是初始值检查
-
CHAIN_INPUT: 表示FLD1、FLD2、FLD3、FLD4 不是初始值时执行 MDL1 检查
-
ON CHAIN_REQUEST:当指定字段修改才会去读取数据
CHAIN.
FIELD <FLD1>.
FIELD <FLD2>,<FLD3>,<FLD4>.
MODULE <MDL1> ON CHAIN_INPUT.
MODULE <MDL2> ON CHAIN_REQUEST.
ENDCHAIN.
EXIT-COMMAND
MODULE <mod> AT EXIT-COMMAND. :在 Dialog Screen 中,对于 E 类型的 Function Code 触发退出屏幕,其他字段值不会传递到 ABAP 程序中。
CASE sy-command .
WHEN 'BACK' .
CHECK abap_on
EQ lcl_workbench=>popup_to_confirm( iv_text = lcl_workbench=>v_text-t138 ).
LEAVE TO SCREEN 0 .
ENDCASE.
AT SELECTION-SCREEN ON EXIT-COMMAND.:在选择屏幕中,按钮触发事件。
CALL Subscreen
子屏幕是显示在另一个(“主”)屏幕区域中的独立屏幕。子屏幕允许在运行时将一个屏幕嵌入到另一个屏幕中。 您可以在主屏幕上包含多个子屏幕。
子屏幕既适用于嵌入的屏幕,也适用于放置它的主屏幕上的区域。 如果在屏幕属性中定义,则通过 SE51 事务创建的实际屏幕称为子屏幕屏幕。
当使用子屏幕时,嵌入屏幕的流逻辑也嵌入到主屏幕的流逻辑中。因此,在屏幕上使用子屏幕就像在 ABAP 程序中使用包含一样。每当调用主屏幕时,都会调用主屏幕的 PBO。但是在显示之前,还调用了主屏幕上附有子屏幕区域的每个屏幕的PBO。
步骤
- 定义屏幕上的子屏幕区域
- 定义合适的子屏幕
- 在子屏幕区域中包含子屏幕屏幕
创建子屏幕
在 ABAP dynpro 屏幕上创建子屏幕是一个相当简单的过程,只需将子屏幕区域(SUB0)添加到主程序屏幕,然后在主屏幕的 PBO 流逻辑中添加相应的 ABAP 代码。
添加子屏幕区域:SUB0

添加 ABAP 调用代码:
*Dynpro PBO flow logic for screen 0100
PROCESS BEFORE OUTPUT.
MODULE STATUS_0100.
CALL SUBSCREEN sub0 INCLUDING 'call_prog' 'call_subscreen_number'.
"CALL SUBSCREEN sub0 INCLUDING 'ZSAPPROG' '0110'."
PROCESS AFTER INPUT.
MODULE USER_COMMAND_0100.
使用子屏幕
可以在主屏幕的流逻辑中使用 CALL SUBSCREEN 语句包含子屏幕屏幕。
要在主屏幕的子屏幕区域中包含一个子屏幕屏幕并调用其 PBO 流程逻辑,请在主屏幕的 PBO 事件中使用以下语句:
CALL SUBSCREEN <subarea> INCLUDING [<prog>] <dynp>.<prog> = sy-cprog:代表本程序
调用子屏幕的 PAI 流逻辑,在主屏的PAI流逻辑中使用如下语句:
CALL SUBSCREEN <subarea>.
注意事项
- 子屏幕需要在主屏幕的流逻辑(PBO 和 PAI)中调用
- 一个屏幕内的子屏幕元素的名称应该是唯一的
- 不应该将 OK_CODE 或 FCODE 附加到子屏幕。主屏本身的 OK_CODE 就是副屏的 OK_CODE
- 子屏幕不能有任何包含 SET TITLEBAR、SET PF-STATUS、SET SCREEN、LEAVE SCREEN 或 LEAVE TO SCREEN 的对话模块,这将导致运行时错误
- CHAIN..ENDCHAIN 和 LOOP ENDLOOP 语句中不允许 CALL SUBSCREEN
- 子屏幕不能有 AT EXIT-COMMAND 模块
- 使用的字段是全局字段时必须先在顶部声明
- 如果使用来自另一个对话程序的子屏幕,除非添加特定代码,否则不会发生数据传输
屏幕下拉列表
使用 Listbox 选项将下拉列表添加到 SAP dynpro screen。
打开 Screen 的 Layou,创建字段后双击输入字段,出现属性窗口。 更新 Dropdown 属性,使其设置为 Listbox 。
PBO 中添加代码
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
* SET PF-STATUS 'xxxxxxxx'.
* SET TITLEBAR 'xxx'.
TYPE-POOLS : VRM.
DATA: ld_field TYPE VRM_ID ,
it_listbox TYPE VRM_VALUES,
wa_listbox LIKE LINE OF it_listbox.
DATA: it_mara TYPE STANDARD TABLE OF mara,
wa_mara TYPE mara.
SELECT * up TO 10 rows
FROM mara
INTO TABLE it_mara.
LOOP AT it_mara INTO wa_mara.
wa_listbox-key = wa_mara-matnr.
wa_listbox-text = wa_mara-matnr.
APPEND wa_listbox TO it_listbox.
ENDLOOP.
ld_field = 'EKKO-EBELN'.
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
id = ld_field
values = it_listbox.
ENDMODULE. " STATUS_0100 OUTPUT "
SAP dynpro 屏幕单选按钮分组
Dialog dynpro screen 上创建单选按钮时,默认情况下它们不会相互链接。因此需要将它们链接在一起,以便在选择其中一个时,SAP 知道取消选择已选择的那个。
打开图形布局编辑器并选择要组合在一起的单选按钮,选中后右键单击选择并选择 “Radio Buton Group => Define”。 单选按钮现在应该可以正常工作,并且每次只允许选择一个单选按钮。