需求:最近做权限检查的时候,屏幕上有一个检查字段为多值,但是业务需求是输入多值,我们使用NO INTERVALS,将字段改成单值,但是后面的选择框中还有多值输入,需要我们修改成只能填写单值,如下图:
需求如下:
具体的实现方式,是通过函数SELECT_OPTIONS_RESTRICT进行控制,具体代码如下:
REPORT ztest_xiax02.
TABLES : marc.
* Define the object to be passed to the RESTRICTION
DATA : restrict TYPE sscr_restrict,
optlist TYPE sscr_opt_list,
ass TYPE sscr_ass.
*定义选择屏幕
SELECT-OPTIONS : s_matnr FOR marc-matnr NO INTERVALS,
s_werks FOR marc-werks.
INITIALIZATION.
* 限制MATNR参数只能使用‘EQ’ 和‘BT’.
optlist-name = 'OBJECTKEY1'.
optlist-options-eq = 'X'.
* optlist-options-bt = 'X'.
APPEND optlist TO restrict-opt_list_tab.
ass-kind = 'S'.
ass-name = 'S_MATNR'.
ass-sg_main = 'I'.
ass-sg_addy = space.
ass-op_main = 'OBJECTKEY1'.
APPEND ass TO restrict-ass_tab.
* 限制 WERKS 参数只能使用CP, GE, LT, NE.
optlist-name = 'OBJECTKEY2'.
optlist-options-cp = 'X'.
optlist-options-bt = 'X'.
optlist-options-ge = 'X'.
optlist-options-lt = 'X'.
optlist-options-ne = 'X'.
APPEND optlist TO restrict-opt_list_tab.
ass-kind = 'S'.
ass-name = 'S_WERKS'.
ass-sg_main = 'I'.
ass-sg_addy = space.
ass-op_main = 'OBJECTKEY2'.
APPEND ass TO restrict-ass_tab.
CALL FUNCTION 'SELECT_OPTIONS_RESTRICT'
EXPORTING
restriction = restrict
EXCEPTIONS
too_late = 1
repeated = 2
selopt_without_options = 3
selopt_without_signs = 4
invalid_sign = 5
empty_option_list = 6
invalid_kind = 7
repeated_kind_a = 8
OTHERS = 9.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.