[SAPABAP开发技术总结]动态修改选择屏幕
12.16.动态修改屏幕
选择屏幕、对话屏幕都有对应的SCREEN内表,下⾯是⼏个重要属性:
ME:Name of the screen field。如果参数是select-options类型参数,则参数名以LOW与HIGH后缀来区分。
:选择屏幕元素通过选项设置GROUP1(对话屏幕通过属性设置),将屏幕元素分为⼀组,
RED:⽂本框、下拉列表屏幕元素的必输性,使⽤此属性后会忽略OBLIGATORY选项。取值如下:
0:不必输,框中前⾯也没有钩
1:必输,框中前⾯有钩,系统会⾃动检验是否已输⼊,相当于选项
2:不必输,但框中前⾯有钩,系统不会检查是否已输⼊,此时需要⼿动检验
INPUT:控制屏幕元素(包括复选框、单选框、⽂本框)的可输性
ACTIVE:控制屏幕元素的可见性
REQUIRED选项的应⽤:该选项可以解决这个问题:在p_rd1)后显⽰某个必输字段(p_lclfil),但当这个必输框显⽰出来后,如果点击想隐藏它时,此时输⼊框中必须有值,否则系统会⾃动检验要求重新输⼊。现要求输⼊框没有输⼊值的情况下,也可在点击p_rd2时隐藏它,
则解决的办法是:将输⼊框的这个属性设置为2(显⽰必须的钩,但系统不会⾃动进⾏必输验证),去掉OBLIGATORY选项(不去掉也会被忽略),并在AT SELECTION-SCREEN ON field事件⾥时⼿动进⾏为空验证
"⼀定要设置 USER-COMMAND ,否则点击之后,不会触发屏幕PAI事件,PAI事件不触发则会导致
"屏幕的AT SELECTION-SCREEN OUTPUT也就不会被触发(⾮执⾏按钮的FunCode触发时都会刷新
"屏幕,所以再次显⽰屏幕时再次执⾏PBO)
p_rd1 RADIOBUTTON GROUP gp1 USER-COMMAND mxx."⽤来隐藏 p_lclfil
PARAMETERS p_rd2 RADIOBUTTON GROUP gp1 DEFAULT 'X'."⽤来显⽰ p_lclfil
"当通过程序动态修改屏幕元素属性 required 后,会忽略掉这⾥的 OBLIGATORY 选项
*PARAMETERS p_lclfil(128) AS LISTBOX VISIBLE LENGTH 20 MODIF ID  mxy OBLIGATORY .
PARAMETERS p_lclfil(128) MODIF ID  mxy OBLIGATORY .
PARAMETERS: c AS CHECKBOX."没什么作⽤,⽤来测试 CHECKBOX 的可输⼊性
"当 C2 被钩选时,屏幕上的其他输⼊元素均不可输⼊
PARAMETERS: c2 AS CHECKBOX USER-COMMAND ddd DEFAULT 'X'.
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN  .
"当 C2 没有钩选时,其他元素都设置为可输⼊
IF screen-name <> 'C2' AND c2 IS INITIAL .
screen-input = 1.
MODIFY SCREEN.
ELSEIF screen-name <> 'C2' AND c2 IS NOT INITIAL .
screen-input = 0."C2钩选时,所以屏幕输⼊元素禁⽌输⼊
MODIFY SCREEN.
ENDIF.
"控制下拉列表(⽂本框也是⼀样)的必输性:外观上打钩,但不⾃动校验
IF p_rd2 = 'X' AND screen-group1 = 'MXY'.
"显⽰
screen-active = '1'.
*      screen-input = '1'."显⽰前设为可输⼊
screen-required = '2'."外观上打钩,但不⾃动校验
MODIFY SCREEN.
ELSEIF screen-group1 = 'MXY'. "
"隐藏
screen-active = '0'.
screen-required = '2'.
input框禁止输入MODIFY SCREEN.
ENDIF.
ENDLOOP.
AT SELECTION-SCREEN ON p_lclfil.
IF p_rd2 IS NOT INITIAL"⼿动检验:但当点击单选按钮与复选框 C2 时,不校验
AND sy-ucomm <> 'MXX' AND sy-ucomm <> 'DDD' AND p_lclfil IS INITIAL.
MESSAGE e055(00).
ENDIF.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。