반응형

 

BDC(Batch Data Communication)으로 SAP시스템에서 대량의 데이터를 일괄적으로

 

입력하거나 업데이트하기 위해 사용되는 기술로 수작업으로 데이터를 입력하는 대신 

 

자동화된 방식으로 데이터를 처리할 수 있는 기능이다.

 

 

BDC는 크게 기록(Recording)을 통해 트랜젝션을 기록하고 BDC프로그램을 작성하는 Session Method와

 

작성한 BDC프로그램을 Call Transaction Method 를 실행하는 방법으로 구성되어있다.

 

 

1. T-Code : SHDB 실행 후 기록.

SHDB 화면 ( Recording Overview)

 

해당프로그램에서 New recording을 클릭.

Create Recording 화면

 

Recording 명을 작성하고 기록할 T-Code입력 후 start recording을 눌러 실행한다.

 

내가 프로그램을 자동화 처리하기 위한 하나의 과정을 진행하고 종료하면 다음과 같이 행위에 대한 결과가 저장된다.

 

Recording 결과

반응형

2. 코드작성 

DATA : lt_bdcdata TYPE TABLE OF bdcdata WITH EMPTY KEY.

 lv_opt = VALUE ctu_params( dismode = 'E' ).
 lt_bdcdata = VALUE #(
                      ( program = 'RDDM0001' dynpro = '0200' dynbegin = 'X' )
                      ( fnam    = 'BDC_CURSOR'           fval = 'TRDYSE01SN-TR_TRKORR' )
                      ( fnam    = 'TRDYSE01SN-TR_TRKORR' fval = ls_list-trkorr )
                      ( fnam    = 'BDC_OKCODE'           fval = '=SINGLE_LOGS' ) ).

CALL TRANSACTION 'SE01' USING lt_bdcdata OPTIONS FROM lv_opt.

 

RDDM0001이란 프로그램의 화면 0200을 시작하겠다고 선언.

 

위의 기록대로 필요한 값을 bdcdata Type table에 넣어주면 된다.

 

lv_opt 이란 bdc가 작동하면서 화면을 어떻게 보여줄지에 대한 설정이다.

 

                                       'A' : 모든 화면에 대해 조회하면서 트랜잭션 수행 모드

 

                                       'E' : 에러 발생할 경우 해당화면 조회

 

                                       'N' : 화면을 표시하지 않음.

 

보통 'E' 모드를 많이 쓰고, Data 값을 가져오기 위한 경우엔 'N'화면을 많이 사용한다.

 

 

 

더블클릭 or Hotspot 클릭을 이용하여 특정 필드에 대한 Event를 등록하면

 

해당 TROKRR ( Request No)를 가지고 바로 SE01의 Log화면을 띄워주는 걸 확인 할 수 있다.

 

반응형

'SAP > ABAP' 카테고리의 다른 글

[ABAP] SMW0를 이용한 Excel 다운로드  (1) 2024.09.09
[ABAP] Subtotal(소계) 세팅  (1) 2024.09.02
[ABAP] SELECT WITH 구문  (0) 2024.06.24
[ABAP] Pass by Value vs Pass by Reference  (0) 2024.06.16
[ABAP] ALV Grid Event Handler - 2편  (0) 2024.06.11
반응형

 

Excel 을 다운로드 하는 경우가 종종 생긴다.

 

먼저 Download 할 위치를 정해줘야 하는데 SAP 스탠다드 코드를 이용할 수 있다.

 

Method cl_gui_frontend_services=>file_save_dialog를 이용하면 된다.

 

  DATA : lv_file_filter       TYPE string,
         lv_initial_directory TYPE string,
         lv_filename          TYPE string,
         lv_path              TYPE string,
         lv_fullpath          TYPE string.

  lv_filename = 'Template'.
  lv_file_filter = 'Excel File(*.xlsx; *.xls )|*.xlsx; *.xls'.
  lv_initial_directory = 'C:'.
  cl_gui_frontend_services=>file_save_dialog(
    EXPORTING
      default_extension         = 'xlsx'                " Default Extension
      default_file_name         = lv_filename           " Default File Name
      file_filter               = lv_file_filter        " File Type Filter Table
      initial_directory         = lv_initial_directory  " Initial Directory
    CHANGING
      filename                  = lv_filename           " File Name to Save
      path                      = lv_path               " Path to File
      fullpath                  = lv_fullpath           " Path + File Name
    EXCEPTIONS
      cntl_error                = 1                     " Control error
      error_no_gui              = 2                     " No GUI available
      not_supported_by_gui      = 3                     " GUI does not support this
      invalid_default_file_name = 4                     " Invalid default file name
      OTHERS                    = 5.
      
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
       WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
  
  IF lv_fullpath IS INITIAL.
    RETURN.
  ENDIF.

 

위 코드와 같이 작성을 하면 아래와 같이 Download하는 창을 불러올 수 있다.

Excel Download 창

 

Default로 C드라이브 , 제목은 Template고 형식은 Excel로 들어간다.

 

필요에 따라 저장위치, 파일이름, 형식은 변경이 가능

 

lv_fullpath 는 저장위치(path) + 파일이름(File Name)  으로 구성되는 String으로 반환된다.

 

 

자 그러면 이제 Excel 혹은 Excel Template를 SAP 스탠다드에(웹저장소) 등록을 해보자.

 

T-Code : SMW0 실행.

 

SMW0 화면

 

Binary data for WebRFC applications를 선택하고 실행을 눌러준다.

 

Binary data for WebRFC 화면

 

해당 프로그램이 포함된 Package를 넣어주고 Excute(실행) 클릭

반응형

 

Obj. name 과 Description을 작성하고 import 버튼을 눌러 생성해준다.

 

Obj. name은 나중에 select문에 사용된다.

 

Import 클릭 후 화면

 

Import 버튼을 누르면 Excel을 선택하는 창이 나오는데,

 

미리 작성해둔 template excel 파일을 선택하여 등록하면 SAP 스탠다드 웹 저장소에 Upload되면서 저장이 된다.

 

그럼 코드로 돌아와서 해당 파일을 가져오자.

 

DATA : ls_item              TYPE wwwdatatab,
       lv_file              TYPE rlgrap-filename.
       
lv_file = lv_fullpath.

  SELECT SINGLE FROM wwwdata
   FIELDS *
    WHERE objid = 'Z_EXCEL_TEMPLATE'
     INTO CORRESPONDING FIELDS OF @ls_item.             "#EC CI_NOORDER

  CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
    EXPORTING
      key         = ls_item
      destination = lv_file.

  IF ls_item IS INITIAL.
    "File is not exist
    MESSAGE s044 DISPLAY LIKE 'E'.
    EXIT.
  ENDIF.

 

wwwdata 에서 방금 만든 obj.name 의 data를 가져와 

 

CALL FUNCTION 'DOWNLOAD_WEB_OBJECT' 를 사용해서 다운로드를 해주면 

 

기존의 만들어 뒀던 template의 모든 형식그대로 다운로드가 된다.

 

( 날짜 타입, 엑셀 border, Cell style 모두 적용된 상태로 다운 )

 

반응형

'SAP > ABAP' 카테고리의 다른 글

[ABAP] BDC를 활용한 CALL TRANSACTION  (0) 2024.09.10
[ABAP] Subtotal(소계) 세팅  (1) 2024.09.02
[ABAP] SELECT WITH 구문  (0) 2024.06.24
[ABAP] Pass by Value vs Pass by Reference  (0) 2024.06.16
[ABAP] ALV Grid Event Handler - 2편  (0) 2024.06.11
반응형

ALV에서 로직을 이용하여 Subtotal 초기 세팅하는 법에 대해서 알아보자.

 

다음과 같은 List가 있다.

해당 List를 보면 Company Code, Status, Posting Date, Document Date, Document Number는 동일하고

 

전표안에 있는 Line Item들의 고객마다 처리할 금액이 여러 건 있는 케이스다.

 

이럴 경우 전표번호에 따른 금액을 Subtotal(소계) 하여 보여주고 싶을 경우가 생길 것이다.

 

이럴 때 사용하는 Subtotal 에 대해서 알아보겠습니다.

 

먼저 Fieldcatalog 세팅에서 소계를 해줄 필드에대해서 세팅을 해준다.

Fieldcatalog에서 do_sum 세팅

 

해당필드에 do_sum = 'X' (abap_true)로 세팅을 해주면 

do_sum 결과 ALV화면

 

해당 필드에 값들이 모두 더해진 라인이 맨 아래 생긴다.

 

 전표번호를 기준으로 Subtotal이 필요하기에 이 세팅을 해줘야 하는데

 

Sort 세팅에서 넣어줘야한다.

 

Sort 세팅.

 

spos : 정렬 순서를 의미

fieldname : 어떤 필드로 정렬할지

up : 오름차순으로 정렬 (내림차순으로 하고싶은면 down 이다. )

subtot : 해당 필드로 소계를 적용하겠다.

반응형

이렇게 설정을 하고 실행을 해보면

해당 전표 별로 소계가 되어 나오는 걸 알 수 있다.

 

하지만, ALV화면 맨아래 총 합은 모든 전표에 대한 합계이기 때문에 필요없을 수 있다.

 

이럴 경우에는 Layout 설정에 가서 설정해주면 된다.

no_totline = 'X' (abap_true) 로 설정하고 실행하면

no_totline 설정 후 ALV 화면

 

노란색으로 되어있던 전체 합계 라인이 사라진 것을 확인 할 수 있다.

 

그러면 동일 한 필드에 대해서는 전표번호 처럼 합쳐서 나오게 하려면 

 

Sort 세팅에서 묶어주면 해결된다.

Sort 세팅

이렇게 원하는 필드에 대해서 Sort table에 넣어주면 된다.

 

 

이러면 테이블이 보는게 훨씬 깔끔해야지고 가독성이 올라간다.

 

지금까지 세팅한 Sort, layout, fieldcat 은 alv를 불러올 때

 

입력해주는 값 들에 세팅을 해줘야 하며,

 

set_table_for_first_display 가 실행되기 전에 세팅을 해야한다.

 

또한, set_ready_for_input( i_ready_for_input = 0 )

 

필수로 설정해줘야 동일 필드가 합쳐져서 1개로 보인다.

반응형

'SAP > ABAP' 카테고리의 다른 글

[ABAP] BDC를 활용한 CALL TRANSACTION  (0) 2024.09.10
[ABAP] SMW0를 이용한 Excel 다운로드  (1) 2024.09.09
[ABAP] SELECT WITH 구문  (0) 2024.06.24
[ABAP] Pass by Value vs Pass by Reference  (0) 2024.06.16
[ABAP] ALV Grid Event Handler - 2편  (0) 2024.06.11
반응형

 

CTE ( Common Table Expression, 공통 테이블 ) 단일 명령문의 범위 내에 존재하는 명명된 임시 결과 집합이다.

 

이러한 공통 테이블 표현식을 지정하기 위해서 사용되는게 WITH구문이다.

 

CTE 이름은 다른 CTE에서 참조할 있으므로 CTE 다른 CTE 기반으로 정의 있다.

 

또한, CTE 자신을 참조하여 재귀 CTE 정의할 있다.

 

이러한 이유로 복잡한 쿼리를 단순하게 정의 있어 가독성을 높이고 중복을 제거하는데 도움이 된다.

 

WITH구문 사용하는 방법은 다음과 같다.

 

 

WITH +(NAME) AS (

SELECT 쿼리

             ),

 +(NAME) AS (

SELECT 쿼리

 ),

+(NAME) AS (

SELECT 쿼리

)

메인 SELECT 쿼리

 

Name 길이는 최대 30 까지 가능하기에 이름만으로 추론할 있도록 이름으로 설정할 있다.

   또한, 이름앞에 반드시 '+' 기호를 사용해야 한다.

 

다음과 같이 항공편 테이블이 있다고 , WITH구문을 이용하여 데이터를 추출해보자.

 

 

다음과 같이 2개의 임시 View 생성한다.

 

첫번째 (+main_spfli) 메인 테이블 도착이 배정안되어 있는 곳은 제외한 데이터

두번째 (+airline) 메인 테이블에서 항공사, 출발나라 , 거리단위 같은 항목끼리 Group by 하여 운항 거리를 합한 데이터

 

 

이렇게 임시의 View 만들어 Inner Join 통하여 두개의 데이터를 가공할 있다.

 

예시로 2개의 (View 만들었지만, 실제로는 여러 개를 만들 있으며 만들었으면 무조건 사용은 해야한다.

 

실행 결과) 항공사별 출발지가 같은 곳의 최종 거리가 추가된 것을 확인 있다.

 

 

1개의 View 만들 안에서도 Join이나 Union 모두 사용가능 하기에 복잡한 데이터를 가공하기에 매우 유용하게 사용할 있다.

 

ABAP에서 CDS View 이용하여 쿼리를 많이 짜는 방향으로 바꼈는데 WITH 구문을 사용하여 가독성을 높여보자.

 

복잡한 쿼리인 경우 SELECT문이 길어지면서 가독성이 떨어지는데 WITH구문으로 VIEW 이름을

 

용도에 맞게 나눠서 만들기에 가독성이 매우 높아지기 때문에 유지보수에도 도움이 것이다.

 

또한, WITH구문은 본절에서 1 사용될 때는 서브쿼리와 성능차이가 보이지 않지만,

 

WITH구문으로 정의된 테이블이 2번이상 사용될 때에는 내부적으로 메모리에 쿼리의 결과값을 저장하고 반복하여 사용하는 방식으로

 

저장된 결과값을 불러와 실행 수를 줄여주기 때문에 성능의 개선이 있다.

반응형

'SAP > ABAP' 카테고리의 다른 글

[ABAP] SMW0를 이용한 Excel 다운로드  (1) 2024.09.09
[ABAP] Subtotal(소계) 세팅  (1) 2024.09.02
[ABAP] Pass by Value vs Pass by Reference  (0) 2024.06.16
[ABAP] ALV Grid Event Handler - 2편  (0) 2024.06.11
[ABAP] ALV Grid Event Handler - 1편  (0) 2024.06.10
반응형

SAP에서 Class Method Function Module 혹은 Subroutine( Perform )

 

을 작성하다보면 모두 파라미터를 주고받는 방식으로 작성하게 된다.

 

 

이때 Pass by Value Pass by Reference의 차이점을 알아보자.

 

Pass by Value

 

Pass by Value는 실제 파라미터를 보낼 때 복사본을 만들어서 사용한다고 보면 된다.

 

프로시저가 호출되면 파라미터와 반환 값이 초기화 된다.

 

입력 파라미터는 호출 시 실제 파라미터 값을 받지만반환 될 때 초기화가 되기에 

 

Return을 사용할 경우에 값을 전달 받을 수 있다.

 

, 매개변수가 Method Function Module 혹은 Subroutine( Perform ) 안에서 변화가 된다고 해도

 

복사된 입력 파라미터에만 영향을 미치기 때문에 기존 실제 파라미터에는 영향을 주지 않는다.

 

이렇기 때문에 Pass by Value는 대용량 데이터를 처리할 경우 메모리와 시간이 많이 들 수 있는 단점이 있다.

 

Pass by Reference

 

Pass by Reference는 실제 파라미터를 보낼 때 Reference ( Pointer ) 를 포함하여 보낸다고 보면 된다.

 

프로시저에 전달되고 실제 파라미터와 함께 작동하는 경우다.

 

, 매개변수가 Method Function Module 혹은 Subroutine( Perform ) 안에서 변화가 된다면

 

실제 파라미터값도 동일하게 변경된다.

 

그렇기에 Pass by Value에 비해 대용량 데이터 처리를 할 경우 퍼포먼스 측면에서는 확실 히 더 좋은 장점이 있다.

 

다만, Pass by Reference는 실제 데이터 값을 변경시키기 때문에 증간에 결과가 변경될 수 있어

 

잠재적은 부작용을 일으킬 수 가 있어서 주의가 필요하다.

 

Perform 문을 구성할 때 Using / Changing / Tables 를 사용하는데 먼저 이것부터 이해하고 예시를 보겠습니다.

 

Using은 값을 던져주는 것이고,

 

Changing은 값을 던지고 받아오는 것,

 

Tables Table을 넘겨서 받아오는 것으로 이해하면 쉽다.

 

자 그러면 Using Changing을 먼저 이해해보도록 하자.

 

Perform Using vs Changing

다음과 같이 작성을 하고 실행을 해보면 다음과 같은 결과가 나온다.

Using Changing은 결국 값을 변환시키고 내뱉는다

 

Pass by Reference 로 실행이 되는 것이다

 

사실 Using Chaning은 차이 없이 값이 변경되어 나오기 때문에 차이가 없고 똑같은 기능이다.

 

하지만 Value라는 값으로 감싸주면 두개의 기능이 차이가 생긴다.

 

같은 코드에 Value 구문을 추가해서 실행을 시켜보자.

Perform Using vs Change by Value

 

Using은 초기 파라미터 값이 변경되어 나오지 않은 반면 Changing은 변경되어 나온다.

이부분에서 왜 Using Changing 구문이 나눠지는지 알 수 있는 부분이다.

 

Using Value구문을 쓰면 Pass by Value가 되고

 

Chaning은 쓰나 안쓰나 Pass by Reference가 되는 것이다.

 

명시적인 표현으로 구분을 하기 위해서는 Using구문에서는 value를 사용하여 Pass by Value로 사용하고

 

Pass by Reference로 사용하려면 Changing 구문을 사용하는게 맞는 것 같다.

 

 

자 그러면 참조변수로 설정 되어있는 값에 대해서는 어떻게 변경되는지도 확인을 해봐야

 

좀 더 깊게 이해를 한다고 생각한다.

 

하나는 Value로 하나는 New로 변수가 아닌 Structure 타입으로 생성을 해보자.

 

디버깅을 태워보면 Value New의 차이점을 볼 수 있다.

Value Structure타입으로 생성을 해주고 New는 해당 Structure Reference 변수로 생성을 한다.

 

그렇기에 addr_ref2 -> 동적 개체 할당 기호를 사용하여 접근을 해야한다

 

그러면 생성된 2개의 값을 Using value를 사용하여 Pass by Value로 보내본다.

 

그리고 실행을 해보면 결과는 다음과 같다.

 

참조변수로 생성된 값은 Perform문을 통하여 Pass by Value로 보낸다고 해도

 

Subroutine 내에서 값이 변경되면 파라미터가 변하기 때문에 Using Value가 먹히지 않는 것을 알 수 있다.

 

이렇게 Pass by Value Pass by Reference 차이를 알아봤다.

 

Class Method Function Module 혹은 Subroutine( Perform ) 작성할 때 

 

어떤 값을 value로 할지 reference 할지 생각하자.

반응형

'SAP > ABAP' 카테고리의 다른 글

[ABAP] Subtotal(소계) 세팅  (1) 2024.09.02
[ABAP] SELECT WITH 구문  (0) 2024.06.24
[ABAP] ALV Grid Event Handler - 2편  (0) 2024.06.11
[ABAP] ALV Grid Event Handler - 1편  (0) 2024.06.10
[ABAP] ALV Class - Method 1편  (1) 2024.06.04
반응형

이번에 소개할 Event Handler는 DATA_CHANGED다. 

 

이것은 ALV가 수정모드일 때 데이터가 변경되면 감지해서 이벤트가 발생하게 하는 핸들러다.

 

로컬 이벤트 핸들러 클래스에 data_changed 이벤트를 구성해주고

Local Class에 Handle_data_changed Method 정의

1편에서 했던 방법과 똑같이 Set Handler에 handle_data_changed를 설정해주고 해당 구문에 

 

Break-point를 줘서 ALV의 값을 변경해보자.

 

빈값이 었던 4번째 라인에 로컬 클래스를 KRW를 입력하고 엔터를 치면 해당 클래스에 디버깅이 타게된다.

ALV에서 Currency 필드에 KRW입력하고 엔터

 

해당 이벤트를 타는 것을 알 수 있다.

 

이후에 PERFORM문에 로직을 작성하면 된다.

Handle_data_changed Method 타는 것을 확인

 

로직을 작성할때는 er_data_changed 오브젝트에 들어가보며 mt_mod_cells항목이 있는데 

 

그 항목이 수정되어있는 라인들의 정보다.

 

LOOP AT po_data_changed->mt_mod_cells INTO ls_mod_cells. 

PO_DATA_CHANGED->MT_MOD_CELLS에 변경된 라인들 정보가 들어온다.

 

수정한 라인의 위치 값 정보를 가지고 로직을 작성 할 수 있다.

 

다음은 DOBBLE_CLICK 이벤트와 HOTSPOT CLICK 이벤트 가 있는데 두 기능은 비슷하다.

 

더블클릭은 말그대로 더블클릭했을 때 이벤트가 발생하는거고 핫스팟 클릭은 한번 클릭했을 때 이벤트가 발생하는

 

이벤트 핸들러라고 생각하면 이해가 쉽다.

Local Class에 Hotspot 및 Double Click Method 정의

 

더블클릭과 핫스팟 클릭을 구성하고 Set Hanlder까지 구성 후 ALV 실행해서 ALV필드를 클릭해보겠습니다.

 

더블클릭하면 디버깅이 다편서 몇번째 라인, 어떤 필드를 선택해서 더블클릭했는지 정보를 받아오면서 

 

이벤트 트리거가 발생합니다.

Double Click Method 실행
Double 클릭 로직 실행 시 변수 값 확인

하지만, 한번 클릭하는  hot spot click은 이벤트 트리거를 안타는데

 

핫스팟을 설정하려면 다음과 같은 설정이 추가로 필요합니다.

 

필드카달로그 구성하는 곳에서 원하는 필드에 hotspot 설정을 다음과 같이 해줘야합니다.

FLDATE 필드에 Hotspot 설정

 

Flight Date에 핫스팟 설정을 해주고 ALV를 실행해보면 

 

해당 필드값에 밑줄이 생기면서 핫스팟 대상임을 표시해 준다.

Flight Date 필드에 Hotspot 표시인 밑줄이 생긴다.

 

밑줄이 있는 필드에 한번 클릭을 하게되면 Hotspot 이벤트 트리거가 발생하면서 

 

해당 로우와 컬럼의 정보를 받아오는 것을 알 수 있습니다.

 

Hotspot Click Event 로직 실행
Hotspot 로직 실행 시 변수 값 확인

 

위 화면의 정보를 가지고 로직을 작성하면 된다.

반응형

'SAP > ABAP' 카테고리의 다른 글

[ABAP] SELECT WITH 구문  (0) 2024.06.24
[ABAP] Pass by Value vs Pass by Reference  (0) 2024.06.16
[ABAP] ALV Grid Event Handler - 1편  (0) 2024.06.10
[ABAP] ALV Class - Method 1편  (1) 2024.06.04
[ABAP] Search Help 초기 필드값 세팅  (0) 2024.05.28
반응형

 

CL_GUI_ALV_GRID인 클래스 인데, T-code: SE24에 들어가서 해당 클래스 검색해보면

 

다음과 같은 항목이 보일텐데 Event 탭에 들어가서 어떠한 Event Handler가 있는지 확인 할 수 있다.

CL_GUI_ALV_GRID의 Events 탭

 

이중에서 가장 많이 사용되고 알아두면 좋을만한 것들에 대해서 알아보자.

 

1. ALV를 구성할 때 작동하는 Event인 Toolbar에 대해서 알아보자.

 

ALV 화면

 

Toolbar는 ALV에 대해서 작동하는 toolbar 버튼을 구성해주는 Event Handler라고 보면 된다.

 

버튼을 구성하면 빨간박스 위치에 생성된다.

 

사용하는 방법은 다음과 같다.

 

하기와 같이 로컬 클래스 이벤트 핸들러를 정의해주고 로컬 클래스에 대해 생성자를 만들어 준 후 

 

내가 원하는 이벤트 핸들러를 하나씩 추가하면 된다.

Local Class 선언

로컬 클래스를 작성한 이후에 해당 클래스를 New구문을 통해 생성해주고,

 

해당 ALV Gird에 event modified 변수를 넘겨줘서 edit_event에 등록을 시켜주고 

 

작성한 handle_toolbar를 set handler에 설정해주면 이벤트가 동작한다.

 

Local Class 생성 후 ALV에 적용

 

handle_toolbar에 break-point를 찍어서 돌려보면 화면이 생성되는 시점에서 이벤트 트리거가 발생한다.

 

handle_toolbar에 있는 alv_handle_toolbar 퍼폼문을 다음과 같이 작성하면 된다.

Buttone 생성 로직

 

function 명 , Icon여부, button명 등 설정을 해주고 실행하면 

 

아래 그림과 같이 ALV 버튼이 생성된다.

ALV에 Button 추가

 

버튼을 생성했으면 해당 버튼에 대한 기능을 추가해줘야 하는데 이 이벤트는

반응형

USER_COMMAND 이벤트 핸들러를 사용하면 작동 시킬 수 있다.

Local Class에 handle_user_command Method 정의

 

handle_command 로직을 추가하고 핸들러도 추가해주고

생성한 Method를 ALV에 Set handler

 

PERFORM문 로직을 작성하면 된다.

 

해당 function은 위에 toolbar를 구성할 떄 작성해 두었던 function명을 입력해주면 해당 로직을 타게된다.

hanlde_user_command 퍼폼문 로직

 

 

반응형

'SAP > ABAP' 카테고리의 다른 글

[ABAP] Pass by Value vs Pass by Reference  (0) 2024.06.16
[ABAP] ALV Grid Event Handler - 2편  (0) 2024.06.11
[ABAP] ALV Class - Method 1편  (1) 2024.06.04
[ABAP] Search Help 초기 필드값 세팅  (0) 2024.05.28
[ABAP] Table 생성  (0) 2024.05.25
반응형

SAP에서 프로그램을 개발할 때 가장 많이 쓰는 ALV Class 에대해서 알아보자.

 

SAP에서 제공하는 ALV Class는 바로 CL_GUI_ALV_GRID .

 

ALV란 Report 프로그램에서 데이터를 조회하거나 조회된 데이터를 가공하는데 사용되는 

ABAP List Viewer.

 

아래 그림과 같이 하나의 테이블로 구성되어 화면에 나타나는 것을 ALV라고 한다.

ALV 화면

 

기본적으로 ALV Class인 CL_GUI_ALV_GRID 클래스를 사용하기 위해서는 

 

하기와 같이 DATA 타입을 선언이 필요하다. 

 

Data 타입 선언 후 생성

 

인라인 방법으로는 다음과 같다.

Inline 선언 (New Syntax)

 

container_name에는 스크린의 Custom Control Name에 넣어준 이름을 넣어주시면 됩니다.

 

그러면 CL_GUI_ALV_GIRD에서 자주 사용하는 메서드를 알아보자.

 

1. GET_SELECTED_ROWS

 

ALV에 선택된 행에 대한 정보를 받아오는 Method다.

.

 

해당 Method는 CL_GUI_ALV_GRID 를 참조하는 객체를 생성한 go_alv를 이용하여 호출.

 

'BACK' (뒤로가기) 버튼을 눌렀을 때 선택된 라인에 대한 정보를 얻기위해 아래와 같이 코드를 작성 후

 

디버깅을 위한 User command에 코드 작성

 

디버깅을 걸고 2개 선택을 한 후 lt_rows에 어떤 정보가 오는지 확인해보겠습니다.

2라인 선택 후 'BACK' 버튼 실행

 

하기와 같이 2번째와 4번째 선택된 행의 Index 정보를 얻을 수 있습니다.

해당 기능을 통해 Add버튼 혹은 Del 버튼 등 로직을 작성하는데 사용할 수 있습니다.

 

2. GET_CURRENT_CELL.

 

AVL에서 커서가 놓은 위치의 값과 속성들을 반환하는 메소드입니다.

 

호출 방법은 동일

 

해당 메소드는 2개의 라인과 컬럼의 인덱스 번호를 반환한다.

 

하나는 현재 선택된 셀의 라인과 컬럼을 반환하고 

 

다른 하나는 필터링을 통해 설정하거나 숨기기 했을 때 실제로 보이는 값과

 

인터널 데이블의 순서가 다르기 때문에 인터널 테이블의 라인과 칼럼을 반환한다.

 

 

다음과 같이 ALV에서 Over Days 컬럽에 5번째 라인 30을 선택하고 디버깅을 진행해보면

특정 셀 선택 후 실행

 

해당 셀에 몇번째 컬럼인지 , 라인의 인덱스 정보, 값 등 선택된 행에 대한 정보를 얻을 수 있다. 

해당 셀에 대한 세부 정보

 

3. CHECK_CHANGED_DATA.

 

ALV 내에서 변경된 데이터를 확인하는 Method입니다.

동일 방법으로 'BACK'시 디버깅을 위해 해당 위치에 코드 작성

 

위에서 확인했던 Over Days 30의 값을 40으로 변경해서 디버깅 진행해보겠습니다.

 

그러면 lv_valid 값이 변경되어서 'X'를 받아옵니다.

 

만약 alv에 아무것도 변경하지 않았다면 lv_valid 값은 빈값으로 반환 .

 

해당 기능을 이용하여 alv에 변경사항이 있을 시 언급해주는 로직을 작성 가능.

 

4. REFRESH_TABLE_DISPLAY

 

조회된 화면에 ALV 인터널 테이블을 다시 조회할 때 사용하는 메소드로,

 

데이터가 변경되거나 SELECT문을 다시 수행할 때 새로고침 해주는 메소드

 

해당 메소드는 아래와 같은 방법으로 호출 할 수 있다.

 

is_stable : 라인의 컬럼 위치를 기억하여 재조회 하고 이전의 위치에 화면을 보이게 하는 역할.

 

i_soft_refresh : 'X'를 주었을 때 sort, filter, sum 등 현재 alv의 layout 세팅을 그대로 유지한 상태로 refresh 진행.

 

i_soft_refresh에 빈값을 넣으면 alv sort등이 유지가 안되어 원하는 위치에 라인을 추가할 경우 

 

원하는 위치에 반영이 되지않을 수 있으니 참고하세요.

반응형

'SAP > ABAP' 카테고리의 다른 글

[ABAP] ALV Grid Event Handler - 2편  (0) 2024.06.11
[ABAP] ALV Grid Event Handler - 1편  (0) 2024.06.10
[ABAP] Search Help 초기 필드값 세팅  (0) 2024.05.28
[ABAP] Table 생성  (0) 2024.05.25
[ABAP] Class Method 정리  (0) 2024.05.23

+ Recent posts