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없을 경우에는 순서에 맞게 만들어주고,

다음과 같이 CLASSMETHOD설정해 주자.

 

# 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