【ABAP】Code push down 실장편

11921 단어 ABAPCDSabapSAPHANA

목적



지난번 기사에서는 Code push down을 실현하는 방법으로 Open SQL, AMDP, CDS를 소개했습니다.
이번에는 구현편으로 한 시나리오를 Open SQL, AMDP, CDS 각각에서 실현해 보겠습니다.

시나리오



입출고 전표 테이블(MATDOC)에서 품목, 플랜트, 보관 장소별로 수량을 요약하여 출력합니다. 종래의 ABAP라면, 일단 내부 테이블에 취득하고 나서 이동 타입에 의해 프라마이를 판단해 집계하고 있었다고 생각합니다.

MATDOC 테이블(MKPF, MSEG 후속)


정책



SQL에서 대차 플래그가 'S'이면 플러스 수량(입고), 'H'이면 마이너스 수량으로 집계합니다.

1. Open SQL로 구현


SELECT matnr, werks, lgort,
       SUM(
         CASE shkzg
           WHEN 'S' THEN ( menge * 1 )
           WHEN 'H' THEN ( menge * -1 )
           END
       ) AS menge
       FROM matdoc
       INTO TABLE @DATA(itab)
       GROUP BY matnr, werks, lgort.

 cl_demo_output=>display(
   EXPORTING
     data = itab
 ).

CASE 문을 사용하여 대차 플래그 (shkzg)로 수량을 프라마이합니다.
또한 그 결과를 SUM으로 집계합니다.

결과



올바르게 집계되었습니다.


2. AMDP에 의한 구현



2.1 AMDP 클래스 구현



클래스 정의


CLASS zcl_mob58_amdp_test DEFINITION
  PUBLIC
  FINAL
  CREATE PUBLIC .

PUBLIC SECTION.
  INTERFACES if_amdp_marker_hdb.
  CLASS-METHODS get_matdoc EXPORTING VALUE(et_result) TYPE zoutput_t_matdoc.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.

AMDP 클래스를 정의할 때의 결정으로 인터페이스 if_amdp_marker_hdb를 사용합니다.

메소드 구현


CLASS zcl_mob58_amdp_test IMPLEMENTATION.
  METHOD get_matdoc BY DATABASE PROCEDURE FOR HDB LANGUAGE SQLSCRIPT OPTIONS READ-ONLY
  USING matdoc.

    et_result = SELECT matnr, werks, lgort,
       SUM(
         CASE shkzg
           WHEN 'S' THEN ( menge * 1 )
           WHEN 'H' THEN ( menge * -1 )
           END
       ) AS menge
       FROM matdoc
       GROUP BY matnr, werks, lgort;

  ENDMETHOD.

ENDCLASS.

AMDP의 메소드는 선언 부분에 특징이 있습니다.


선언
의미


by DATABASE PROCEDURE
AMDP 방법이라는 표시

FOR
데이터베이스 지정

LANGUAGE
데이터베이스를 조작할 언어 지정

OPTIONS
선택적으로 READ-ONLY를 지정. 지정하지 않으면 쓰기가 가능합니다.

USING
SQL Script에서 사용하는 모든 테이블 선언


AMDP의 메소드는 SQL 스크립트로 작성됩니다. 보기 Open SQL과별로 차이가 없지만 명령의 끝은 세미콜론(;)으로 끝나는 등의 규칙이 있습니다.
SQL 스크립트 참조는 여기

2.2 AMDP 클래스 호출


zcl_mob58_amdp_test=>get_matdoc(
  IMPORTING
    et_result = data(et_result)
).

cl_demo_output=>display(
  EXPORTING
    data = et_result
).

결과



위의 프로그램을 실행하면 다음과 같은 결과를 얻을 수 있습니다.


3. CDS에 의한 구현



CDS의 등록은 이하의 순서로 실시합니다.
※ CDS를 구현할 때는 Eclipse ADT(ABAP Development Tool)를 사용합니다.




여기에서 템플릿을 선택합니다. 템플릿에 따라 아래의 미리보기에 있는 코드를 자동 생성해 줍니다.


다음 코드를 작성합니다.
@AbapCatalog.sqlViewName: 'ZMOB58_TRAIN_01'
@AbapCatalog.compiler.compareFilter: true
@AbapCatalog.preserveKey: true
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Basic CDS'
define view ZMOB58_CDS_TRAIN_01 as select from matdoc
{
  key matnr, 
  key werks, 
  key lgort,      
       sum(
         case shkzg
           when 'S' then ( menge * 1 )
           when 'H' then ( menge * -1 )
           end
       ) as menge

}group by matnr, werks, lgort

위의 @로 시작하는 부분을 주석이라고합니다. 목적에 따라 필요한 어노테이션을 설정해야 합니다. 어노테이션 정의에 대한 자세한 내용은 여기을 참조하십시오.

또한 처음 MSEG를 사용하여 뷰를 정의한 결과 데이터를 가져올 수 없습니다. S/4가 되고 나서는 MATDOC가 입출고 전표의 정 데이터이므로, 이쪽을 사용할 필요가 있는 것 같습니다.

결과



활성화 후 F8을 누르면 뷰가 실행됩니다.


요약



이번에는 Open SQL, AMDP, CDS 구현 방법에 중점을 둡니다. 간단하게하기 위해 SQL은 모두 동일하게 만들었습니다. AMDP만이라면, CDS만이 가능한 일이 더 있기 때문에, 각각의 특징이 나오는 시나리오도 생각하고 싶습니다.

좋은 웹페이지 즐겨찾기