天天看點

Additional Functionality on SELECT-OPTIONS

      對于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.