对于SELECT-OPTIONS我们常用OBLIGATORY / NO-DISPLAY / VISIBLE LENGTH vlen / NO-EXTENSION / NO INTERVALS / MODIF ID modid 进行screen上的设置,下面的FM可以对Multiple Selection进行进一步的设置,比喻只能输入select value而不能用exclude value。采用FM SELECT_OPTIONS_RESTRICT,加在INITIALIZATION事件里就可以解决这个问题
同样,如何对Multiple Selection进行值的初始化呢? 针对下面的例子同样在INITIALIZATION事件中
MOVE 'I' TO belnr-sign.
MOVE '1' TO belnr-low.
APPEND belnr.
MOVE '2' TO belnr-low.
APPEND belnr.
此外如何得到selection_options上没有确认前的界面上的值呢?SAP同样提供了一个很好的FM RS_REFRESH_FROM_SELECTOPTIONS 去获得当前selection screen上的值
Reference to a system Program: RCATSBEL
REPORT RCATSBEL MESSAGE-ID LR.
TABLES: CATSDB.
SELECT-OPTIONS: BELNR FOR CATSDB-BELNR NO INTERVALS.
DATA: TAB_BELNR LIKE CATS_BELNR OCCURS 0 WITH HEADER LINE.
TYPE-POOLS SSCR.
DATA: RESTRICT TYPE SSCR_RESTRICT.
DATA: OPT_LIST TYPE SSCR_OPT_LIST.
DATA: ASS TYPE SSCR_ASS.
INITIALIZATION.
* restrict input possibilities
MOVE 'BELNR' TO OPT_LIST-NAME.
MOVE 'X' TO: OPT_LIST-OPTIONS-EQ.
APPEND OPT_LIST TO RESTRICT-OPT_LIST_TAB.
MOVE: 'A' TO ASS-KIND,
'I' TO ASS-SG_MAIN,
' ' TO ASS-SG_ADDY,
'BELNR' TO ASS-OP_MAIN.
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.
* start to display the document
START-OF-SELECTION.
PERFORM FILL_BELNR_TAB.
PERFORM DISPLAY_DOCUMENT.
*---------------------------------------------------------------------*
* FORM FILL_BELNR_TAB *
*---------------------------------------------------------------------*
* Fill internal table *
*---------------------------------------------------------------------*
FORM FILL_BELNR_TAB.
REFRESH TAB_BELNR.
IF NOT BELNR IS INITIAL.
LOOP AT BELNR.
TAB_BELNR-BELNR = BELNR-LOW.
APPEND TAB_BELNR.
ENDLOOP.
ELSE.
MESSAGE I228.
STOP.
ENDIF.
ENDFORM.
*---------------------------------------------------------------------*
* FORM DISPLAY_DOCUMENT *
*---------------------------------------------------------------------*
* display document *
*---------------------------------------------------------------------*
FORM DISPLAY_DOCUMENT.
CALL FUNCTION 'CATS_DISPLAY_DOCUMENT'
TABLES
TAB_BELNR = TAB_BELNR
EXCEPTIONS
NO_DOCUMENT_FOUND = 1
NO_DATA = 2
SYSTEM_ERROR = 3
OTHERS = 4.
IF SY-SUBRC = 1.
MESSAGE I170.
ELSEIF SY-SUBRC = 2.
MESSAGE I072.
ELSEIF SY-SUBRC = 3.
MESSAGE E020.
ELSEIF SY-SUBRC = 4.
MESSAGE E030.
ENDIF.
ENDFORM.