[SAP/ABAP] Possible Entry, Search Help - Abap Dic
[SAP/ABAP] Possible Entry, Search Help
출저: https://www.tutorialspoint.com/sap_abap/sap_abap_search_help.htm http://sapjoy.co.kr/abappds/57489 http://blog.daum.net/_blog/BlogTypeView.do?blogid=0OK62&articleno=776&categoryId=12®dt=20180130180253 Possible Entry를 띄우는 3가지 방법이
graduation.tistory.com


REPORT Z_USER_F4_DEMO.
*&---------------------------------------------------------------------*
*& TABLES: 데이터 딕셔너리 테이블 선언
*&---------------------------------------------------------------------*
TABLES: SFLIGHT. " 항공편 테이블
TABLES: SBOOK. " 예약 테이블
*&---------------------------------------------------------------------*
*& TYPES: F4 도움말을 위한 사용자 정의 구조체 및 테이블 타입 정의
*&---------------------------------------------------------------------*
TYPES: BEGIN OF ty_f4_sflight,
carrid TYPE sflight-carrid,
connid TYPE sflight-connid,
END OF ty_f4_sflight.
TYPES: tt_f4_sflight TYPE STANDARD TABLE OF ty_f4_sflight.
* SFLIGHT와 SBOOK 테이블을 JOIN하기 위한 구조체 및 테이블 타입
TYPES: BEGIN OF ty_joined_data,
carrid TYPE sflight-carrid,
connid TYPE sflight-connid,
fldate TYPE sflight-fldate,
bookid TYPE sbook-bookid,
customid TYPE sbook-customid,
END OF ty_joined_data.
TYPES: tt_joined_data TYPE STANDARD TABLE OF ty_joined_data.
*&---------------------------------------------------------------------*
*& DATA: 내부 테이블 및 작업 영역 선언
*&---------------------------------------------------------------------*
* F4 도움말을 위한 내부 테이블 (사용자 정의 타입으로 선언)
DATA: gt_f4_sflight TYPE tt_f4_sflight.
DATA: gt_joined_data TYPE tt_joined_data WITH HEADER LINE. " JOIN 데이터를 위한 테이블 선언 (헤더 라인 추가)
* F4 팝업 표시를 위한 내부 테이블
DATA: BEGIN OF lt_display_data OCCURS 0,
value TYPE c LENGTH 30,
END OF lt_display_data.
* F4 도움말 필드 속성 정의
DATA: lt_fields TYPE TABLE OF dfies,
ls_field LIKE LINE OF lt_fields.
*&---------------------------------------------------------------------*
*& SELECTION-SCREEN: 사용자 입력 화면 정의
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001. " 블록 시작
PARAMETERS: p_carr1 TYPE sflight-carrid, " 'AA' 파라미터
p_carr2 TYPE sflight-carrid. " 'LH' 파라미터
SELECTION-SCREEN END OF BLOCK B1. " 블록 끝
*&---------------------------------------------------------------------*
*& INITIALIZATION: 초기값 설정
*&---------------------------------------------------------------------*
INITIALIZATION.
" 프로그램 시작 시 초기값 설정 로직
p_carr1 = 'LH'.
p_carr2 = 'AA'.
*&---------------------------------------------------------------------*
*& AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_CARR1: F4 도움말 이벤트
*&---------------------------------------------------------------------*
* p_carr1 파라미터에 대한 F4 도움말을 실행하는 이벤트
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_carr1.
PERFORM f4_for_carr1.
*&---------------------------------------------------------------------*
*& AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_CARR2: F4 도움말 이벤트
*&---------------------------------------------------------------------*
* p_carr2 파라미터에 대한 F4 도움말을 실행하는 이벤트
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_carr2.
PERFORM f4_for_carr2.
*&---------------------------------------------------------------------*
*& START-OF-SELECTION: 메인 처리 로직 시작
*&---------------------------------------------------------------------*
START-OF-SELECTION.
WRITE: / '선택된 첫 번째 항공사 코드는:', p_carr1.
WRITE: / '선택된 두 번째 항공사 코드는:', p_carr2.
*&---------------------------------------------------------------------*
*& Form routines
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form F4_FOR_CARR1
*&---------------------------------------------------------------------*
* p_carr1 파라미터에 대한 F4 도움말 로직 ('AA' 데이터 조회)
*----------------------------------------------------------------------*
FORM f4_for_carr1.
DATA: lt_return_tab TYPE STANDARD TABLE OF ddshretval.
CLEAR gt_f4_sflight.
" 'AA'에 해당하는 항공사 목록 조회
SELECT carrid connid
FROM sflight
INTO TABLE gt_f4_sflight
WHERE carrid = 'AA'
ORDER BY carrid.
IF sy-subrc = 0.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'CARRID'
dynprofield = 'P_CARR1'
value_org = 'S'
TABLES
value_tab = gt_f4_sflight
return_tab = lt_return_tab.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form F4_FOR_CARR2
*&---------------------------------------------------------------------*
* p_carr2 파라미터에 대한 F4 도움말 로직 ('LH' 데이터 조회)
* SFLIGHT와 SBOOK 테이블 LEFT OUTER JOIN 후 데이터 가공
*----------------------------------------------------------------------*
FORM f4_for_carr2.
DATA: lt_return_tab TYPE STANDARD TABLE OF ddshretval.
" 1. F4 도움말에 표시할 필드 정의
CLEAR lt_fields.
CLEAR ls_field.
" 필드 속성을 명확하게 지정
ls_field-fieldname = 'CARRID'.
ls_field-intlen = 3.
ls_field-outputlen = 3.
ls_field-scrtext_s = '항공사'.
ls_field-scrtext_m = '항공사 코드'.
ls_field-scrtext_l = '항공사 코드'.
APPEND ls_field TO lt_fields.
ls_field-fieldname = 'CONNID'.
ls_field-intlen = 4.
ls_field-outputlen = 4.
ls_field-scrtext_s = '항공편'.
ls_field-scrtext_m = '항공편 번호'.
ls_field-scrtext_l = '항공편 번호'.
APPEND ls_field TO lt_fields.
ls_field-fieldname = 'FLDATE'.
ls_field-intlen = 30.
ls_field-outputlen = 30.
ls_field-scrtext_s = '비행일'.
ls_field-scrtext_m = '비행 날짜'.
ls_field-scrtext_l = '비행 날짜'.
APPEND ls_field TO lt_fields.
ls_field-fieldname = 'BOOKID'.
ls_field-intlen = 30.
ls_field-outputlen = 30.
ls_field-scrtext_s = '예약 ID'.
ls_field-scrtext_m = '예약 번호'.
ls_field-scrtext_l = '예약 번호'.
APPEND ls_field TO lt_fields.
ls_field-fieldname = 'CUSTOMID'.
ls_field-intlen = 20.
ls_field-outputlen = 20.
ls_field-scrtext_s = '고객 ID'.
ls_field-scrtext_m = '고객 ID'.
ls_field-scrtext_l = '고객 ID'.
APPEND ls_field TO lt_fields.
" 2. SFLIGHT와 SBOOK을 LEFT OUTER JOIN하여 데이터 조회
CLEAR gt_joined_data.
SELECT a~carrid a~connid a~fldate b~bookid b~customid
FROM sflight AS a
LEFT OUTER JOIN sbook AS b ON a~carrid = b~carrid
AND a~connid = b~connid
AND a~fldate = b~fldate
INTO TABLE gt_joined_data
WHERE a~carrid = 'LH'
UP TO 100 ROWS.
" 3. 데이터 가공
CLEAR lt_display_data.
LOOP AT gt_joined_data. " WITH HEADER LINE으로 선언했으므로 INTO 절 생략 가능
lt_display_data-value = gt_joined_data-carrid.
APPEND lt_display_data.
lt_display_data-value = gt_joined_data-connid.
APPEND lt_display_data.
lt_display_data-value = gt_joined_data-fldate.
APPEND lt_display_data.
lt_display_data-value = gt_joined_data-bookid.
APPEND lt_display_data.
lt_display_data-value = gt_joined_data-customid.
APPEND lt_display_data.
ENDLOOP.
" 4. F4 함수 호출
IF sy-subrc = 0.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'CARRID'
dynprofield = 'P_CARR2'
value_org = 'C'
TABLES
value_tab = lt_display_data " 가공된 테이블 사용
field_tab = lt_fields
return_tab = lt_return_tab.
ENDIF.
ENDFORM.
참조
'IT > SAP' 카테고리의 다른 글
| [ABAP] Object-Oriented Programing (4) | 2025.08.28 |
|---|---|
| [ABAP] Structure 구성 요소 가져오기(cl_abap_typedescr, cl_abap_structdescr) (0) | 2025.05.29 |
| Classical way to ABAP OO style of coding (0) | 2025.04.22 |
| [BC] SAP ABAP 테스트 서버 가지고 놀기 (0) | 2024.04.24 |
| [BC] SAP Memory Management(3) - 실습, RSMEMORY, Troubleshooting (0) | 2024.04.15 |