[ABAP] Dropdown ListBox / 드롭다운 리스트박스 - PBO를 통한 LIST 구현

규벨롭·2023년 5월 25일
2

ABAP

목록 보기
1/3
post-thumbnail

이번 글에선 Screen Painter를 사용해 변수에 ListBox를 사용해 값을 할당하는 법에 대해 설명해보겠습니다.

예시를 위해 저는 SCUSTOM Table에 있는 값들을 사용했고 ID 필드를 KEY값으로 NAME 필드를 TEXT값으로 지정했습니다.

변수선언

가장 먼저 해야할 것은 ListBox를 통해 값을 받아올 변수와 프로그램 내에서 사용할 Global 변수들을 선언해야 합니다.

*ListBox 변수 선언
DATA: GV_LIST TYPE CHAR50,
      GT_LIST TYPE TABLE OF SCUSTOM,
      GS_LIST LIKE LINE OF GT_LIST.

*리스트 박스 구현
DATA: LIST  TYPE VRM_VALUES,
      VALUE LIKE LINE OF LIST.

*User Command 선언
DATA: OK_CODE TYPE SY-UCOMM.

Screen Painter

해당 리스트박스를 사용할 스크린에서 스크린페인터로 리스트박스를 그려줍니다.

드롭다운 탭에서 "Listbox with key" 옵션을 선택해야 합니다.

데이터 가져오기

리스트박스에서 보여줄 데이터를 SELECT 문을 사용해 미리 선언해둔 테이블에 담아서 사용합니다.

SELECT *
    FROM SCUSTOM
    INTO CORRESPONDING FIELDS OF TABLE GT_LIST
    WHERE COUNTRY = 'GB'.

PBO 구현

해당 스크린이 출력되기 전 Listbox에 값을 할당해야하기 때문에 해당 Screen의 PBO에 INIT_LISTBOX 모듈을 생성합니다.

MODULE INIT_LISTBOX OUTPUT.

  TYPE-POOLS VRM.

  CLEAR: LIST.

  LOOP AT GT_LIST INTO GS_LIST.
    VALUE-KEY = GS_LIST-ID.
    VALUE-TEXT = GS_LIST-NAME.
    APPEND VALUE TO LIST.
    CLEAR: GS_LIST, VALUE.
  ENDLOOP.

  CALL FUNCTION 'VRM_SET_VALUES'
    EXPORTING
      ID     = 'GV_LIST'
      VALUES = LIST
*   EXCEPTIONS
*     ID_ILLEGAL_NAME       = 1
*     OTHERS = 2
    .
  IF SY-SUBRC <> 0.
* Implement suitable error handling here
  ENDIF.

ENDMODULE.

완료화면


이처럼 KEY와 TEXT로 나뉘어 리스트박스가 구현된 것을 확인할 수 있습니다.

TIP들

TEXT값을 반환하려면?

해당 리스트박스는 KEY값 만을 반환하기 떄문에 사용한 변수에는 KEY값만 저장됩니다.
만약 TEXT값을 받아오고 싶다면 LIST 테이블을 KEY을 사용해 READ문을 사용해 TEXT 값을 다시 찾아야 합니다.

  READ TABLE LIST INTO VALUE WITH KEY KEY = GV_LIST.
  IF SY-SUBRC = 0.
    GV_LIST = VALUE-TEXT.
  ENDIF.

Default Value(초기값 설정)

초기값은 해당 변수에 그냥 KEY값만 설정해주면 해당 KEY값으로 알아서 설정이 됩니다.

GV_LIST = GS_LIST-KEY.

EASY ABAP 참조해서 작성하였습니다!
잘못된 부분이나 궁금하신점 댓글 달아주세요!

profile
SAP / ABAP

0개의 댓글