• ABAP Help Document(21):10.2 Selection Screens


    10.2 Selection screens

              Selection screens为特殊dynpros,可以在executable programs, function groups,module pools中定义。

              设置Selection screens的GUI Status,使用RS_SET_SELSCREEN_STATUS,特殊情况下,使用RS_EXTERNAL_SELSCREEN_STATUS。

    1.creat selection screens

    语法:

    1. SELECTION-SCREEN BEGIN OF SCREEN dynnr [TITLE title]
                                             [AS WINDOW].
      SELECTION-SCREEN END OF SCREEN dynnr.

    创建普通屏幕。

    语法:

    2. SELECTION-SCREEN BEGIN OF SCREEN dynnr AS SUBSCREEN
                                            [NO INTERVALS]
                                            [NESTING LEVEL n].
      SELECTION-SCREEN END OF SCREEN dynnr.

    创建子屏幕。

    SELECTION-SCREEN中可以包含PARAMETER,SELECTION-OPTIONS,SELECTION-SCREEN,但是screen不能嵌套。

    定义的SELECTION-SCREEN可以在Dynpro,PBO,PAI调用使用call screen,

    call subscreen嵌入子屏幕或Tabstrip。

    示例1:

    "创建selection screens
    "TITLE:指定title
    "AS WINDOW:显示为弹窗
    SELECTION-SCREEN BEGIN OF SCREEN 500 TITLE title
                                         AS WINDOW.
      PARAMETERS name TYPE sy-uname.
    SELECTION-SCREEN END OF SCREEN 500.
    title = 'Input name'.
    "调用屏幕
    CALL SELECTION-SCREEN '0500' STARTING AT 10 10

    示例2:

    "创建子屏幕
    SELECTION-SCREEN BEGIN OF SCREEN 100 AS SUBSCREEN.
    PARAMETERS: p1 TYPE c LENGTH 10,
                p2 TYPE c LENGTH 10,
                p3 TYPE c LENGTH 10.
    SELECTION-SCREEN END OF SCREEN 100.
    SELECTION-SCREEN BEGIN OF SCREEN 200 AS SUBSCREEN.
    PARAMETERS: q1 TYPE c LENGTH 10,
                q2 TYPE c LENGTH 10,
                q3 TYPE c LENGTH 10.
    SELECTION-SCREEN END OF SCREEN 200.
    "屏幕500
    SELECTION-SCREEN BEGIN OF SCREEN 500 AS WINDOW.
      "定义tabstrip
      SELECTION-SCREEN:BEGIN OF TABBED BLOCK mytab FOR 10 LINES,
                      TAB (20) button1 USER-COMMAND push1
                                       DEFAULT SCREEN 100,
                      TAB (20) button2 USER-COMMAND push2
                                       DEFAULT SCREEN 200,
                       END OF BLOCK mytab.
    SELECTION-SCREEN END OF SCREEN 500.
    INITIALIZATION.
      button1 = 'Selection Screen 1'.
      button2 = 'Selection Screen 2'.
    START-OF-SELECTION.
      "CALL SCREEN 500.
    
      "当在dynpro的pbo,pai中call screen,
      "如果是selection screen,必须使用下面方式
      CALL SELECTION-SCREEN 500

    2.selection screens elements

              selection screen中有多种组件;selection screen最大宽度83;

    SKIP

    语法:SELECTION-SCREEN SKIP [n] [ldb_additions].

    创建空行,默认1行。

    ULINE

    语法:

    SELECTION-SCREEN ULINE [[/][pos|POS_LOW|POS_HIGH](len)]

                           [MODIF ID modid]

                           [ldb_additions].

    创建一条线,在线必须有内容。

    示例:

    "划线,在线必须有内容,不能是空白
      SELECTION-SCREEN ULINE /1(60).

    COMMENT

    语法:

    SELECTION-SCREEN COMMENT [/][pos|POS_LOW|POS_HIGH](len)

                             {text|{[text] FOR FIELD sel}}

                             [VISIBLE LENGTH vlen]

                             [MODIF ID modid]

                             [ldb_additions].

    示例:

     "文本
      "/可省略,指定文本起始位置,长度
      "SELECTION-SCREEN COMMENT /5(10) test.
      "for field,文本作为element标签,只在line中生效
      "visible length,可见长度
      "element必须在comment后
      SELECTION-SCREEN BEGIN OF LINE.
      SELECTION-SCREEN COMMENT 5(10) test FOR FIELD P1 VISIBLE LENGTH 5.
      PARAMETERS:p1 TYPE sy-datum.
      SELECTION-SCREEN END OF LINE.

    PUSHBUTTON

    语法:

    SELECTION-SCREEN PUSHBUTTON [/][pos|POS_LOW|POS_HIGH ](len) button_text

                                USER-COMMAND fcode

                                [VISIBLE LENGTH vlen]

                                [MODIF ID modid]

                                [ldb_additions].

    创建按钮,使用ICON_CREATE创建图标,或者使用text-xxx,text描述。

    示例:

     "按钮
      SELECTION-SCREEN BEGIN OF LINE.
        "可以后续赋值描述
        SELECTION-SCREEN PUSHBUTTON 5(30) btn1 USER-COMMAND clk1.
        "使用text-xxx描述
        SELECTION-SCREEN PUSHBUTTON 40(10) text-001 USER-COMMAND clk2.
      SELECTION-SCREEN END OF LINE.

    创建图标

    FORM f_creat_icon.
      "按钮长度必须很长,才能显示完全
      CALL FUNCTION 'ICON_CREATE'
       EXPORTING
         name   = 'ICON_CHECKED'
         text   = 'Button1'
         info   = 'quick info'
         add_stdinf = ''
       IMPORTING
         RESULT = btn1
       EXCEPTIONS
         OTHERS = 0.
    ENDFORM.

    LINE

    语法:

    SELECTION-SCREEN BEGIN OF LINE.
    [SELECTION-SCREEN POSITION {pos|POS_LOW|POS_HIGH} [ldb_additions]].
    SELECTION-SCREEN END OF LINE.

    定义一行,position指定空白位置

    line中不能嵌套定义line;

    line中elements的text使用comment指定;

    line中不能定义block,tabstrips;

    BLOCK

    语法:

    SELECTION-SCREEN BEGIN OF BLOCK block
                                    [WITH FRAME [TITLE title]]
                                    [NO INTERVALS].
    SELECTION-SCREEN END OF BLOCK block.

    定义块,block名称最大长度20字符;

    块最多嵌套5层;

    title最大长度8个字符,text-xxx最大长度70个字符;

    示例:

    "
      SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE text-001.
        PARAMETERS bp_1 TYPE sy-datum.
        SELECTION-SCREEN BEGIN OF BLOCK blk2 WITH FRAME.
          PARAMETERS bp_2 TYPE sy-datum.
          SELECTION-SCREEN BEGIN OF BLOCK blk3 WITH FRAME.
            PARAMETERS bp_3 TYPE sy-datum.
          SELECTION-SCREEN END OF BLOCK blk3.
        SELECTION-SCREEN END OF BLOCK blk2.
      SELECTION-SCREEN END OF BLOCK blk1.

    TABBED BLOCK

    语法:

    SELECTION-SCREEN BEGIN OF TABBED BLOCK tblock FOR n LINES [NO INTERVALS].  [SELECTION-SCREEN TAB (len) tab USER-COMMAND fcode

                      [DEFAULT [PROGRAM prog] SCREEN dynnr]

                             [MODIF ID modid]

                      [ldb_additions].]

    SELECTION-SCREEN END OF BLOCK tblock.

    定义Tabstrip,tblock最大字符16。n指定行数,最大197。

    (len)最大长度79,tab最大长度8字符。

    FUNCTION KEY

    语法:

    SELECTION-SCREEN FUNCTION KEY n [ldb_additions].

    定义application toolbar,包含5个pushbutton,funciton code:FC01~FC05;

    定义接口工作区,SSCRFIELDS;

    使用SMP_DYNTXT,显示icon;

    示例:

    定义接口

    "function key 接口
    TABLES sscrfields.

    定义function key

    "function key
      SELECTION-SCREEN FUNCTION KEY 1.
      SELECTION-SCREEN FUNCTION KEY 2.

    设置function key

    "设置function key icon
    FORM f_func_key_icon.
      "使用这个或icon 编码4位
      "TYPE-POOLS icon.
      "SMP_DYNTXT(菜单制作器:动态文本的程序接口)
      DATA:func_icon TYPE smp_dyntxt.
      "func_icon-text = 'func1'. "显示文本,没用?
      func_icon-icon_id = '@0N@'. "显示icon
      func_icon-icon_text = 'func1'."图标文本
      func_icon-quickinfo = 'quick info'."提示tip
      "function key text显示
      sscrfields-functxt_01 = func_icon.
      sscrfields-functxt_02 = 'func2'.
    ENDFORM.

    用户操作响应,在AT SELECTION-SCREEN,处理用户操作。

    "function key comm
    FORM f_function_key.
      "响应function key
      CASE sscrfields-ucomm.
        WHEN 'FC01'.
          MESSAGE 'function 1' TYPE 'I'.
          CALL SELECTION-SCREEN 501 STARTING AT 50 50.
        WHEN 'FC02'.
          MESSAGE 'function 2' TYPE 'I'.
          CALL SELECTION-SCREEN 502 STARTING AT 50 50.
        WHEN OTHERS.
      ENDCASE.
    ENDFORM.

    MODIF ID

    语法:

    MODIF ID modid

    可以定义Group,根据id对屏幕元素进行MODIFY SCREEN,SCREEN-group1进行判断。

    以下Elements可以定义modify id:

    SELECTION-SCREEN - COMMENT

    SELECTION-SCREEN - PUSHBUTTON

    SELECTION-SCREEN - TAB

    SELECTION-SCREEN - ULINE

    PARAMETERS

    SELECT-OPTIONS

    INCLUDE

    语法:

    SELECTION-SCREEN INCLUDE

    可以包含同program其他selection-screen定义的elements。

    1. SELECTION-SCREEN INCLUDE PARAMETERS para
                                          [OBLIGATORY [OFF]]
                                          [MODIF ID modid]
                                          [ID id].

    包含parameter,obligatory重新定义是否必输。

    2. SELECTION-SCREEN INCLUDE SELECT-OPTIONS selcrit
                                              [OBLIGATORY [OFF]]
                                              [NO INTERVALS [OFF]]
                                              [MODIF ID modid]
                                              [ID id].

    包含select options,更改obligatory,no intervals等。

    3. SELECTION-SCREEN INCLUDE COMMENT [/][pos](len) text
                                       [FOR FIELD sel]
                                       [MODIF ID modid]
                                       [ID id].

    包含comment,可以指定新的for field。

    4. SELECTION-SCREEN INCLUDE PUSHBUTTON [/][pos](len) button_text
                                          [USER-COMMAND ucom]
                                          [MODIF ID modid]
                                          [ID id].

    包含pushbutton,可以指定新的user-command。

    5. SELECTION-SCREEN INCLUDE BLOCKS block [ID id].

    包含block

    示例:

    "使用include
    SELECTION-SCREEN BEGIN OF SCREEN 501 AS WINDOW.
      "如果p1已经obligatory,使用off关闭必输
      SELECTION-SCREEN INCLUDE PARAMETERS p1 OBLIGATORY OFF.
      "可以定义新的user command??有问题
      "SELECTION-SCREEN INCLUDE PUSHBUTTON 5(20) btn1 USER-COMMAND blk4.
      "包含block
      SELECTION-SCREEN INCLUDE BLOCKS blk1.
    SELECTION-SCREEN END OF SCREEN 501.

    PARAMETERS

    语法:

    PARAMETERS {para[(len)]}|{para [LENGTH len]}

               [type_options]

               [screen_options]

               [value_options]

               [ldb_options].
    [type_options]:类型定义

    { TYPE type [DECIMALS dec] }

      | { LIKE dobj }

      | { LIKE (name) }

    [screen_options]:屏幕选项

    { {[OBLIGATORY|NO-DISPLAY] [VISIBLE LENGTH vlen]}

    | {AS CHECKBOX [USER-COMMAND fcode]}

    | {RADIOBUTTON GROUP group [USER-COMMAND fcode]}

    | {AS LISTBOX VISIBLE LENGTH vlen [USER-COMMAND fcode] [OBLIGATORY]}

    }

        [MODIF ID modid] ... .

    [value_options]:值选项

    [DEFAULT val]
    [LOWER CASE]
    [MATCHCODE OBJECT search_help]
    [MEMORY ID pid]
    [VALUE CHECK]

    创建parameter,单个值输入框。

    para名字最长8个字符;

    type不能是b, s, f, xstring类型;

    group名字最长4个字符;

    fcode名字最长20个字符;

    示例:

    "parameters
    "动态名,大写才能带出帮助等dict信息
    DATA:name TYPE C LENGTH 132 VALUE 'SPFLI-CARRID'.
    SELECTION-SCREEN BEGIN OF SCREEN 502 AS WINDOW.
      "para最长8个字符
      "使用(len)长度,length n指定长度,数据类型为C
      PARAMETERS:p01(4).
      PARAMETERS:p02 LENGTH 4.
      "使用type
      PARAMETERS:p03 TYPE C LENGTH 10.
      "reference
      PARAMETERS:p04 TYPE spfli-carrid.
      "like
      PARAMETERS:p05 LIKE p04.
      "like (name),name最长132
      PARAMETERS:p06 LIKE (name).
      "是否必输
      PARAMETERS:p07 TYPE C LENGTH 10 OBLIGATORY.
      "是否显示
      PARAMETERS:p08 TYPE C LENGTH 10 NO-DISPLAY.
      "显示长度,可输入长度10,可见长度5
      PARAMETERS:p09 TYPE C LENGTH 10 VISIBLE LENGTH 5.
      "checkbox,sscrfields-ucomm可以处理
      PARAMETERS:p_check AS CHECKBOX USER-COMMAND chk1.
      "radiobutton,group名最长4位
      PARAMETERS:p_rad1 RADIOBUTTON GROUP gp1.
      PARAMETERS:p_rad2 RADIOBUTTON GROUP gp1.
      "listbox
      PARAMETERS:p_listb TYPE spfli-carrid VISIBLE LENGTH 10 AS LISTBOX.
      "设置默认值,"设置允许小写,不设置自动转换大写
      PARAMETERS:p_10 TYPE C LENGTH 10 DEFAULT 'hello' LOWER CASE.
      "设置帮助f4
      "MATCHCODE OBJECT S_CARRIER_ID 和 check value不能同时
      PARAMETERS:p_11 TYPE C LENGTH 2 MATCHCODE OBJECT S_CARRIER_ID.
      "设置值检查,建议必输,值检查同时设置,避免检查空值
      PARAMETERS:p_12 TYPE spfli-carrid  OBLIGATORY VALUE CHECK.
      "memory id
      PARAMETERS:p_13 TYPE sy-repid MEMORY ID rid.
    SELECTION-SCREEN END OF SCREEN 502

    屏幕输出前,memory id设置初始值:

    AT SELECTION-SCREEN OUTPUT.
      "设置parameter值
      SET PARAMETER ID 'RID' FIELD 'TEST ID'

    SELECT OPTIONS

    语法:

    SELECT-OPTIONS selcrit FOR {dobj|(name)}

               [screen_options]

               [value_options]

               [NO DATABASE SELECTION]

               [ldb_options].

    [screen_options]:屏幕选项

    [OBLIGATORY|NO-DISPLAY]

        [VISIBLE LENGTH vlen]

        [NO-EXTENSION]

        [NO INTERVALS]

        [MODIF ID modid]

    [value_options]:值选项

    [DEFAULT val1 [TO val2] [OPTION opt] [SIGN sgn]]

        [LOWER CASE]

        [MATCHCODE OBJECT search_help]

        [MEMORY ID pid]

    创建select-options,多值范围输入。

    selcrit名字最大8个字符;

    示例:

    "select options
    TABLES:spfli.
    SELECTION-SCREEN BEGIN OF SCREEN 503 AS WINDOW.
      "必须声明table:spfli
      SELECT-OPTIONS s_01 FOR spfli-carrid.
      "动态定义
      SELECT-OPTIONS s_02 FOR (name).
      "没有第二个输入框
      SELECT-OPTIONS s_03 FOR spfli-carrid NO INTERVALS.
      "没有multiple selection
      SELECT-OPTIONS s_04 FOR spfli-carrid NO-EXTENSION.
      "不显示
      SELECT-OPTIONS s_05 FOR spfli-carrid NO-DISPLAY.
      "默认值
      "option:非范围:eq, ne, ge, gt, le, lt, cp, or np;
      "当指定TO范围:bt,nb;
      "sign:i or e;大小写都可
      SELECT-OPTIONS s_06 FOR spfli-carrid DEFAULT 'AA' TO 'AZ' OPTION bt SIGN i.
    SELECTION-SCREEN END OF SCREEN 503.
    

    示例:整体示例

    "function key 接口
    TABLES sscrfields.
    "select seceen elements
    SELECTION-SCREEN BEGIN OF SCREEN 500 TITLE text-001.
      "两行空行
      SELECTION-SCREEN SKIP 2.
      "文本
      "/可省略,指定文本起始位置,长度
      "SELECTION-SCREEN COMMENT /5(10) test.
      "for field,文本作为element标签,只在line中生效
      "visible length,可见长度
      "element必须在comment后
      SELECTION-SCREEN BEGIN OF LINE.
      SELECTION-SCREEN COMMENT 5(10) test FOR FIELD P1 VISIBLE LENGTH 5.
      PARAMETERS:p1 TYPE sy-datum OBLIGATORY.
      SELECTION-SCREEN END OF LINE.
      "划线,在线必须有内容,不能是空白
      SELECTION-SCREEN ULINE /1(60).
      "按钮
      SELECTION-SCREEN BEGIN OF LINE.
      "可以后续赋值描述
      SELECTION-SCREEN PUSHBUTTON 5(30) btn1 USER-COMMAND clk1.
      "使用text-xxx描述
      SELECTION-SCREEN PUSHBUTTON 40(10) text-001 USER-COMMAND clk2.
      SELECTION-SCREEN END OF LINE.
      "
      SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE text-001.
        PARAMETERS bp_1 TYPE sy-datum.
        SELECTION-SCREEN BEGIN OF BLOCK blk2 WITH FRAME.
          PARAMETERS bp_2 TYPE sy-datum.
          SELECTION-SCREEN BEGIN OF BLOCK blk3 WITH FRAME.
            PARAMETERS bp_3 TYPE sy-datum.
          SELECTION-SCREEN END OF BLOCK blk3.
        SELECTION-SCREEN END OF BLOCK blk2.
      SELECTION-SCREEN END OF BLOCK blk1.
      "function key
      SELECTION-SCREEN FUNCTION KEY 1.
      SELECTION-SCREEN FUNCTION KEY 2.
      SELECTION-SCREEN FUNCTION KEY 3.
    SELECTION-SCREEN END OF SCREEN 500.
    
    "使用include
    SELECTION-SCREEN BEGIN OF SCREEN 501 AS WINDOW.
      "如果p1已经obligatory,使用off关闭必输
      SELECTION-SCREEN INCLUDE PARAMETERS p1 OBLIGATORY OFF.
      "可以定义新的user command??有问题
      "SELECTION-SCREEN INCLUDE PUSHBUTTON 5(20) btn1 USER-COMMAND blk4.
      "包含block
      SELECTION-SCREEN INCLUDE BLOCKS blk1.
    SELECTION-SCREEN END OF SCREEN 501.
    
    "parameters
    "动态名,大写才能带出帮助等dict信息
    DATA:name TYPE C LENGTH 132 VALUE 'SPFLI-CARRID'.
    SELECTION-SCREEN BEGIN OF SCREEN 502 AS WINDOW.
      "para最长8个字符
      "使用(len)长度,length n指定长度,数据类型为C
      PARAMETERS:p01(4).
      PARAMETERS:p02 LENGTH 4.
      "使用type
      PARAMETERS:p03 TYPE C LENGTH 10.
      "reference
      PARAMETERS:p04 TYPE spfli-carrid.
      "like
      PARAMETERS:p05 LIKE p04.
      "like (name),name最长132
      PARAMETERS:p06 LIKE (name).
      "是否必输
      PARAMETERS:p07 TYPE C LENGTH 10 OBLIGATORY.
      "是否显示
      PARAMETERS:p08 TYPE C LENGTH 10 NO-DISPLAY.
      "显示长度,可输入长度10,可见长度5
      PARAMETERS:p09 TYPE C LENGTH 10 VISIBLE LENGTH 5.
      "checkbox,sscrfields-ucomm可以处理
      PARAMETERS:p_check AS CHECKBOX USER-COMMAND chk1.
      "radiobutton,group名最长4位
      PARAMETERS:p_rad1 RADIOBUTTON GROUP gp1.
      PARAMETERS:p_rad2 RADIOBUTTON GROUP gp1.
      "listbox
      PARAMETERS:p_listb TYPE spfli-carrid VISIBLE LENGTH 10 AS LISTBOX.
      "设置默认值,"设置允许小写,不设置自动转换大写
      PARAMETERS:p_10 TYPE C LENGTH 10 DEFAULT 'hello' LOWER CASE.
      "设置帮助f4
      "MATCHCODE OBJECT S_CARRIER_ID 和 check value不能同时
      PARAMETERS:p_11 TYPE C LENGTH 2 MATCHCODE OBJECT S_CARRIER_ID.
      "设置值检查,建议必输,值检查同时设置,避免检查空值
      PARAMETERS:p_12 TYPE spfli-carrid  OBLIGATORY VALUE CHECK.
      "memory id
      PARAMETERS:p_13 TYPE sy-repid MEMORY ID rid.
    SELECTION-SCREEN END OF SCREEN 502.
    
    "select options
    TABLES:spfli.
    SELECTION-SCREEN BEGIN OF SCREEN 503 AS WINDOW.
      "必须声明table:spfli
      SELECT-OPTIONS s_01 FOR spfli-carrid.
      "动态定义
      SELECT-OPTIONS s_02 FOR (name).
      "没有第二个输入框
      SELECT-OPTIONS s_03 FOR spfli-carrid NO INTERVALS.
      "没有multiple selection
      SELECT-OPTIONS s_04 FOR spfli-carrid NO-EXTENSION.
      "不显示
      SELECT-OPTIONS s_05 FOR spfli-carrid NO-DISPLAY.
      "默认值
      "option:非范围:eq, ne, ge, gt, le, lt, cp, or np;
      "当指定TO范围:bt,nb;
      "sign:i or e;大小写都可
      SELECT-OPTIONS s_06 FOR spfli-carrid DEFAULT 'AA' TO 'AZ' OPTION bt SIGN i.
    SELECTION-SCREEN END OF SCREEN 503.
    
    INITIALIZATION.
      test = 'test'.
      PERFORM f_creat_icon.
      PERFORM f_func_key_icon.
    
    AT SELECTION-SCREEN OUTPUT.
      "设置parameter值
      SET PARAMETER ID 'RID' FIELD 'TEST ID'.
    
    AT SELECTION-SCREEN.
      PERFORM f_function_key.
    
    START-OF-SELECTION.
      CALL SCREEN 500.
    
    "创建icon
    FORM f_creat_icon.
      "按钮长度必须很长,才能显示完全
      CALL FUNCTION 'ICON_CREATE'
        EXPORTING
          name       = 'ICON_CHECKED'
          text       = 'Button1'
          info       = 'quick info'
          add_stdinf = ''
        IMPORTING
          RESULT     = btn1
        EXCEPTIONS
          OTHERS     = 0.
    ENDFORM.                    "f_creat_icon
    
    "设置function key icon
    FORM f_func_key_icon.
      "使用这个或icon 编码4位
      "TYPE-POOLS icon.
      "SMP_DYNTXT(菜单制作器:动态文本的程序接口)
      DATA:func_icon TYPE smp_dyntxt.
      "func_icon-text = 'func1'. "显示文本,没用?
      func_icon-icon_id = '@0N@'. "显示icon
      func_icon-icon_text = 'func1'."图标文本
      func_icon-quickinfo = 'quick info'."提示tip
      "function key text显示
      sscrfields-functxt_01 = func_icon.
      sscrfields-functxt_02 = 'func2'.
      sscrfields-functxt_03 = 'func3'.
    ENDFORM.   "f_func_key_icon
    
    "function key comm
    FORM f_function_key.
      "响应function key
      CASE sscrfields-ucomm.
        WHEN 'FC01'.
          MESSAGE 'function 1' TYPE 'I'.
          CALL SELECTION-SCREEN 501 STARTING AT 50 50.
        WHEN 'FC02'.
          MESSAGE 'function 2' TYPE 'I'.
          CALL SELECTION-SCREEN 502 STARTING AT 50 50.
        WHEN 'FC03'.
          MESSAGE 'function 3' TYPE 'I'.
          CALL SELECTION-SCREEN 503 STARTING AT 50 50.
        WHEN OTHERS.
      ENDCASE.
    ENDFORM

    3.calling selection screen

    语法:

    CALL SELECTION-SCREEN dynnr
                          [STARTING AT col1 lin1
                          [ENDING   AT col2 lin2]]
                          [USING SELECTION-SET variant].

    注意:selection screen最好不要用call screen调用。

    4.selection screen processing

              selection screen有自己的屏幕处理逻辑流。

    AT SELECTION-SCREEN OUTPUT:相当于screen PBO;

    AT SELECTION-SCREEN ...:相当于screen PAI;

    语法:

    AT SELECTION-SCREEN selscreen_event.

    selscreen_event:

    { OUTPUT }

    | { ON {para|selcrit} }

    | { ON END OF selcrit }

    | { ON BLOCK block }

    | { ON RADIOBUTTON GROUP group }

    | { }

    | { ON {HELP-REQUEST|VALUE-REQUEST} FOR {para|selcrit-low|selcrit-high} }

    | { ON EXIT-COMMAND }.

    Selection screen屏幕事件

    OUTPUT:PBO事件;

    LOAD-OF-PROGRAM,INITIALIZATION只在程序加载,初始化执行一次。

    ON {para|selcrit}:用户输入检查,可以在此Event,当抛出警告or错误信息,会卡住,可以再次输入。

    ON END OF selcrit:select options整体检查。

    ON BLOCK block:整个block检查,当抛出警告or错误信息,整个block中元素可以再次输入。

    ON RADIOBUTTON GROUP group:整体radiobutton group检查,radio button不会触发on para事件。

    {}: AT SELECTION-SCREEN,在整个screen输入检查完毕后触发,可以在此事件一次检查所有元素。

    ON {HELP-REQUEST|VALUE-REQUEST}:相当于POH,POV事件,F1,F4帮助。帮助不会传输数据到program,使用function: RS_SELECTIONSCREEN_READ, RS_SELECTIONSCREEN_UPDATE传输。

    ON EXIT-COMMAND:cancel,exit,back触发

    5. Dynamic Selections

              动态selection,使用CL_ABAP_DYN_PRG或者escape检查安全风险。

    FREE_SELECTIONS_INIT,FREE_SELECTIONS_DIALOG创建动态selection。

    示例:

    "动态selection screen
    CLASS c_dyn_selscreen DEFINITION.
      PUBLIC SECTION.
        METHODS:constructor IMPORTING iv_tabname TYPE tabname.
        METHODS:get_data_show.
      PRIVATE SECTION.
        DATA:lv_selid TYPE rsdynsel-selid.
        DATA:lt_field_tab TYPE TABLE OF rsdsfields.
        DATA:lt_table_tab TYPE TABLE OF rsdstabs.
        DATA:ls_table_tab LIKE LINE OF lt_table_tab.
        DATA:lt_cond_tab TYPE rsds_twhere.
        DATA:lo_dref TYPE REF TO data.
        "alv
        DATA:lo_alv TYPE REF TO cl_salv_table.
        "tabname
        DATA:lv_tabname TYPE tabname.
        METHODS:check_table_exist
         IMPORTING iv_tabname TYPE tabname
         RETURNING VALUE(check_tabname) TYPE tabname.
    ENDCLASS.
    
    CLASS c_dyn_selscreen IMPLEMENTATION.
      "构造
      METHOD constructor.
        "检查table name
        me->check_table_exist( iv_tabname ).
        "table
        ls_table_tab-prim_tab = lv_tabname.
        APPEND ls_table_tab TO lt_table_tab.
        CALL FUNCTION 'FREE_SELECTIONS_INIT'
          EXPORTING
            kind         = 'T'
          IMPORTING
            selection_id = lv_selid
          TABLES
            tables_tab   = lt_table_tab
          EXCEPTIONS
            OTHERS       = 4.
        IF sy-subrc <> 0.
          MESSAGE 'Error in initialization' TYPE 'I' DISPLAY LIKE 'E'.
          LEAVE PROGRAM.
        ENDIF.
    
        CALL FUNCTION 'FREE_SELECTIONS_DIALOG'
          EXPORTING
            selection_id  = lv_selid
            title         = 'Free Selection'
            as_window     = ' '
          IMPORTING
            where_clauses = lt_cond_tab
          TABLES
            fields_tab    = lt_field_tab
          EXCEPTIONS
            OTHERS        = 4.
        IF sy-subrc <> 0.
          MESSAGE 'No free selection created' TYPE 'I'.
          LEAVE PROGRAM.
        ENDIF.
    
      ENDMETHOD.
      "获取数据
      METHOD get_data_show.
        FIELD-SYMBOLS <table> TYPE STANDARD TABLE.
        FIELD-SYMBOLS <cond>  LIKE LINE OF lt_cond_tab.
        READ TABLE lt_cond_tab WITH KEY tablename = lv_tabname ASSIGNING <cond>.
        IF sy-subrc <> 0.
          MESSAGE 'Error in condition' TYPE 'I' DISPLAY LIKE 'E'.
          LEAVE PROGRAM.
        ENDIF.
        CREATE DATA lo_dref TYPE TABLE OF (lv_tabname).
        ASSIGN lo_dref->* TO <table>.
    
        TRY.
            SELECT * FROM (lv_tabname) INTO TABLE <table>
                   WHERE (<cond>-where_tab).
        CATCH cx_sy_dynamic_osql_error.
          MESSAGE 'Error in dynamic Open SQL' TYPE 'I' DISPLAY LIKE 'E'.
          LEAVE PROGRAM.
        ENDTRY.
        "show alv
        TRY.
          cl_salv_table=>factory(
            IMPORTING r_salv_table = lo_alv
            CHANGING  t_table      = <table> ).
          lo_alv->display( ).
        CATCH cx_salv_msg.
          MESSAGE 'Error in ALV display' TYPE 'I' DISPLAY LIKE 'E'.
        ENDTRY.
      ENDMETHOD.
      "检查table是否存在
      METHOD check_table_exist.
        TRY .
          lv_tabname = cl_abap_dyn_prg=>check_table_name_str(
                        val = iv_tabname
                        packages = 'SAPBC_DATAMODEL' ).
        CATCH cx_abap_not_a_table.
          MESSAGE 'Database table not found' TYPE 'I' DISPLAY LIKE 'E'.
          LEAVE PROGRAM.
        CATCH cx_abap_not_in_package.
          MESSAGE 'Only tables from the flight data model are allowed'
                   TYPE 'I' DISPLAY LIKE 'E'.
          LEAVE PROGRAM.
        ENDTRY.
      ENDMETHOD.
    ENDCLASS.

     

  • 相关阅读:
    生成一个签章(用java.awt画一个签章) 并添加到pdf 公章处
    数字转字符串的处理
    Mybatis .xml编译常识
    聚合查询|F查询Q查询
    表查询
    FBV与CBV
    伪静态|虚拟环境|form表单
    数据增删改查|路由层
    django基础 链接数据库|静态文件配置
    WEB框架初学
  • 原文地址:https://www.cnblogs.com/tangToms/p/14696533.html
Copyright © 2020-2023  润新知