ABAP modify screen:修改屏幕,实现隐藏、禁止输入字段
Loop at screen会loop处理屏幕上的每一个组件,并对其做相应的处理。
SELECTION-SCREEN: BEGIN OF BLOCK B1 WITH FRAME.
PARAMETERS S_DATE TYPE DATUM DEFAULT SY-DATUM MODIF ID OO.
SELECTION-SCREEN: END OF BLOCK B1.
SELECTION-SCREEN: BEGIN OF BLOCK B2 WITH FRAME.
SELECT-OPTIONS: S_DATE2 FOR SY-DATUM MODIF ID PP.
SELECTION-SCREEN: END OF BLOCK B2.
SELECTION-SCREEN: BEGIN OF BLOCK B3 WITH FRAME.
PARAMETERS : R1 RADIOBUTTON GROUP D1 DEFAULT 'X' USER-COMMAND SINGLECLICK,
R2 RADIOBUTTON GROUP D1 .
SELECTION-SCREEN: END OF BLOCK B3.
选择r1 的时候只显示B1;r2时候只显示B2
AT SELECTION-SCREEN OUTPUT.
IF R1 = 'X'.
LOOP AT SCREEN.
IF SCREEN-GROUP1 = 'PP'.
SCREEN-ACTIVE = '0'.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ELSEIF R2 = 'X'.
LOOP AT SCREEN.
IF SCREEN-GROUP1 = 'OO'.
SCREEN-ACTIVE = '0'.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ENDIF.
- Modiy屏幕的时候,如果屏幕有必输字段则不能修改,只有把必输项输入值后才能修改屏幕,需要有所取舍;
- 注意:
PARAMETERS : R1 RADIOBUTTON GROUP D1 DEFAULT 'X' USER-COMMAND SINGLECLICK, 红色这一段话必须有,否则不能动态修改屏幕;选择一次单选框就会触发一次atselection-screen output,实现动态修改屏幕.
- 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则相反。
转自:https://blog.csdn.net/zhongguomao/article/details/52710924
可以参考以下
REPORT zlongtext_up_down NO STANDARD PAGE HEADING. TABLES: crmc_text,stxh,qmel,qmsm,qmfe,qmma,qmur,stpo. DATA: fldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE, slayt TYPE slis_layout_alv, varnt LIKE disvariant, repid LIKE sy-repid, i_title TYPE lvc_title, i_grid_settings TYPE lvc_s_glay. DATA: slines TYPE string. DATA: header LIKE thead . DATA: it_lines TYPE STANDARD TABLE OF tline WITH HEADER LINE. DATA: BEGIN OF istr , tdobject LIKE stxh-tdobject,"文本: 应用程序对象 tdid LIKE stxh-tdid,"Text ID tdspras LIKE stxh-tdspras,"语言代码 tdname LIKE stxh-tdname,"Name tdformat TYPE tdformat ,"标记列 line TYPE tdline ,"文本行 END OF istr. *ALV显示 DATA: BEGIN OF itab OCCURS 0. INCLUDE STRUCTURE istr. DATA:END OF itab. *文本下载 DATA:itab_d LIKE istr OCCURS 0 WITH HEADER LINE. DATA: BEGIN OF it_head OCCURS 0, tdobject LIKE stxh-tdobject,"文本: 应用程序对象 tdid LIKE stxh-tdid,"Text ID tdspras LIKE stxh-tdspras,"语言代码 tdname LIKE stxh-tdname,"Name END OF it_head. DATA : catalog LIKE tcatalog OCCURS 0 WITH HEADER LINE. DATA: filename TYPE string, lf_rc TYPE c. SELECTION-SCREEN BEGIN OF BLOCK b0 WITH FRAME TITLE t0. PARAMETERS: pr1 RADIOBUTTON GROUP typ0 USER-COMMAND sele DEFAULT 'X' MODIF ID m0. PARAMETERS: pr2 RADIOBUTTON GROUP typ0 MODIF ID m0. SELECTION-SCREEN END OF BLOCK b0. SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE t1. SELECT-OPTIONS: s_object FOR crmc_text-r3object OBLIGATORY DEFAULT 'VBBK' MODIF ID m1 , s_tdid FOR crmc_text-r3id MODIF ID m1 , s_tdname FOR stxh-tdname MODIF ID m1. PARAMETERS incstr TYPE string MODIF ID m1. SELECTION-SCREEN SKIP. PARAMETERS: p_alv RADIOBUTTON GROUP typ USER-COMMAND sele DEFAULT 'X' MODIF ID m1. PARAMETERS: p_dc RADIOBUTTON GROUP typ MODIF ID m1. PARAMETERS: p_dn RADIOBUTTON GROUP typ MODIF ID m1. PARAMETERS: p_df RADIOBUTTON GROUP typ MODIF ID m1. SELECTION-SCREEN END OF BLOCK b1. SELECTION-SCREEN BEGIN OF BLOCK b4 WITH FRAME TITLE t4. PARAMETERS: p_upc RADIOBUTTON GROUP typ2 USER-COMMAND sele DEFAULT 'X' MODIF ID m2. PARAMETERS: p_upa RADIOBUTTON GROUP typ2 MODIF ID m2. PARAMETERS: p_file LIKE ibipparms-path OBLIGATORY DEFAULT 'C:\longtext.txt' MODIF ID m3 , p_kong AS CHECKBOX MODIF ID m3 . SELECTION-SCREEN END OF BLOCK b4. AT SELECTION-SCREEN OUTPUT. t0 = '功能选择'. %_pr1_%_app_%-text = '导出'. %_pr2_%_app_%-text = '导入'. t1 = '导出功能'. %_p_alv_%_app_%-text = 'ALV显示'. %_p_dc_%_app_%-text = '复制到剪贴板'. %_p_dn_%_app_%-text = '保存到本地文本文件'. %_p_df_%_app_%-text = '保存到服务器文件'. %_p_alv_%_app_%-text = 'ALV显示'. %_s_object_%_app_%-text = '文本对象'. %_s_tdid_%_app_%-text = '标识'. %_s_tdname_%_app_%-text = 'KEY'. %_incstr_%_app_%-text = '长文本包含字符串'. t4 = '导入功能'. %_p_upc_%_app_%-text = '数据来自剪贴板(不要复制标题)'. %_p_upa_%_app_%-text = '数据来自文本文件'. %_p_file_%_app_%-text = '文件名'. %_p_kong_%_app_%-text = '允许上载长文本为空'. CLEAR:fldcat,fldcat[]. PERFORM catlg_set USING 'TDOBJECT' '应用程序对象'(101). PERFORM catlg_set USING 'TDID' 'TEXT ID'(102). PERFORM catlg_set USING 'TDSPRAS' '语言代码'(103). PERFORM catlg_set USING 'TDNAME' 'NAME'(104). PERFORM catlg_set USING 'TDFORMAT' '标记列'(105). PERFORM catlg_set USING 'LINE' '文本行'(106). LOOP AT SCREEN. IF pr1 = 'X'. IF screen-group1 = 'M2' OR screen-group1 = 'M3' . screen-active = '0'. ELSE. screen-active = '1'. ENDIF. ENDIF. IF pr2 = 'X' AND p_upa <> 'X'. IF screen-group1 = 'M1' OR screen-group1 = 'M3' . screen-active = '0'. ELSE. screen-active = '1'. ENDIF. ENDIF. IF pr2 = 'X' AND p_upa = 'X'. IF screen-group1 = 'M1' . screen-active = '0'. ELSE. screen-active = '1'. ENDIF. ENDIF. MODIFY SCREEN. ENDLOOP. AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file . CALL FUNCTION 'F4_FILENAME' EXPORTING program_name = syst-cprog dynpro_number = syst-dynnr field_name = ' ' IMPORTING file_name = p_file. filename = p_file. START-OF-SELECTION.