CDS View는 데이터를 말아올려서(?) 사용자가 원하는 데이터로 가공해서 볼 수 있도록 한다. 다른 방법들도 있지만, 이 방식은 아밥단이 아닌 DB단에서 데이터를 가공하기 때문에 속도적으로 장점이 있다.
생성 순서
AMDP
Table Function
Initial
Calculation
Grouping
Cube
Consumption
데이터 가공이 복잡하지 않다면, Cube와 Consumption만 사용해서 생성해도 된다. CALCULATION부터는 개인적인 영역이다.
이번 시리즈에서는, 최종적으로 자재의 월별 구매 오더 금액
을 보여주는 OData를 만들것이다.
이렇게 만들어볼건데, Data Definition을 생성하면 View는 자동으로 생긴다.
AMDP 생성
가장 첫번째로 AMDP를 생성해본다.
생성한 뒤 Active 하려면 Table function이 만들어져 있어야 한다. Table function은 이후 게시물에서 생성해본다.
개발패키지 아래 Source Code Library
- Classes
에서 생성해준다.
Class interface 와 Method 선언이 일반 ABAP Class와 다르다.
INTERFACES : if_amdp_marker_hdb
를 입력해주지 않으면 Database procedures managed by ABAP can only be defined in classes that implement the marker interface "IF_AMDP_MARKER_HDB".
라는 오류가 난다.
FOR TABLE FUNCTION zcdstest001_ddl.
생성한 table function 이름을 입력해준다.
AMDP Method 생성 후 Active시 Table Function이 생성되어 있어야 한다.
만약 쿼리문이 너무 길어진다면, 가독성을 위해 변수에 담아 return 하는 방법으로 로직을 짤 수 있다.
CLASS ZCL_AMDP_SE_TEST DEFINITION
PUBLIC.
PUBLIC SECTION.
INTERFACES : if_amdp_marker_hdb.
CLASS-METHODS get_po_data
FOR TABLE FUNCTION zcdstest001_ddl.
ENDCLASS.
CLASS ZCL_AMDP_SE_TEST IMPLEMENTATION.
METHOD get_po_data
BY DATABASE FUNCTION FOR HDB
LANGUAGE SQLSCRIPT OPTIONS READ-ONLY
USING ekko ekpo.
* return
*
* select a.mandt as mandt
* , a.ebeln as ebeln
* , a.bukrs as bukrs
* , a.bsart as bsart
* , a.aedat as aedat
* , b.ebelp as ebelp
* , b.matnr as matnr
* , b.werks as werks
* , b.lgort as lgort
* , b.menge as menge
* , b.meins as meins
* , b.banfn as banfn
* , b.bnfpo as bnfpo
* , b.mtart as mtart
* , b.netpr as netpr
* , a.waers as waers
* from EKKO as a
* left outer join EKPO as b on a.mandt = b.mandt
* and a.ebeln = b.ebeln
* where a.mandt = :clnt
* order by a.ebeln, b.ebelp;
lt_temp_mm =
select a.mandt as mandt
, a.ebeln as ebeln
, b.ebelp as ebelp
, a.bukrs as bukrs
, a.bsart as bsart
, a.aedat as aedat
, b.matnr as matnr
, b.werks as werks
, b.lgort as lgort
, b.menge as menge
, b.meins as meins
, b.banfn as banfn
, b.bnfpo as bnfpo
, b.mtart as mtart
, b.netpr as netpr
, a.waers as waers
from EKKO as a
left outer join EKPO as b on a.mandt = b.mandt
and a.ebeln = b.ebeln
where a.mandt = :clnt
and LEFT(a.aedat,4) = '2019'
order by a.ebeln, b.ebelp;
return
select
mandt
,ebeln
,ebelp
,bukrs
,bsart
,aedat
,matnr
,werks
,lgort
,menge
,meins
,banfn
,bnfpo
,mtart
,netpr
,waers
from :lt_temp_mm ;
ENDMETHOD.
ENDCLASS.
하나의 AMDP에 여러 METHOD를 생성해서, 여러 Table function에서 재사용할 수 있다.
'Fiori > CDS View' 카테고리의 다른 글
Grouping CDS View (0) | 2023.03.09 |
---|---|
Calculation CDS View (0) | 2023.03.09 |
Initial CDS View (0) | 2023.03.09 |
Table function (0) | 2023.03.09 |
CDS View (0) | 2023.03.09 |
댓글