原文:Small Fire · Dialog 程序简介 · ABAP 子专栏 · Small Fire 技术笔记

TCode

SE51:屏幕操作器

SE41:菜单编辑器

ABAP与Dialog交互方式

ABAP程序与Dialog屏幕进行数据交换的方式,通过在程序中定义一个与Dialog中同名的全局变量或者结构,从而实现数据的自动传递。

  • 加载数据:在PBO中实现
  • 推送数据:在PAI中控制
  • PBO:Before the screen is displayed
  • PAI:After a user action on the screen
  • POH:when F1
  • POV:When F4

Screen Flow Logic 定义了在 screen 上的各种事件,而 Dynpro 定义了这个 Screen 和各种事件。ABAP MODULE POOL 会处理这些 Event,在每次事件时调用一个ABAP program。

语法:

  • 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:

AttributeAttributeAttribute
screen-namescreen-lengthscreen-invisible
screen-group1screen-inputscreen-active
screen-group2screen-output
screen-group3screen-required
screen-group4screen-intensified

字段检查与逻辑流的控制

单字段检查

  • 单个字段检查: 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检查

不是初始值检查:

FIELD <FLD1> MODLE <MDL1> ON INPUT.

  • ON INPUT表示是初始值改变时执行. 有一个特殊情况: FIELD <FLD1> MODULE <MDL1> ON *-INPUT 表示用户输入字段首先输入'*',并且输入字段属性,MODULE无效。

有改变检查:

FIELD<FLD1>MODULE<MDL1>ON REQUEST.

CHAIN中有字段不是初始值检查

CHAIN.
  FIELD<FLD1>.
  FIELD<FLD2>,<FLD3>,<FLD4>.
  MODULE<MDL1>ON CHAIN_INPUT.
  MODULE<MDL2>.
ENDCHAIN.
注意:CHAIN_INPUT表示FLD1,FLD2,FLD3,FLD4不是初始值是执行MDL1检查。

PBO:CALL SUBSCREEN <SUBAREA> INCLUDING <PROGRAM_NAME> <DYNPRO_NUMBER>.

PAI:CALL SUBSCREEN <SUBAREA>. <program_name> = sy-cprog : 代表本程序

ON CHANGE OF : 当指定字段修改才会去读取数据

EXIT-COMMAND:

  • MODULE <mod> AT EXIT-COMMAND. 在对话屏幕中,对于E类型的Function Code触发退出屏幕,其他字段值不会传递到ABAP程序中。
  • AT SELECTION-SCREEN ON EXIT-COMMAND.在选择屏幕中,按钮触发事件。