ALV란?
- ABAP LIST VIEWER의 약자로 리스트 화면에 데이터를 조회하거나, 조회된 데이터를 수정/변경하는 목적으로 실무에서 사용되는 프로그램이다.
- 데이터 구조와 인터널 테이블만 활용해서 단시간 내에 리스트 프로그램을 개발할 수 있다.
ALV 종류 (개발순 : FUNCTION ALV -> GRID ALV -> SALV)
ALV GRID 컨트롤 인스턴스 생성
*data : gv_grid TYPE REF TO cl_gui_alv_grid. "객체 참조 변수 선언"
*
*create OBJECT gv_grid. "create object 구문으로 ALV GRID 인스턴스 생성"
ALV GRID 컨트롤의 구조
- ALV를 이용해 데이터를 화면에 뿌려주려면 다음 2가지 작업을 해주어야 한다.
1) 인터널 테이블 선언
- 화면에 보이게 될 인터널 테이블을 선언한다.
- ALV에서 데이터 정보를 저장하는 인터널 테이블 영역을 아웃풋 테이블(OUTPUT TABLE)이라고 한다.
2) 데이터의 구조(필드 카탈로그)
- ALV GRID 컨트롤이 스크린에 조회되는 구조를 정의한다.
- 일반적으로 ABAP DICTIONARY의 테이블 도는 구조체를 이요아거나, 인터널 테이블의 구조를 그대로 사용함.
ALV를 화면에 보이게 하려면 '스크린'영역과 ALV를 연결하는 'SAP 컨테이너 컨트롤'이 반드시 존재해야 한다.
SAP 컨테이너 생성 및 컨테이너 오브젝트 생성
- ALV를 화면에 띄우려면 SAP 컨테이너 컨트롤이 반드시 존재하여야 한다.
- SAP 컨테이너는 LINKER의 역할을 하도록 SAP 컨트롤을 자기 영역 안에 포함하는 컨테이너 역할을 하게 된다.
- SAP 컨트롤의 종류는 SAP TREE, SAP PICTURE, SAP TEXTEDIT, SAP SPLITTER 컨트롤 등이 잇다.
- SAP 컨테이너도 다른 컨트롤을 포함하는 컨트롤의 하나로, PARENT CONTROL이라고도 한다.
SAP 컨테이너의 종류
- SAP CUSTOM CONTAINER / SAP DIALOG BOX CONTAINER / SAP DOCKING CONTAINER /
SAP SPLITTER CONTAINER / SAP EASY SPLITTER CONTAINER
아 책보고 공부해도 뭔말인지 모르겠어서 유튜브를 찾아보니 데송님이 ALV 설명해주신 게 있었다.
이걸 토대로 우선 좀 익히고 예제를 풀어보도록 하겠다.
<DESONG님 유튜브>
ALV (ADVANCED LIST VIEWER)
- 목록보여주기
- SAP에는 STD(표준)이 존재 - 구매, 생산, 판매, 회계 등
-> 회사에 맞게 EXIT, BODI 등 공간 - 화면의 라벨을 바꿀 수도 있고, 필드를 추가하거나, 계산 로직을 바꾸는 경우 사용.
- 공간을 새로 구축해서 로직을 사용하고 다음 줄로 넘어가게 한다.
- 이 때 ABAP 사용하는데 ABAP PROGRAMMING을 통해 ALV LIST(REPORT)를 만든다.
- 사용자는 이 LIST에서 여러 ACTION이 가능 (메일을 보낸다, 더블클릭해서 TRANSACTION 넘어가서 STD 프로그램으로로 넘어간다)
- 2004 년 이전의 ALV는 CLASSIC형태이고, 2004년 이후의 SALV는 객체지향형태(OOP)
- LIST VIEWER를 생성하는 방법을 알아봅시다.
Q) 업무예제 : 인천공항 -> 가입한 항공사 목록 조회.(초급편)
이걸 만들어 보도록 하시죠!
음... 책에서 본 내용에는 alv를 구현하기위해서는
1) area 2) container 3) sap grid control이 필수적으로 있어야한다.
4) layout 5)field catalog 는 필수값은 아니지만 alv 화면에 필드를 띄우고, alv 모양을 잡아주기위해 필요하다.
우리는 report 프로그램을 통해서
*SELECT * FROM s_carrier
* INTO TABLE @DATA(lt_carrier). "@는 open sql 이라는데 구체적으로 뭔지 잘 모르겠음."
*
* LOOP AT LT_CARRIER REFERENCE INTO DATA(REF).
* WRITE: /, REF->CARRIERID, REF->CURRENCYCODE, REF->NAME, REF->URL.
* ENDLOOP.
식으로 테이블을 조회할 수 있다.
그러면 이런 화면이 나오는데 시트형식으로 볼 수 있게 만들어주는 프로그램이 ALV이다.
그렇다면 ALV로 테이블을 조회해봅시다.
1. LT을 만들어보기
*SELECT * FROM s_carrier "STRUCTURE로 LOCAL TABLE 만들기
* INTO TABLE @DATA(lt_carrier).
2. FIELD CATALOG로 어떤 필드를 보여줄지 정한다.
*DATA l_field_catalog TYPE slis_fieldcat_alv.
*DATA lt_fieldcat TYPE slis_t_fieldcat_alv.
*
*CLEAR l_field_catalog.
*l_field_catalog-fieldname = 'CARRIERID'.
*l_field_catalog-col_pos = 1.
*l_field_catalog-seltext_m = '코드'.
*APPEND l_field_catalog TO lt_fieldcat.
*
*CLEAR l_field_catalog.
*l_field_catalog-fieldname = 'NAME'.
*l_field_catalog-col_pos = 2.
*l_field_catalog-seltext_m = '이름'.
*APPEND l_field_catalog TO lt_fieldcat.
*
*CLEAR l_field_catalog.
*l_field_catalog-fieldname = 'CURRENCYCODE'.
*l_field_catalog-col_pos = 3.
*l_field_catalog-seltext_m = '통화키'.
*APPEND l_field_catalog TO lt_fieldcat.
*
*CLEAR l_field_catalog.
*l_field_catalog-fieldname = 'URL'.
*l_field_catalog-col_pos = 4.
*l_field_catalog-seltext_m = '웹주소'.
*APPEND l_field_catalog TO lt_fieldcat.
3. LAYOUT으로 ALV의 모양을 잡아준다.
*DATA l_layout TYPE slis_layout_alv.
*
*CLEAR l_layout.
*
*l_layout-colwidth_optimize = abap_true.
*l_layout-zebra = abap_true. "ABAP_TRUE는 'X' / ABAP_FALSE는 ' '인걸로 보아 0/1 같은 개념인듯
4. CALL FUNCTION을 통해 ALV GRID를 만들어준다?
*CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
* EXPORTING
* i_callback_program = 'SY-CPROG '
* is_layout = l_layout
* it_fieldcat = lt_fieldcat * TABLES
* t_outtab = lt_carrier
* EXCEPTIONS * program_error = 1
* OTHERS = 2.
*IF sy-subrc <> 0.
* MESSAGE ID sy-msgty TYPE sy-msgty NUMBER sy-msgno
* WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
*ENDIF.
컨테이너가 어딨는지 못찾겠다...... 흑흑
A) 정석적인 ALV(내가 하고싶은)는 SCREEN 100이 무조건 있어야한다.
이 구문으로 만든 화면은 APPEND를 써서 ALV 형식으로 만든 조회 프로그램 정도로 볼 수 있을 것 같다.
그래서 CONTAINER가 없는 듯 합니다...
데송님 유튜브 해당영상
www.youtube.com/watch?v=NA1gPPzWQn4&t=16s
'어쩌다 SAP > 어쩌다 ABAP' 카테고리의 다른 글
13일차) 멘토님 과제를 풀어보았읍니다.... (0) | 2020.09.17 |
---|---|
12일차) Structure, View, Table Type, DOMAIN, Data element (0) | 2020.09.11 |
11일차) ABAP Dictionary Overview, Table (0) | 2020.09.09 |
10일차) Debugging (0) | 2020.09.07 |
9일차) 인터널 테이블 데이터 추가, 변경, 삭제, 읽기 (0) | 2020.09.04 |