【ABAP】Code push down 실장편
목적
지난번 기사에서는 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만이 가능한 일이 더 있기 때문에, 각각의 특징이 나오는 시나리오도 생각하고 싶습니다.
Reference
이 문제에 관하여(【ABAP】Code push down 실장편), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tami/items/72fc1d4de4ad21edf62a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)