ABAP动态修改屏幕及屏幕字段结构SCREEN的字段含义

一、屏幕字段结构SCREEN的字段含义

在SAP屏幕中,一个字段就像.NET中的一个控件,这个字段对应一个SCREEN结构,就像控件的多个属性。
SE11可以查看SCREEN结构中的字段,只是没有备注。

名称                  长度       说明
NAME                30          屏幕字段的名称
GROUP1             3            属于字段组1的字段
GROUP2             3            属于字段组2的字段
GROUP3             3            属于字段组3的字段
GROUP4             3            属于字段组4的字段
ACTIVE              1            可见并准备输入的字段
REQUIRED           1            字段输入是强制的,即该值为X是表示该字段必须输入
INPUT                1            字段准备输入
OUTPUT             1            字段仅用于显示
INTENSIFIED       1           高亮显示字段
INVISIBLE           1           禁用字段
LENGTH              1           减少字段输出长度
DISPLAY_3D        1           以三维框架显示字段
VALUE_HELP        1           显示有值帮助的字段 

上述长度为1的字段,=1表示有效,=0则相反。

二、ABAP动态修改屏幕

选择屏幕、对话屏幕都有对应的SCREEN内表,下面是几个重要属性:
NAME:Name of the screen field。如果参数是select-options类型参数,则参数名以LOW与HIGH后缀来区分。
GROUP1:选择屏幕元素通过MODIF ID选项设置GROUP1(对话屏幕通过属性设置),将屏幕元素分为一组,方便屏幕的元素的批量修改
REQUIRED:控制文本框、下拉列表屏幕元素的必输性,使用此属性后会忽略OBLIGATORY选项。取值如下:
0:不必输,框中前面也没有钩
1:必输,框中前面有钩,系统会自动检验是否已输入,相当于OBLIGATORY选项
2:不必输,但框中前面有钩,系统不会检查是否已输入,此时需要手动检验

INPUT:控制屏幕元素(包括复选框、单选框、文本框)的可输性
0:屏幕可读不可操作
1:可输入

ACTIVE:控制屏幕元素的可见性
0:掩藏
1:显示

实例1:通过按钮控制显示内容
实例2:对屏幕其它字段属性测试(代码已注释)

REPORT z_zhangm_045.
*实例1 :
TABLES:vbak.

SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.
SELECTION-SCREEN  COMMENT 1(79) comm0 MODIF ID md1.
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN  COMMENT 1(79) comm1 MODIF ID md1.
SELECTION-SCREEN END OF BLOCK b2.
SELECTION-SCREEN BEGIN OF BLOCK b1  WITH FRAME TITLE text-001.
SELECT-OPTIONS: s_vbeln FOR vbak-vbeln.
SELECT-OPTIONS: s_erdat FOR vbak-erdat MODIF ID md1.
SELECT-OPTIONS: s_spart FOR vbak-spart MODIF ID md2.
SELECTION-SCREEN SKIP 2.
PARAMETERS:p_query RADIOBUTTON GROUP g1 DEFAULT 'X' USER-COMMAND mxx,  "选择屏幕可控制:日期 USER-COMMAND 触发PBI
           p_his RADIOBUTTON GROUP g1.   "选择屏幕可控制:产品组

SELECTION-SCREEN END OF BLOCK b1.

INITIALIZATION.
  PERFORM frm_init_data.

AT SELECTION-SCREEN OUTPUT.
  PERFORM frm_check_screen.
*&---------------------------------------------------------------------*
*&      Form  frm_init_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_init_data.
  comm0 = '1.日期查询'.
  comm1 = '2.产品组查询'.
ENDFORM.                    "frm_init_data

*&---------------------------------------------------------------------*
*&      Form  frm_check_screen
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_check_screen.
  IF p_query IS NOT INITIAL.
    LOOP AT SCREEN.
      IF screen-group1 = 'MD2'.
        screen-active = '0'.
      ENDIF.
      MODIFY SCREEN.
    ENDLOOP.
  ELSEIF p_his IS NOT INITIAL.
    LOOP AT SCREEN.
      IF screen-group1 = 'MD1'.
        screen-active = '0'.
      ENDIF.
      screen-input = 1.  "0为可读  1为可输入
      MODIFY SCREEN.
    ENDLOOP.
  ENDIF.
ENDFORM.    

*实例2:
*PARAMETERS: p_rd1 RADIOBUTTON GROUP gp1 USER-COMMAND mxx.
*PARAMETERS: p_rd2 RADIOBUTTON GROUP gp1 DEFAULT 'X'.
*
*PARAMETERS: p_lic(128) MODIF ID mxy OBLIGATORY.
*
*PARAMETERS: c AS CHECKBOX.
*PARAMETERS: c2 AS CHECKBOX USER-COMMAND mxz 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-required = '2'."外观上打钩,但不自动校验
*      MODIFY SCREEN.
*    ELSEIF screen-group1 = 'MXY'.
*      screen-active = '0'.
*      screen-required = '2'.
*      MODIFY SCREEN.
*    ENDIF.
*  ENDLOOP.
*
*AT SELECTION-SCREEN ON p_lic.
*  IF p_rd2 IS NOT INITIAL"手动检验:但当点击单选按钮与复选框 C2 时,不校验
*     AND sy-ucomm <> 'MXX' AND sy-ucomm <> 'MXZ' AND p_lic IS INITIAL.
*    MESSAGE e055(00).
*  ENDIF.

猜你喜欢

转载自blog.csdn.net/weixin_43734184/article/details/112993109