메뉴 건너뛰기

SAP 한국 커뮤니티

[Tutorial] ABAP7.4 / ABAP ALV IDA / ABAP CDS 1부

공상우 2017.02.19 20:28 조회 수 : 8625

안녕하세요.

아래 내용은 2017 2 18 HANA 스터디에서 2주차 강의내용 중 일부입니다.

원작자는 접니다.


이번 강좌는 3가지를 다룬다.
1. ABAP 7.4~ 
2. ABAP ALV IDA 
3. ABAP CDS 1부(다음주에 2부가 이어진다)

1. ABAP 7.4~
변화되는 ABAP에서 실무적인 관점으로 주시해야 할 부분은 LOOP 구문을 대체할 만한 SQL의 개선과 데이터선언의 편의성이라 생각된다.
PUSHDOWN을 ABAP으로 구현하기 위해서는 LOOP을 줄여서 처리하는 방법에 익숙해질 필요가 있다.
1.PNG

2. ABAP ALV with Integrated Data Access on HANA
기존의 ALV가 개편되었다. 먼저 클래식한 방법으로 ALV에 데이터를 출력되는 방법은 아래와 같다.
- SELECT 쿼리를 작성하여 데이터베이스에서 데이터를 가져온다.
- 모든 데이터 처리 로직은 애플리케이션 계층에서 발생하고 최종적으로 데이터는 인터널 테이블에 저장된다.
- 최종 인터널 테이블에서 그룹화, 정렬, 집계 및 페이징과 같은 모든 UI 작업이 응용 프로그램 계층 자체에서 수행된다.
그러나 통합 데이터 액세스 ALV (ALA with IDA)는 다르다.
- SAPGUI의 ALV에 데이터를 표시하기 위한 그룹화, 정렬, 집계 및 페이징이 모두 SAP HANA 데이터베이스에서 수행되며 이 처리가 끝난 데이터가 애플리케이션으로 전송되고 ALV는 출력만 담당하게 된다.
IDA와 함께 ALV를 사용하는 방법 2가지를 소개한다.
1) CREATE
ABAP Dictionary로 생성된 테이블이나 뷰에 접근할 때 사용하는 방법이다.
2.PNG

2) CREATE_FOR_CDS_VIEW – Create ‘ALV with IDA’ for Core Data Services(CDS)
DDL에 직접 접근할 때 사용한다. DDL에 직접 연결되기 때문에 DDL 고유의 속성을 이용할 수 있다.
예를 들어 DDL에서 특정 필드를 키로 선언하면 여기서도 키로 사용된다.
3.PNG

ABAP Dictionary를 호출하는 것과 DDL을 호출하는 것의 차이
2.PNG
위에서 확인할 수 있듯이 DDL을 Active해서 생성한 뷰를 호출한 경우 DDL에서 지정한 키필드 정의가 적용되지 않았다.
반면 DDL을 직접 호출한 경우는 그렇지 않은 것을 확인할 수 있다.
 
기본적으로 IDA는 SALV의 기능을 사용할 수 있다. 파라미터와 셀렉트옵션을 사용하는 예는 아래와 같다.
4.PNG

3. ABAP CDS
DD 오브젝트명 Z_DDL_0012로 ABAP Dictionary View명 Z_CDS_V0012을 생성하는 DDL을 만들어 본다.
 
1) 원하는 패키지를 지정해 새 오브젝트를 생성한다.
6.PNG  
2) Core Data Services > Data Definition 를 찾는다.
4.PNG

3) DD 오브젝트명과 내역을 입력한다.
2017-02-19 11;57;19.PNG

4) Finish를 선택하면 아래와 같이 기본적인 구문이 입력된 DD 오브젝트가 생성된다.
6.PNG

@뒤에 있는 명령어들은 DD 오브젝트의 속성을 정의하는 것이다.
6.PNG 

 아래 소스를 입력해서 Active 하면 SE11에서 조회되는 Z_CDS_V0012 View가 생성된다.
7.PNG

과제
이번에 배운 기능을 사용해 아래 프로그램을 만들어보자.
1) 조건
SBOOK을 기준으로 SFLIGT에 있는 금액을 가져온다.
SBOOK-SFLIGHT
SBOOK-CARRID
SBOOK-CONNID
SBOOK-FLDATE
SBOOK-BOOKID
SFLIGHT-CURRENCY
SFLIGHT-PRICE (만약 CURRENCY가 USD 이면 * 1000)
ZFIELD (만약 CURRENCY가 USD 이면 값 Y 아니면 N)
2) 목표
-OPEN SQL만 사용해 PUSHDOWN 개념이 반영된 ALV 만들기
-같은 조건으로 IDA 프로그램 만들기
3) 제약조건
- 데이터를 선언하지 않고 쿼리로 인터널테이블 만든다.
- 연산과 조건식을 구현하기위해 LOOP를 사용하지 않는다.