본문 바로가기
Fiori/CDS View

AMDP

by clode 2023. 3. 9.
728x90
반응형

CDS View는 데이터를 말아올려서(?) 사용자가 원하는 데이터로 가공해서 볼 수 있도록 한다. 다른 방법들도 있지만, 이 방식은 아밥단이 아닌 DB단에서 데이터를 가공하기 때문에 속도적으로 장점이 있다.

생성 순서

  1. AMDP

  2. Table Function

  3. Initial

  4. Calculation

  5. Grouping

  6. Cube

  7. 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에서 재사용할 수 있다.

728x90
반응형

'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

댓글