ALV(abap list viwer)
ALV를 통해 조회된 DATA를 수정/변경 할 수 있으며 신규 데이터도 입력 가능하다.
-주요기능-
정렬기능
필터링기능
열의 크기 변경
레이아웃 변경
더블클릭에 의한 추가 정보 제공
기본적인 계산 수행 기능
엑셀 파일 및 워드 문서 저장
실무에선 write로 된 리폿은 거의 안쓴다고.. ALV를 쓴다고 한다. 하긴... write 리폿은 너무 어려워..;;
강의시간에 배울 땐 어렵게 느껴졌는데, 집에와서 책보고 해보니 별거 아니라능..
PERFORM BUILD_FIELDCAT : 화면에 디스플레이할 필드를 정의
PERFORM BUILD_SORTCAT : 원하는 필드로 정렬하기 위한 레이아웃을 생성
PERFORM BUILD_EVENTCAT : 페이지의 header를 작성
PERFORM ALV_WRITE : field data 및 레이아웃 속성값과 인터널테이블 데이타를 Function Module인 'REUSE_ALV_LIST_DISPLAY'에 임포트
굳이 PERFORM문을 쓸 필요는 없지만 코딩은 깔끔하고 가독성이 있어야죠..
TYPE-POOLS : slis.
SLIS를 type-pool로 선언하여 프로그램에서 사용하겠다는 의미. TYPE-POOL이란 SAP에서 제공하는 각종 타입 및 Constants가 선언되어 있는 그룹이다.
*필드카탈로그
DATA : fieldcat TYPE slis_t_fieldcat_alv,
fieldcat_ln LIKE LINE OF fieldcat. "워크에어리아 생성 , 헤드만 있다.
*소트카탈로그
DATA : sortcat TYPE slis_t_sortinfo_alv,
sortcat_ln LIKE LINE OF sortcat.
*이벤트카탈로그
DATA : eventcat TYPE slis_t_event,
eventcat_ln LIKE LINE OF eventcat.
*write 카탈로그
DATA : pgm LIKE sy-repid.
pgm = sy-repid.
*디스플레이
DATA : ls_layout TYPE slis_layout_alv.
기존의 데이터베이스 테이블의 데이터를 가져오는 소스코드에서 추가하면 된다. ALV로 만들꺼..
주석달아서 필드, 소트, 이벤트, write 카탈로그 데이터를 선언한다.
slis_t_fieldcat_alv를 더블클릭하면 slis type-pool로 들어가는데.. 그곳에 type이 모두 정의되어 있다.. 백문이불여일견
PERFORM build_sortcat.
PERFORM build_eventcat.
fieldcat과 wirte는 그냥 프로그램에 써주었고 나머지는 인클루드시켜 perform으로 가져왔다.
DATA : BEGIN OF itab OCCURS 0,
carrid LIKE spfli-carrid,
connid LIKE spfli-connid,
fldate LIKE sflight-fldate,
cityfrom LIKE spfli-cityfrom,
cityto LIKE spfli-cityto,
planetype LIKE sflight-planetype,
END OF itab.
SELECT a~carrid a~connid a~fldate a~planetype b~cityfrom
INTO CORRESPONDING FIELDS OF TABLE itab
FROM sflight AS a
INNER JOIN spfli AS b ON a~carrid EQ b~carrid
WHERE a~carrid EQ 'LH'
AND a~planetype EQ 'A319'.
*LOOP AT itab.
* WRITE :/ itab-carrid,
* itab-connid,
* itab-fldate,
* itab-cityfrom,
* itab-cityto,
* itab-planetype.
*ENDLOOP.
*build field catalog
DATA : col_pos TYPE i.
*CLEAR : itab, itab[].
ADD 1 TO col_pos. "필드포지션 COL_POS에 + 1 1번
fieldcat_ln-fieldname = 'CARRID'. "반드시대문자
fieldcat_ln-reptext_ddic = '항공사번호'.
fieldcat_ln-col_pos = col_pos."조회하면 첫번채
fieldcat_ln-key = 'x'. "결과화면에서 화살표를 클릭해도 요 필드는 고정되어 있다.
fieldcat_ln-emphasize = 'C500'. "필드에 색깔주기
APPEND fieldcat_ln TO fieldcat.
CLEAR fieldcat_ln.
ADD 1 TO col_pos. " COL_POS = COL_POS + 1
fieldcat_ln-fieldname = 'CONNID'.
fieldcat_ln-reptext_ddic = '항공기번호'.
fieldcat_ln-col_pos = col_pos."조회하면 두번째필드
fieldcat_ln-key = 'x'.
APPEND fieldcat_ln TO fieldcat.
CLEAR fieldcat_ln.
ADD 1 TO col_pos.
fieldcat_ln-fieldname = 'FLDATE'.
fieldcat_ln-reptext_ddic = '비행날짜'.
fieldcat_ln-col_pos = col_pos."조회하면 세번채
fieldcat_ln-key = ''.
APPEND fieldcat_ln TO fieldcat.
CLEAR fieldcat_ln.
ADD 1 TO col_pos.
fieldcat_ln-fieldname = 'PLANETYPE'.
fieldcat_ln-reptext_ddic = '항공사'.
fieldcat_ln-col_pos = col_pos."조회하면 네번채
fieldcat_ln-key = ''.
APPEND fieldcat_ln TO fieldcat.
CLEAR fieldcat_ln.
ADD 1 TO col_pos.
fieldcat_ln-fieldname = 'CITYFROM'.
fieldcat_ln-reptext_ddic = '도착도시'.
fieldcat_ln-col_pos = col_pos."조회하면 다번번
fieldcat_ln-key = 'X'.
APPEND fieldcat_ln TO fieldcat.
CLEAR fieldcat_ln.
필드카테고리부분의 작성이다. col_pos를 이용해 1씩증가하게하여 각 필드의 위치를 잡는다.
속성들은 파악하지 못했다..
APPEND를 꼭 해주어야 한다. fieldcat_ln의 헤더라인에 있는 데이터를 fieldcat이라는 인터널테이블로 반드시 넣어주어야 한다.
*Build Layout
ls_layout-colwidth_optimize = 'X'.
무슨말인지 모르겠다.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_callback_program = pgm
I_callback_user_command = 'USER_COMMAND'
is_layout = ls_layout
it_fieldcat = fieldcat
it_sort = sortcat
it_events = eventcat
I_SAVE = 'A'
TABLES
t_outtab = itab
EXCEPTIONS
program_error = 1
OTHERS = 2.
REUSE_ALV_GRID_DISPLAY를 call하면 익스포팅과 임포팅부분에 많은 변수들이 세팅되는데 필요한것만 골라 쓰면된다.
기본적인것들 ls_layout, fieldcat, sortcat, eventcat 등 그리고 테이블은 itab..
출처 :http://anyframe.tistory.com/83