SAP에서 Function 키 F4를 눌렀을 때 동작하는 탐색 도움말(Search Help) 기능은 정말 편리한 기능 중에 하나 입니다.
특정 필드의 수 없이 많은 데이터 중에 원하는 필드 값을 찾고자 할 때 F4 탐색 도움말 기능으로 쉽게 필요한 데이터를 찾을 수 있습니다.
이전의 포스팅 글 중에 SAP 탐색도움말(Search Help)의 조회 리스트 최대 적중 수를 변경하는 방법에 대한 글을 작성한 적이 있습니다. 탐색 도움말(F4, Search Help)에 대해 좀 더 알고 싶은 경우 이 글도 참고해 보시면 좋습니다.
SAP 시스템에서 기본적으로 제공하는 F4 탐색 도움말(Search Help)과 별도로 ABAP 프로그램에서 직접 F4 탐색 도움말(Search help) 기능을 추가할 수 있습니다.
ABAP에서 탐색 도움말 기능을 추가하는 방법은 여러가지 방법이 있지만 ALV를 사용해서 만드는 방법을 많이 활용하는 것 같습니다.
이번 글에서는 SAP ALV를 사용한 ABAP F4 도움말(Search Help) 이벤트 구현 방법에 대해 알아보겠습니다.
ALV를 사용한 ABAP F4 도움말 이벤트 구현 방법
▶ 선택 화면의 필드에서 F4 도움말을 사용하기 위해서 ‘REUSE_ALV_POPUP_TO_SELECT‘ Function 모듈을 사용하는 방법입니다.
REPORT YTEST0001 . TYPE-POOLS: SLIS. *인터널테이블 및 Work Area 선언 DATA: GT_SPFLI TYPE TABLE OF SPFLI. DATA: WA_SPFLI TYPE SPFLI. DATA: WA_SELFIELD TYPE SLIS_SELFIELD. *————————————————————–* *Selection-Screen *————————————————————–* PARAMETER: P_CARRID TYPE SPFLI-CARRID. *————————————————————–* *Selection-Screen on Value-Request *————————————————————–* AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_CARRID. CLEAR: WA_SELFIELD. * Get data SELECT * FROM SPFLI INTO TABLE GT_SPFLI. * CARRID 중복 제거 DELETE ADJACENT DUPLICATES FROM GT_SPFLI COMPARING CARRID. * ALV popup CALL FUNCTION ‘REUSE_ALV_POPUP_TO_SELECT’ EXPORTING I_TABNAME = ‘GT_SPFLI’ ” 인터널테이블명 I_STRUCTURE_NAME = ‘SPFLI’ IMPORTING ES_SELFIELD = WA_SELFIELD TABLES T_OUTTAB = GT_SPFLI ” ALV로 보여줄 인터널테이블 EXCEPTIONS PROGRAM_ERROR = 1 OTHERS = 2. *선택한 라인 인덱스를 사용하여 인터널테이블의 데이터를 가져와서 처리 READ TABLE GT_SPFLI INTO WA_SPFLI INDEX WA_SELFIELD-TABINDEX. IF SY-SUBRC = 0. * P_CARRID = WA_SELFIELD-VALUE. “선택한 필드 위치의 VALUE 데이터를 가져올 때 P_CARRID = WA_SPFLI-CARRID. “선택한 라인의 CARRID 데이터를 가져올 때 ENDIF. |
▼ 위 ABAP 프로그램 실행 결과 입니다.
- SELECTION-SCREEN PARAMETER의 ‘P_CARRID’ 필드의 ALV F4 도움말 입니다.
- SPFLI 테이블의 모든 필드를 ALV 필드로 출력됩니다.
- 화면 하단에 ALV의 기본 Function code가 모두 표시되고 있습니다.
ALV를 사용한 ABAP F4 도움말 구현 – 필요한 필드 및 Function code만 표시
앞 단락의 예제는 가장 간단하게 ALV로 ABAP F4 도움말을 구현한 예제입니다.
이번에는 ALV 필드에 필요한 필드만 표시하고, 하단에 표시되는 버튼(Funtion code)도 선택 및 취소 버튼만 표시하는 예제를 살펴 보겠습니다.
REPORT YTEST0001 . TYPE-POOLS: SLIS. *인터널테이블 및 Work Area 선언 DATA: GT_SPFLI TYPE TABLE OF SPFLI. DATA: WA_SPFLI TYPE SPFLI. DATA: WA_SELFIELD TYPE SLIS_SELFIELD. *필드 카탈로그 구조 선엄 DATA: LT_FCAT TYPE SLIS_T_FIELDCAT_ALV, LS_FCAT TYPE SLIS_FIELDCAT_ALV. * ALV에서 제외할 버튼 테이블 선언(Excluding ALV function code) DATA: LT_EXCLUDING TYPE SLIS_T_EXTAB. DATA: LS_EXCLUDING LIKE LINE OF LT_EXCLUDING. * Field catalog macro DEFINE FIELD_CAT. LS_FCAT-FIELDNAME = &1. LS_FCAT-SELTEXT_L = &2. LS_FCAT-SELTEXT_M = &2. LS_FCAT-SELTEXT_S = &2. APPEND LS_FCAT TO LT_FCAT. CLEAR LS_FCAT. END-OF-DEFINITION. *————————————————————–* *Selection-Screen *————————————————————–* PARAMETER: P_CARRID TYPE SPFLI-CARRID. *————————————————————–* *Selection-Screen on Value-Request *————————————————————–* AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_CARRID. *매크로 방식으로 Field catalog 지정 CLEAR: LT_FCAT, LT_FCAT[]. FIELD_CAT: ‘CARRID’ ‘항공사 ID’, ‘CONNID’ ‘운항연결 ID’, ‘CITYFROM’ ‘Departure city’. *—————————————- * 제외할 ALV 버튼 지정(Excluding the function code) LS_EXCLUDING = ‘&ETA’. APPEND LS_EXCLUDING TO LT_EXCLUDING. LS_EXCLUDING = ‘&OUP’. APPEND LS_EXCLUDING TO LT_EXCLUDING. LS_EXCLUDING = ‘&ODN’. APPEND LS_EXCLUDING TO LT_EXCLUDING. LS_EXCLUDING = ‘&ILT’. APPEND LS_EXCLUDING TO LT_EXCLUDING. LS_EXCLUDING = ‘&OL0’. APPEND LS_EXCLUDING TO LT_EXCLUDING. LS_EXCLUDING = ‘%SC’. APPEND LS_EXCLUDING TO LT_EXCLUDING. LS_EXCLUDING = ‘%SC+’. APPEND LS_EXCLUDING TO LT_EXCLUDING. *—————————————- CLEAR: WA_SELFIELD. * Get data SELECT CARRID CONNID CITYFROM FROM SPFLI INTO CORRESPONDING FIELDS OF TABLE GT_SPFLI. * CARRID 중복 제거 DELETE ADJACENT DUPLICATES FROM GT_SPFLI COMPARING CARRID. * ALV popup CALL FUNCTION ‘REUSE_ALV_POPUP_TO_SELECT’ EXPORTING I_TABNAME = ‘GT_SPFLI’ ” Internal table name * I_STRUCTURE_NAME = ‘SPFLI’ IT_FIELDCAT = LT_FCAT IT_EXCLUDING = LT_EXCLUDING IMPORTING ES_SELFIELD = WA_SELFIELD TABLES T_OUTTAB = GT_SPFLI ” Internal table which contains entries EXCEPTIONS PROGRAM_ERROR = 1 OTHERS = 2. *선택한 라인 인덱스를 사용하여 인터널테이블의 데이터를 가져와서 처리 READ TABLE GT_SPFLI INTO WA_SPFLI INDEX WA_SELFIELD-TABINDEX. IF SY-SUBRC = 0. * P_CARRID = WA_SELFIELD-VALUE. “선택한 필드 위치의 VALUE 데이터를 가져올 때 P_CARRID = WA_SPFLI-CARRID. “선택한 라인의 CARRID 데이터를 가져올 때 ENDIF. |
▼ 위 ABAP 프로그램 실행 결과 화면입니다.
- SPFLI 테이블에서 CARRID, CONNID, CITYFROM 3개의 필드만 가져와서 ALV를 만들었습니다.
- ALV 하단의 버튼(Function code)는 선택과 취소 버튼 2개만 표시되도록 다른 Function code는 Excluding 하였습니다.
REUSE_ALV_POPUP_TO_SELECT 주요 매개변수(Parameter)
▶ REUSE_ALV_POPUP_TO_SELECT Function 모듈의 Import 주요 매개변수 입니다.
- I_TITLE : Dialog box title(대화 상자의 제목)
- I_SELECTION : (X) = Selection possible, ( ) = Display – 기본값: ‘X’
- I_ZEBRA : Line output with alternating color – 기본값: SAPCE
- I_SCREEN_START_COLUMN : Dialog box 위치(가로) – 기본값: 0
- I_SCREEN_START_LINE : Dialog box 위치(세로) – 기본값: 0
- I_SCREEN_END_COLUMN : Dialog box 위치(가로 크기) – 기본값: 0
- I_SCREEN_END_LINE : Dialog box 위치(세로 크기) – 기본값: 0
- I_TABNAME : Table name with chosen values
- I_STRUCTURE_NAME : Internal output table structure name
- IT_FIELDCAT : Field catalog with field descriptions
- IT_EXCLUDING : Table of inactive function codes
마무리
이상으로 REUSE_ALV_POPUP_TO_SELECT Function module을 사용하여 인터널테이블의 데이터를 ALV로 형태의 POPUP 창으로 만들어 F4 도움말 이벤트를 구현하는 방법에 대해 알아보았습니다.
아마 실제로 구현할 때는 두 번째 방법처럼 필요한 필드로 ALV 필드를 만들고, 버튼도 불필요한 버튼을 제거하고 사용하게 됩니다.
예제에서 Field catalog 지정을 DEFINE을 사용하여 ABAP 매크로로 처리하였습니다.
ABAP Macro에 대한 설명은 SAP ABAP Macro 사용 방법(아밥 매크로 정의 및 사용법) 글을 참고해 보시기 바랍니다.
※ 함께 읽으면 도움이 될 만한 다른 포스팅 글입니다.
♥ 이 글이 도움이 되었기를 바랍니다. ^-^
댓글로 흔적을 남겨 주세요.