300x250
728x90
시작하기 전
# 예제 중 하나인 다음과 같은 ALV가 있다.
# 고객번호와 B/P 고객 필드 사이에 Button(버튼)을 추가해 보자.
# 이미 ALV와 기본 SQL은 다 되어있는 상태로 진행하기 때문에 참고 바란다.
SAP ALV LIST 버튼 추가하기 전 - 스트럭처 변경
# 1. 이미 있는 스트럭처( ZSBOOK_GJ )에 고객번호와 고객 유형 사이에 LTEXT( ICON_D )라는 필드를 넣어보자.
# 2. 실행을 시켜보면 다음과 같이 나온다.
TOP 참고
SAP ALV LIST 버튼 추가하기 순서.
1. LTEXT 필드에 ICON 추가.
2. 필드 카탈로그를 통해서 버튼 모양 추가. ( 중요 )
3. Class Event을 이용해서 버튼 기능 로직. ( 중요 )
4. Class Event 버튼 기능 활성화. ( 중요 )
#1. LTEXT 필드에 ICON 추가.
( START-OF-SELECTION )
# 자신이 넣고 싶은 아이콘을 고른 후? 다음과 같이 넣어주면 된다.
실행화면
#2. 필드 카탈로그를 통해서 버튼 모양 추가. ( 중요 )
PROCESS BEFORE OUTPUT( PBO )
# FIELD CATALOG을 통한 LTEXT 필드 변경
# 자세한 내용은 넘어가겠다.
#1. LTEXT ( 필드 명 )을 변경해 보자.
#2. LTEXT 필드를 ( 가운데 정렬 )로 설정하자.
# 중간 점검.
#3. LTEXT 버튼 모양 추가 ( 중요 )
# 실행.
DATA:
L_TABIX TYPE SY-TABIX.
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
I_BUFFER_ACTIVE = 'X'
I_BYPASSING_BUFFER = 'X'
I_STRUCTURE_NAME = 'ZSBOOK_GJ'
I_INTERNAL_TABNAME = 'ZSBOOK_GJ'
CHANGING
CT_FIELDCAT = GT_FDCAT01.
LOOP AT GT_FDCAT01 INTO DATA(LS_FDCAT).
L_TABIX = SY-TABIX.
** 컬럼명설정
CASE LS_FDCAT-FIELDNAME.
WHEN 'LTEXT'.
LS_FDCAT-COLTEXT =
LS_FDCAT-SCRTEXT_S =
LS_FDCAT-SCRTEXT_M =
LS_FDCAT-SCRTEXT_L =
LS_FDCAT-SELTEXT =
LS_FDCAT-REPTEXT = '고객 의견'.
ENDCASE.
* 정렬설정
CASE LS_FDCAT-FIELDNAME.
WHEN 'LTEXT'.
LS_FDCAT-JUST = 'C'.
ENDCASE.
* 버튼 설정
CASE LS_FDCAT-FIELDNAME.
WHEN 'LTEXT'.
LS_FDCAT-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_BUTTON.
ENDCASE.
MODIFY GT_FDCAT01 FROM LS_FDCAT
INDEX L_TABIX.
CLEAR:
LS_FDCAT.
ENDLOOP.
#3. Class Event을 이용해서 버튼 기능 로직. ( 순서 중요 )
# INCLUDE ZABAP11_REPORTP01 => CLASS.... DEFINITION 정의 로직
# INCLUDE ZABAP11_REPORTA01 => #2. ( PBO ) 설정한 로직들.
# 순서는 항상 CLASS가 위에 있어야 한다.
( 아니면 에러 뜸 )
#1. INCLOUD가 없을 경우에는 순서에 맞게 만들어주고,
다음과 같이 CLASS와 METHOD을 설정해 주자.
# PERFORM ALV_CL_BUTTON_CLICK01 만들어주자.
# 여기서 사용되는
ES_COL_ID
ES_ROW_NO
는 스탠더드에서 지원해 주는 매개변수이기 때문에 참고 바란다.
# 매개변수 확인하는 방법은 EVENT BUTTON_CLICK을 더블 클릭해 보자.
# BUTTON_CLICK 클릭 후, 매개변수 버튼을 클릭하자.
# 다음과 같이 매개변수를 확인할 수 있다.
CLASS LCL_EVENT_RECEIVER01 DEFINITION.
PUBLIC SECTION.
* 셀버튼클릭
METHODS HANDLE_BUTTON_CLICK01
FOR EVENT BUTTON_CLICK OF CL_GUI_ALV_GRID
IMPORTING
ES_COL_ID
ES_ROW_NO.
ENDCLASS. "(LCL_EVENT_RECEIVER DEFINITION) "
*----------------------------------------------------------------------*
* LOCAL CLASSES: IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS LCL_EVENT_RECEIVER01 IMPLEMENTATION.
* 셀버튼클릭
METHOD HANDLE_BUTTON_CLICK01.
PERFORM ALV_CL_BUTTON_CLICK01
USING
ES_COL_ID
ES_ROW_NO.
ENDMETHOD. "HANDLE_BUTTON_CLICK01"
ENDCLASS. "LCL_EVENT_RECEIVER IMPLEMENTATION"
DATA:
G_EVENT_RECEIVER01 TYPE REF TO LCL_EVENT_RECEIVER01.
#2. PERFORM안에 들어가서 로직을 미리 만들어보자.
# 버튼 클릭 했을 때, 값이 있으면 디버깅
FORM ALV_CL_BUTTON_CLICK01
USING
PS_COL_ID TYPE LVC_S_COL
PS_ROW_NO TYPE LVC_S_ROID.
READ TABLE GT_LIST01
INDEX PS_ROW_NO-ROW_ID
TRANSPORTING NO FIELDS.
IF SY-SUBRC EQ 0.
BREAK-POINT.
ENDIF.
ENDFORM.
#4. Class Event 버튼 기능 활성화. ( 중요 )
PROCESS BEFORE OUTPUT( PBO )
# TOP 참고.
#1. PBO 위에서 설정했던 필드 카탈로그 아래에 설정해 보자.
CREATE OBJECT G_EVENT_RECEIVER01.
SET HANDLER
* Button Click
G_EVENT_RECEIVER01->HANDLE_BUTTON_CLICK01
FOR G_ALV_GRID01.
위에서 설정했던 PBO 로직은
DATA:
L_TABIX TYPE SY-TABIX.
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
I_BUFFER_ACTIVE = 'X'
I_BYPASSING_BUFFER = 'X'
I_STRUCTURE_NAME = 'ZSBOOK_GJ'
I_INTERNAL_TABNAME = 'ZSBOOK_GJ'
CHANGING
CT_FIELDCAT = GT_FDCAT01.
LOOP AT GT_FDCAT01 INTO DATA(LS_FDCAT).
L_TABIX = SY-TABIX.
** 컬럼명설정
CASE LS_FDCAT-FIELDNAME.
WHEN 'LTEXT'.
LS_FDCAT-COLTEXT =
LS_FDCAT-SCRTEXT_S =
LS_FDCAT-SCRTEXT_M =
LS_FDCAT-SCRTEXT_L =
LS_FDCAT-SELTEXT =
LS_FDCAT-REPTEXT = '고객 의견'.
ENDCASE.
* 정렬설정
CASE LS_FDCAT-FIELDNAME.
WHEN 'LTEXT'.
LS_FDCAT-JUST = 'C'.
ENDCASE.
* 버튼 설정
CASE LS_FDCAT-FIELDNAME.
WHEN 'LTEXT'.
LS_FDCAT-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_BUTTON.
ENDCASE.
MODIFY GT_FDCAT01 FROM LS_FDCAT
INDEX L_TABIX.
CLEAR:
LS_FDCAT.
ENDLOOP.
CREATE OBJECT G_EVENT_RECEIVER01.
SET HANDLER
* Button Click
G_EVENT_RECEIVER01->HANDLE_BUTTON_CLICK01
FOR G_ALV_GRID01.
실행해 보자.
다음과 같이 디버깅이 걸리면 성공이다.
728x90
'.ABAP > ..ALV' 카테고리의 다른 글
SAP ALV SubTotal(소계) 정리 (4) | 2024.02.21 |
---|---|
SAP ALV Blank(공백) 정리 (1) | 2024.01.04 |
SAP TOP OF PAGE( ALV ) 정리 (0) | 2023.08.13 |
SAP ALV Split(화면 분할) 정리 (6) | 2023.08.12 |
SAP ALV Buffer 초기화 (2) | 2022.09.16 |