史上接近最完整的选择屏幕开发知识(针对初学者)(还有下拉菜单的实现)
選擇屏幕的開發知識無非就是圍繞這3個點:PARAMETERS ? ? ? ?SELECT-OPTIONS ? ? ? ? ? ? ? SELECTION-SCREEN
(一)PARAMETERS:為變量定義輸入字段
? ? ? ? ?1、PARAMETERS的全部用法:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?P_BUDAT ? ??LIKE ? ? ?BKPF-BUDAT ? ? ?OBLIGATORY,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?P_CX?????AS ? ?CHECKBOX ? ?DEFAULT ? ? 'X',
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?P_BUDAT ? ??LIKE ? ? ?BKPF-BUDAT ? ? ?NO DISPLAY,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?P_CX?????AS ? ?CHECKBOX,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?R1 ? ? RADIOBUTTON GROUP ?RAD1
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?R2 ? ? RADIOBUTTON GROUP ?RAD1 ? ? DEFAULT 'X'
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?R3 ? ? RADIOBUTTON GROUP ?RAD2
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?R4 ? ? RADIOBUTTON GROUP ?RAD2
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?P1 ? ? MODIF ID SC1
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?P2 ? ??MODIF ID SC1
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?P3 ? ? MODIF ID SC2
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?P4 ? ? MODIF ID SC2
? ? ? ? ? ? ? ? ? 每種用法的解釋:
? ? ? ? ? ? ? ? ? ?OBLIGATORY ?設定該項偉必輸項
? ? ? ? ? ? ? ? ? ?CHECKBOX ? ? 設為打鉤的(復選框),如果沒有設定default的值,那么當這個被勾上的時候才為X,有default的話,即默認為勾上的。
? ? ? ? ? ? ? ? ? ?NO DISPLAY ? ?設定該項為不顯示狀態。
? ? ? ? ? ? ? ? ? ?RADIOBUTTON ? 設定單選,有default的,默認這個是選上的,同一個RAD1和RAD2,每個RAD只能選一個值,選中則變量變為X,如果沒有設定default,每個組的第一個參數將被激活并分配‘X’。
? ? ? ? ? ? ? ? ? ?MODIF ID ? ? ? ? 將參數分配給修改組,通過在SELECTION-SCREEN ? OUTPUT事件中進行處理:
? ? ? ? ? ? ? ? ? ?AT SELECTION-SCREEN OUTPUT. ? ? ? ? ? ?結合上面的定義,P1和P2放在一組,P3和P4放在一組,然后P1和P2的INTENSIFIED字段被設為1,效果是高亮度,
? ? ? ? ? ? ? ? ? ?LOOP AT SCREEN. ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 這個可以這樣使用。
? ? ? ? ? ? ? ? ? ? IF ?SCREEN-GROUP1 = 'SC1'
? ? ? ? ? ? ? ? ? ? SCREEN-INTENSIFIED = '1'.
? ? ? ? ? ? ? ? ? ? MODIFY SCREEN.
? ? ? ? ? ? ? ? ? ? ENDIF.
? ? ? ? ? ? ? ? ? ENDLOOP.
? ? ? ? ? ? ? ? ? ?還有一些不常用的例如: LOWER CASE,有這個lower case,系統就不會把輸入值更改為大寫。(還沒有使用過)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? MEMORY-ID ? ? ? ?允許你從全局SAP內存使用缺省值。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? MATCHCODE OBJECT ? ? ?匹配代碼對象,obj的名稱必須是4字符的變量名
? (二)SELECT-OPTIONS:選擇表
? ? ? ? ? ? ? 1、SELECT-OPTIONS的全部用法:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?S_EBLEN ? ? ? ? ? ?FOR ? ? ? ? ? ? ?VBRK-EBLEN ? DEFAULT
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ???S_EBLEN ? ? ? ? ? ?FOR ? ? ? ? ? ? ?VBRK-EBLEN ? DEFAULT ?A ? ?TO ? ?B
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ???S_EBLEN ? ? ? ? ? ?FOR ? ? ? ? ? ? ?VBRK-EBLEN ? OBLIGATORY
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?S_EBLEN ? ? ? ? ? ?FOR ? ? ? ? ? ? ?VBRK-EBLEN ? ?NO DISPLAY
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?S_EBLEN ? ? ? ? ? ?FOR ? ? ? ? ? ? ?VBRK-EBLEN ? NO-EXTENSION
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?S_EBLEN ? ? ? ? ? ?FOR ? ? ? ? ? ? ?VBRK-EBLEN ? NO-INTERVALS
? ? ? ? ? ? ? ? ? ? ? ?DEFAULT ? ?OBLIGATORY ?NO-DISPLAY的功能和之前的PARAMETERS的一樣。
? ? ? ? ? ? ? ? ? ? ? ?DEFAULT ? A ? TO ?B ? ?設置里面的LOW 和HIGH字段,例如我要設置默認公司代碼從0001到0020。
? ? ? ? ? ? ? ? ? ? ? ?選擇表的里面的字段有:SIGN ? ? ? OPTION ? ? LOW ? ? ?HIGH
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?SIGN ? ? ? ?可以是I ?和 ? E ? ? I是包括, ? E是排除的意思
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?OPTION ? 可以是:EQ ?NE ?GT ?LE ?LT ?CP ?NP ? ? 這個可以查看我的帖子(select-option作為select的條件使用)
? ? ? ? ? ? ? ? ? ? ? NO-EXTENSION,把選擇表限制在一行
? ? ? ? ? ? ? ? ? ? ? NO INTERVALS ,把選擇表限制偉單值選擇
? ? (三)SELECTION-SCREEN: ? ? 格式化選擇屏幕
? ? ? ? ? ? ? ? ?1、SELECTION-SCREEN 的全部使用方法:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?SELECTION-SCREEN ?SKIP ? <N> ? ? ? ? ? ? ? 該語句產生N個空行,如果只產生一個,可以省略<N>。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?SELECTION-SCREEN ?ULINE ?<POS(LEN)> ? ? ? ?該語句創建下劃線,入過沒有POS(LEN),則在當前下面創建新行。如果有POS(LEN),則從POS處開始,連續<LEN>個字符。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?SELECTION-SCREEN COMMENT ? ? ? ? ? ? ? ?用該選項是必須定義格式(例如選擇屏幕上的文字說明可以用這個語句)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?SELECTION-SCREEN BEGIN OF LINE ? ? ? 把選擇屏幕的幾個元素放在一行上。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?SELECTION-SCREEN END OF LINE
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?SELECTION-SCREEN ?POSITION ?<POS> ? ? ? ? 定位元素
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?SELECTION-SCREEN BEGIN OF BLOCK ? <block> ? ?創建元素塊,里面放選擇屏幕語句,block的名字可以在initialization里面維護。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?SELECTION-SCREEN END OF BLOCK ? ?<blokc>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?SELECTION-SCREEN FUNCTION KEY <I> ? ? ? ? ? ? ? ? ? 在選擇屏幕的應用工具欄創建按鈕,I為1-5,最多只有5個按鈕。具體要怎么實現,可以參考另一篇文章(給選擇屏幕添加按鈕)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? SELECTION-SCREEN PUSHBUTTON <pos(len)> ?<name> ? ?USER-COMAND ? <ucom> ? [MODIF ID <keyt>] ? ? ? ? ? ? ? ? ? ? ? ? 在選擇屏幕上創建按鈕,其中<name >是按鈕的文本, <ucom>為輸入詞典字段SSCRFIELDS-UCOMM,必須使用TABLES語句聲明表SSCRFIELDS。(后續有用到把具體例子貼上來)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ?(四) INITIALIZATION : ? ? ? ? 用于屏幕初始化,例如屏幕的block的名字,屏幕默認字段的一些初始值的填充,工具欄按鈕的一些字段的值的填充等等。
? ? ? ? ?(五) AT ? SELECTION-SCREEN ? OUTPUT ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 這個就相當于PBO的功能,可以對選擇屏幕字段進行修改(前面也有說到一些功能要放到這里使用的),在選擇運行程序的時候,選擇屏幕出來之前就先運行這段,還有就是選擇屏幕輸入條件之后按下回車或者是執行后,也會進入這個event。
? ? ? ? ? ? ?例如可以判斷用戶名,然后選擇性的輸入一些選擇屏幕字段:
? ? ? ? ? ? ? ? ? ? ??at?selection-screen?output.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?if?sy-uname?ne?'LIUJC_CN'.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?loop?at?screen.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?if?screen-name+0(7)?eq?'S_AUFNR'?or
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?screen-name+2(7)?eq?'S_AUFNR'.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?screen-invisible?=?'1'.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?screen-active?=?'0'.
? ? ? ? ? ? ? ? ? ? ? ? ? ??modify?screen.
? ? ? ? ? ? ? ? ? ? ? ? ? ?endif.
? ? ? ? ? ? ? ? ? ? ? ? ? ?endloop.
? ? ? ? ? ? ? ? ? ? ? ? ? ?endif.
?
? ? ? ? ? ? ? ? 例如可以判斷輸入的某個字段是某個值的時候添加屏幕字段(注意要按回車):
? ? ? ? ? ? ? ? 例如,當我輸入company code為某個值的時候,我需要添加一個選擇字段以及部分check box。首先,這些要添加的選擇屏幕內容都是一樣要預先設定好,然后通過at selection-screen output 設定好邏輯即可:
? ? ? ? ? ? ? ? 定義: ? ? ?s_bukrs1?FOR?t001-bukrs?NO?INTERVALS?MODIF?ID?m4.
? ? ? ? ? ? ? ? 邏輯: ? ??LOOP?AT?SCREEN. ? ? ? ? ? ? ? ? ? ? ? ? (這里可以用group,也可以用name。關于SCREEN的值如何去定義,參考本博客的另一篇文章:SCREEN的理解)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?CASE?screen-group1.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?WITH 'M4'.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??IF?'SG01'?IN?s_bukrs.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??MOVE?'1'?TO?screen-active.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ?(六) AT ?SELECTION-SCREEN ?ON ?VALUE-REQUEST ? FOR ? ?<NAME> ? ? ? 這個最常見的就是對upload文件的文件名進行檢查的使用:
? ? ? ? ? ? ? ? ? ? ? ? ??AT?SELECTION-SCREEN?ON?VALUE-REQUEST?FOR?filename.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?CALL?FUNCTION?'KD_GET_FILENAME_ON_F4'
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?EXPORTING
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? field_name????=?'C:\'
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??mask??????????=?',Excel?Files,*.xls,*.XLS,'
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?*??????STATIC????????=?'X'
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??CHANGING
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?file_name?????=?filename
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??EXCEPTIONS
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?mask_too_long?=?1
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??OTHERS????????=?2.
? ? ? ? ?(七) AT ?SELECTION-SCREEN ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?這個比較常用的是在工具欄里面添加了按鈕,然后對這個按鈕進行操作。
? ? ? ? ? ? ? ? ? ? ? ? ? ?AT?SELECTION-SCREEN.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??CASE?SSCRFIELDS-UCOMM.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??WHEN?'FC01'.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??PERFORM?FRM_DOWNLOAD_DATA.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?ENDCASE.
? ? ? ? ? ?(八)選擇屏幕下拉菜單的實現:
? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? 網上有一段簡單的代碼可以實現:
SELECTION-SCREEN??BEGIN?OF?BLOCK?1.
PARAMETERS:?????zlist(4)???????type?C?DEFAULT?'CN03'?AS
????????????????LISTBOX?VISIBLE?LENGTH?30.
SELECTION-SCREEN??END?OF?BLOCK?1.
INITIALIZATION.
at?selection-screen?on?value-request?for?zlist.
??perform?selectlist?changing?zlist.
form?selectlist?changing?zlist.
??data?itab_list?type?vrm_values.
??data?wa_list?like?line?of?itab_list.
??wa_list-key?=?'01'.
??wa_list-text?=?'入庫單'.
??append?wa_list?to?itab_list.
??wa_list-key?=?'02'.
??wa_list-text?=?'移庫單'.
??append?wa_list?to?itab_list.
??wa_list-key?=?'03'.
??wa_list-text?=?'出庫單'.
??append?wa_list?to?itab_list.
??wa_list-key?=?'04'.
??wa_list-text?=?'銷售出庫單'.
??append?wa_list?to?itab_list.
??wa_list-key?=?'05'.
??wa_list-text?=?'銷售退貨單'.
??append?wa_list?to?itab_list.
??call?function?'VRM_SET_VALUES'
????exporting
??????id?????=?'ZLIST'??"屏幕中的下拉菜單的NAME,下拉菜單選擇LISTBOX
??????values?=?itab_list.
??refresh?itab_list.
endform.
標準程序里面是這樣的一段代碼:這里不用像上面那樣的操作,然后就可以直接實現下拉菜單的功能了。
SELECTION-SCREEN??BEGIN?OF?BLOCK?1?WITH?FRAME?TITLE?text-165.
PARAMETERS:
????????????????format???????LIKE?rfpdo1-febformat?DEFAULT?'M'?AS
????????????????LISTBOX?VISIBLE?LENGTH?30?USER-COMMAND?bai,
SELECTION-SCREEN??END?OF?BLOCK?1.
?
? ? ? ? ? ? ? (九)實現屏幕的勾選:
? ? ? ?
? ? ? ? ? 代碼如下:
? ? ? ? ? ?Post invoice的代碼如下:
? ? ? ? ? ? ? ? ? ? ? ??PARAMETERS:?P_CHK1???AS?CHECKBOX?USER-COMMAND?SELECT.
? ? ? ? ? ? ? ? ? ? ? ??SELECTION-SCREEN:?COMMENT?3(12)?TEXT-073?MODIF?ID?B4?.
? ? ? ? ? ?confirmed for的代碼如下:
? ? ? ? ? ? ? ? ? ? ? ? ?SELECTION-SCREEN:??COMMENT?1(13)?TEXT-053?FOR?FIELD?P_INFO?MODIF?ID?B4.
? ? ? ? ? ? ? ? ? ? ? ? ?SELECTION-SCREEN:??POSITION?14.
? ? ? ? ? ? ? ? ? ? ? ? ?PARAMETERS:????????P_INFO(2)???TYPE?C?default?'0'?MODIF?ID?B4..
? ? ? ? ? ? ? ? ? ? ? ? ?SELECTION-SCREEN:??COMMENT?19(4)?TEXT-054?MODIF?ID?B4. ? ? ? ? ??
?
? ? ? ? ? ? (十)實現屏幕可以影藏部分選擇屏幕字段:
? ? ? ? ? ? ? ?
1、定義展開按鈕
SELECTION-SCREEN?BEGIN?OF?LINE.
SELECTION-SCREEN?PUSHBUTTON?1(4)?but1?USER-COMMAND?button1?VISIBLE
LENGTH?2.
SELECTION-SCREEN?COMMENT?6(20)?com1.
SELECTION-SCREEN?END?OF?LINE.
2、定義展開的selection-screen
SELECTION-SCREEN?BEGIN?OF?BLOCK?b2?WITH?FRAME?TITLE?text-001.
SELECT-OPTIONS:s_lvorm?FOR?marc-lvorm?MODIF?ID?bl1,
???????????????s_mstae?FOR?mara-mstae?MODIF?ID?bl1,
???????????????s_mmsta?FOR?marc-mmsta?MODIF?ID?bl1,
???????????????s_beskz?FOR?marc-beskz?MODIF?ID?bl1,
???????????????s_sobsl?FOR?marc-sobsl?MODIF?ID?bl1,
???????????????s_mtart?FOR?mara-mtart?MODIF?ID?bl1.
SELECTION-SCREEN?END?OF?BLOCK?b2?.
3、點擊那個展開button的時候賦值
AT?SELECTION-SCREEN.
CASE?sy-ucomm.
????WHEN?'BUTTON1'.
??????IF?but1?=?'@K1@'.
????????WRITE?icon_data_area_collapse?AS?ICON?TO?but1.
????????com1?=?''.
??????ELSE.
????????WRITE?icon_data_area_expand?AS?ICON?TO?but1.
????????com1?=?'Material?Fields'.
??????ENDIF.
??ENDCASE.
4、展開屏幕
AT?SELECTION-SCREEN?OUTPUT.
??LOOP?AT?SCREEN.
????IF?but1?=?'@K1@'?AND?screen-group1?=?'BL1'.
??????screen-active?=?0.
??????MODIFY?SCREEN.
????ENDIF.
??ENDLOOP.
? ? ? ? ? ? ? ? ? ?(十一)調用選擇屏幕
我們另外定義一個選擇屏幕500
???SELECTION-SCREEN?BEGIN?OF?SCREEN?500.
??SELECTION-SCREEN?BEGIN?OF?LINE.
??SELECT-OPTIONS:S_BUKRS6?FOR?BKPF-BUKRS?NO?INTERVALS?.
??SELECTION-SCREEN?END?OF?LINE.
??SELECTION-SCREEN?END?OF?SCREEN?500.
修改START-OF-SELECTION事件為:
??CALL?SELECTION-SCREEN?500.
調用了這個選擇屏幕之后,點擊按鈕,這里不是用user_command或者是在屏幕500里面再去設一個module,直接在call selection-screen 500后面添加執行代碼,當輸入選擇屏幕只會,點擊執行就會執行后面的代碼。
? ? ? ? ? ? ? ? ? ?(十二)調用子屏幕call subscreen
? ? ? ? ? ? ? ? ? ?(十三)選擇屏幕放多個tab:
本例實現如上圖效果,示例代碼如下:
REPORT ?Z_LPF_SCREEN_TAB.
TABLES: MARA,SSCRFIELDS.
selection-screen function key 1.
SELECTION-SCREEN BEGIN OF SCREEN 100 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK A1 WITH FRAME TITLE TEXT-001.
? SELECT-OPTIONS:
? MAT1 FOR MARA-MATNR NO INTERVALS.
? SELECTION-SCREEN SKIP 1.
? PARAMETERS:
? CHK1 AS CHECKBOX DEFAULT 'X'.
? SELECTION-SCREEN END OF BLOCK A1.
? SELECTION-SCREEN END OF SCREEN 100.
SELECTION-SCREEN BEGIN OF SCREEN 200 AS SUBSCREEN.
? PARAMETERS: MAT2 LIKE MARA-MATNR.
? SELECTION-SCREEN END OF SCREEN 200.
SELECTION-SCREEN:
BEGIN OF TABBED BLOCK MYTAB FOR 5 LINES,
? TAB (20) BUTTON1 USER-COMMAND PUSH1,
? TAB (20) BUTTON2 USER-COMMAND PUSH2,
? END OF BLOCK MYTAB.
? INITIALIZATION.
? MOVE 'BUTTON' TO SSCRFIELDS-FUNCTXT_01.
? BUTTON1 = 'TAB1'.
? BUTTON2 = 'TAB2'.
? MYTAB-PROG = SY-REPID.
? MYTAB-DYNNR = 100.
AT SELECTION-SCREEN.
? CASE SY-UCOMM.
? ? WHEN 'PUSH1'.
? ? ? MYTAB-DYNNR = 100.
? ? ? MYTAB-ACTIVETAB = 'BUTTON1'.
? ? WHEN 'PUSH2'.
? ? ? MYTAB-DYNNR = 200.
? ? ? MYTAB-ACTIVETAB = 'BUTTON2'.
? ? WHEN OTHERS.
? ENDCASE.
? ? ? ? ? (十四)實現下面這個功能:
在AT?SELECTION-SCREEN?OUTPUT.加入這段代碼:
CASE?'X'.
????WHEN?R_RFC.
??????SET_SCREEN?'MD1'. ? ? ? ? ? ? ? ? ? ? ?
????WHEN?R_PROG.
??????SET_SCREEN?'MD2'.
????WHEN?R_JOB.
??????SET_SCREEN?'MD3'.
????WHEN?R_HTTP.
??????SET_SCREEN?'MD4'.
????WHEN?OTHERS.
??ENDCASE.
其中MD1是這樣定義的:
SELECT-OPTIONS?:S_FUNC??FOR?ZRFCSRVR-FUNC_NAME?NO?INTERVALS?MODIF?ID?MD1.
? ? ? ? ??(十五)跟上面這個類似的實現:
? ? ? ? ? ? 代碼:
屏幕設計:
SELECTION-SCREEN?BEGIN?OF?BLOCK?BLK_1?WITH?FRAME?TITLE?TEXT-001.
PARAMETERS:??????B_DIS?RADIOBUTTON?GROUP?OPT?DEFAULT?'X'?user-command?uc_udp,
?????????????????B_UDP?RADIOBUTTON?GROUP?OPT?.
SELECTION-SCREEN?END?OF?BLOCK?BLK_1.
SELECTION-SCREEN?BEGIN?OF?BLOCK?BLK_2?WITH?FRAME?TITLE?TEXT-002.
PARAMETERS:
??????????????????P_U01??AS?CHECKBOX?MODIF?ID?UDP,
??????????????????P_U02??AS?CHECKBOX?MODIF?ID?UDP,
??????????????????P_U03??AS?CHECKBOX?MODIF?ID?UDP,
??????????????????P_U04??AS?CHECKBOX?MODIF?ID?UDP,
SELECTION-SCREEN?END?OF?BLOCK?BLK_2.
具體在AT-SELECTION-SCREEN 里面的實現:
AT?SELECTION-SCREEN?OUTPUT.
???PERFORM?AT_SELECTION.
FORM?AT_SELECTION?.
?????LOOP?AT?SCREEN.
??????????CASE??screen-group1.
????????????WHEN?'UDP'.
????????????????IF?B_UDP?EQ?'X'.
???????????????????screen-active?=?1.
???????????????????screen-invisible?=?0.
????????????????ELSE.
???????????????????screen-active?=?0.
???????????????????screen-invisible?=?1.
????????????????ENDIF.
??????????ENDCASE.
??????????modify?screen.
?????ENDLOOP.
ENDFORM.????????????????????"?AT_SELECTION
? ? ? ? ? ? (十六)
總結
以上是生活随笔為你收集整理的史上接近最完整的选择屏幕开发知识(针对初学者)(还有下拉菜单的实现)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python实现QQ音乐爬取下载最新可用
- 下一篇: 202102 sqlplus comm