반응형

ABAP에서 Selection Screen 화면에서 

 

Select Option에서 나오는 서치헬프를 제한할 수 있다.

 

Select Option Search Help 화면

 

보통 select option 에서 서치헬프를 클릭하면 다음과 같이 4개의 탭이 나온다.

 

이 4개에 탭에서 필요없는 항목을 제거할 수 있고,

 

selection options 종류도 제한적으로 설정할 수 있다.

selection options 의 종류

 

사용할 function은 바로 'SELECT_OPTIONS_RESTRICT' 이다.

 

  CALL FUNCTION 'SELECT_OPTIONS_RESTRICT'
    EXPORTING
      restriction            = ls_restriction
    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.

 

위의 코드를 INITIALIZATION. 단계 혹은 PBO 단계에서 입력해주면 

 

Selection Screen 의 특정 필드에 대해서 제한을 걸 수 있다.

 

그러면 함수에서 restriction에는 어떠한 정보를 제공해야 하는지 확인해보자.

 

해당 SSCR_RESTRICT 를 더블클릭 하여 들어가보면

 

해당 타입은 다음과 같이 구성되어 있는 걸 확인 할 수 있다.

 

* The type for SELECT_OPTIONS_RESTRICT (to be extended)
TYPES: BEGIN OF SSCR_RESTRICT,
         OPT_LIST_TAB TYPE SSCR_OPT_LIST_TAB,
         ASS_TAB     TYPE SSCR_ASS_TAB,
       END   OF SSCR_RESTRICT.
       
* List of option lists
TYPES: SSCR_OPT_LIST_TAB TYPE SSCR_OPT_LIST OCCURS 5.

* One list of options
TYPES: BEGIN OF SSCR_OPT_LIST,
         NAME    LIKE RSRESTRICT-OPTIONLIST,
         OPTIONS LIKE RSOPTIONS,
       END   OF SSCR_OPT_LIST.

* The association table
TYPES: SSCR_ASS_TAB TYPE SSCR_ASS OCCURS 20.

* One line of table associating selection screen object with opt. list
TYPES: BEGIN OF SSCR_ASS,
         KIND LIKE RSSCR-KIND,               " A(ll), B(lock), S(elect-Option)
         NAME LIKE RSRESTRICT-OBJECTNAME,    " Blockname, maximal 20
         SG_MAIN LIKE RSRESTRICT-SIGN,       " (only) I, * = both
         SG_ADDY LIKE RSRESTRICT-SIGN,       " additional SIGN
                                             " on multiple selection screen
         OP_MAIN LIKE RSRESTRICT-OPTIONLIST, " name of option list for
                                             " main selection screen
         OP_ADDY LIKE RSRESTRICT-OPTIONLIST, " name of additional option
                                             " list for multiple selection screen
       END   OF SSCR_ASS.

 

Restriction 에는 기본적으로 opt_list_tab ( one list of options table ) 와 ass_tab ( association table )를 구성해야한다.

 

1. OPT_LIST_TAB

option list를 나타내는 이름과 , options 의 종류 설정이다.

 

이름은 10글자 이내로 원하는대로 넣으면 된다. [ EX) 'ONLY_EQ' , 'SELOP_EQ', 'EQ_ONLY' , 'ONLY_NE' 등 ]

 

options는 원하는 항목에 대해서 아래 Structure Name 을 선택하여 구성하면 된다.

selection options 의 종류 Structure.

 

구성 방법은 다음과 같다.

DATA: ls_sscr_opt_list TYPE sscr_opt_list,
      ls_sscr_ass_list  type SCR_ASS,
      ls_restriction   TYPE sscr_restrict.

* 'SELOP_EQ' 라는 이름과 EQ만 허용
ls_sscr_opt_list-name = 'SELOP_EQ'.
ls_sscr_opt_list-options-eq = 'X'.

* 만든 option list를 restriction 의 opt_list_tab에 append.
APPEND ls_sscr_opt_list TO ls_restrict-opt_list_tab.

* New Syntax 선언 방법 ( ass_tab 은 아래 추가 설정 )
DATA(ls_restriction) = VALUE sscr_restrict(
                          opt_list_tab = VALUE #( ( name = 'SELOP_EQ'    options = VALUE #( eq = 'X' ) ) )
                          ass_tab      = VALUE #(  ) ).

 

해당 코드는 'SELOP_EQ' 라는 이름을 가지고 selection option 은 EQ만 허용하는 opt_list_tab를 설정한 것이다.

반응형

2. ASS_TAB

KIND는 특정 유형의 필드를 제어할지 나타내는 것이다.

A : ALL(모든필드)를 제어한다.

B: Block(블락)을 제어한다.

S: Select-option(선택옵션) 제어 사용.

 

나는 Select-option을 제어할 것이기에 Kind = 'S'를 설정할 것이다. 

 

NAME은 제어할 필드의 이름이다. [ ex) s_bukrs, p_bukrs ]

 

SG_MAIN은 메인 선택기호 (Sign)이며, SG_ADDY 는 추가 선택기호이다.

'I' = Include로 포함을 의미한다.

'*'을 넣어주면 Include, Exclude 둘다 적용 된다.

 

OP_MAIN은 메인 option list 이름이며, OP_ADDY는 추가 option list 이다. 

해당 값은 위에 설정했던 OPT_LIST_TAB에 있는 option_list_tab-name 이다.

 

구성방법은 다음과 같다.

DATA: ls_sscr_opt_list TYPE sscr_opt_list,
      ls_sscr_ass_list  type SCR_ASS,
      ls_restriction   TYPE sscr_restrict.

* 'SELOP_EQ' 라는 이름과 EQ만 허용
ls_sscr_opt_list-name = 'SELOP_EQ'.
ls_sscr_opt_list-options-eq = 'X'.

* 만든 option list를 restriction 의 opt_list_tab에 append.
APPEND ls_sscr_opt_list TO ls_restrict-opt_list_tab.

* ass_list 구성 후 ls_restriction의 ass_tab에 append.
ls_sscr_ass_list-kind = 'S'.
ls_sscr_ass_list-name = 'S_BUKRS'
ls_sscr_ass_list-sg_main = 'I'.
ls_sscr_ass_list-op_main = 'SELOP_EQ'.

APPEND ls_sccr_ass_list TO ls_restriction-ass_tab.


* New Syntax 선언 방법
DATA(ls_restriction) = VALUE sscr_restrict(
                          opt_list_tab = VALUE #( ( name = 'SELOP_EQ'    options = VALUE #( eq = 'X' ) ) )
                          ass_tab      = VALUE #( ( kind = 'S' name = 'S_BUKRS' sg_main = 'I'  op_main = 'SELOP_EQ' ) ) ).
                          
CALL FUNCTION 'SELECT_OPTIONS_RESTRICT'
    EXPORTING
      restriction  = ls_restriction

 

사용방법은 위의 코드와 같다.

 

그러면 실행해서 어떻게 제어가 되는지 확인해보자.

 

위에 코드 실행 시 아래 화면과 같이 제어가 된다.

sg_main = 'I' , select-options는 EQ만 사용.

 

그러면 sg_main = '*' 로 변경하면 어떻게 되는지 확인해보자.

sg_main = '*', select-options는 EQ만 사용.

 

Single Value가 아니라 Range를 넣고 싶으면, 

  DATA(ls_restriction) = VALUE sscr_restrict(
                          opt_list_tab = VALUE #( ( name = 'SELOP_EQ'    options = VALUE #( eq = 'X' ) )
                                                  ( name = 'SELOP_BT'    options = VALUE #( bt = 'X' ) ) )
                          ass_tab      = VALUE #( ( kind = 'S' name = 'S_BUKRS' sg_main = 'I'  op_main = 'SELOP_BT' ) ) ).

 

사용할 op_main을 BT로 설정한 list_tab 이름으로 변경해주면 된다.

Select Ranges로 변경된 것을 확인.

위와 동일하게 sg_main = '*'로 하면 select ranges탭과 exclude select ranges 탭 2개가 생긴다.

 

  DATA(ls_restriction) = VALUE sscr_restrict(
                          opt_list_tab = VALUE #( ( name = 'SELOP_EQ'    options = VALUE #( eq = 'X' ) )
                                                  ( name = 'SELOP_BT'    options = VALUE #( bt = 'X' ) ) )
                          ass_tab      = VALUE #( ( kind = 'S' name = 'S_BUKRS' sg_main = 'I'  op_main = 'SELOP_BT' op_addy = 'SELOP_EQ' ) ) ).

 

op_addy에 SELOP_EQ를 넣으면 select single values와 select ranges 탭으로 설정 가능하다.

Select single value와 select ranges 탭으로만 설정.

 

마지막으로 selection options에 값 추가해보자.

  DATA(ls_restriction) = VALUE sscr_restrict(
                          opt_list_tab = VALUE #( ( name = 'SELOP_EQ'    options = VALUE #( eq = 'X' ) )
                                                  ( name = 'GE&NE'       options = VALUE #( ge = 'X' ne = 'X' ) ) )
                          ass_tab      = VALUE #( ( kind = 'S' name = 'S_BUKRS' sg_main = 'I'  op_main = 'SELOP_EQ' op_addy = 'GE&NE' ) ) ).

 

selection options 제어 화면

 

opt_list_tab 구성 시 제어하기를 원하는 필드를 추가하여 위와 같이 설정해주면

 

위 화면과 같이 seletion options를 제어 할 수 있다.

반응형

+ Recent posts