본문 바로가기

AMDP/ADMP 기초

2.2 Implementing AMDP Methods

AMDP 메소드는 응용 프로그램 서버 레이어에서 데이터베이스 레이어로 코드 푸시다운(Code PushDown)을 구현하여 ABAP 응용 프로그램을 최적화하는 고유한 메소드입니다. 이 메소드는 전역 클래스에 래핑되며 정적 메소드 또는 인스턴스 메소드로 정의할 수 있습니다. AMDP 메소드를 인스턴스 메소드로 정의할 수 있지만, 항상 정적 메소드 호출로 실행됩니다.

두 종류의 AMDP 메소드가 있습니다:

1. Return Code가 없는 AMDP 프로시저는 BY DATABASE PROCEDURE 추가를 사용하여 메소드를 통해 정의됩니다.
2. Return code가 있는 AMDP 함수는 BY DATABASE FUNCTION 추가를 사용하여 메소드를 통해 정의됩니다.

AMDP 메소드의 본문은 SQLScript나 Native SQL과 같은 데이터베이스 특정 언어를 사용합니다. 아래 소스코드에 나와 있는 소스 코드는 SQLScript를 사용하여 항공사와 항공편 코드별로 판매를 요약하는 AMDP 클래스와 메소드를 보여줍니다. 이 프로시저는 또한 필터 키워드를 사용하여 선택 화면을 기반으로 레코드를 필터링합니다. 비즈니스 로직을 구현하기 위해 CE (Calculation Engine) 함수를 제외한 전체 SQLScript 참조를 사용할 수 있습니다.

■ CE_LEFT_OUTER_JOIN
■ CE_COLUMN_TABLE
■ CE_UNION_ALL

CLASS zcl_amdp_demo_01 IMPLEMENTATION.
    METHOD get_flight_data BY DATABASE PROCEDURE
                              FOR HDB
                              LANGUAGE SQLSCRIPT
                              OPTIONS READ-ONLY
                              USING sflight sbook.
    "Data selection from data sources using SQLScript"
    E_FLIGHT = SELECT a.carrid,
    				  a.connid,
                      sum(loccuram) AS bookamt,
                      b.loccurkey
                 FROM sflight AS a INNER JOIN
                      sbook AS b
                      ON a.carrid = b.carrid
                      AND a.connid = b.connid
                 WHERE a.mandt = :iv_client
                 GROUP BY A.carrid, a.connid, b.loccurkey;
    "Filter based on the selection screen criteria"
    
    E_FLIGHT = APPLY_FILTER( :E_FLIGHT, :iv_filters );
    
    ENDMETHOD.
ENDCLASS.

위 소스코드는 다음과 같은 내용을  포함하고 있습니다.

글로벌 AMDP Class Implementation은 AMDP Method Implementation을 포함합니다. 우리의 예제에서 AMDP 메서드는 항공사와 항공 코드별 총 항공 티켓 판매를 요약합니다.

메서드 GET_FLIGHT_DATA는 BY DATABASE PROCEDURE 추가로 정의되어 있기 때문에 AMDP 메서드로 구현됩니다.

이어서 HDB 데이터베이스에 프로시저를 구현하기 위한 데이터베이스 addition인 HDB가 따릅니다. AMDP 프레임워크는 SAP HANA 데이터베이스만 지원하지만, 다른 데이터베이스와 함께 작동하도록 설계되었습니다.

또한 사용할 데이터베이스별 언어가 지정됩니다. 이 경우 SQLScript가 비즈니스 로직을 구현하는 AMDP 메서드에서 사용될 것입니다.

Data Dictioanry 테이블, 뷰 및 메서드 본문 내에서 다른 AMDP 메서드와 같은 모든 Database Object는 반드시 USING 키워드로 명시적으로 선언되어야 합니다. 이러한 개체는 SAP<SID> (스키마)로 접두사를 붙이지 않고도 직접 액세스할 수 있습니다. 그러나 중첩된 AMDP 호출, 즉 AMDP 본문 내에서 호출되는 AMDP 메서드의 경우 해당 개체를 전체 이름으로 지정해야 합니다. 이는 해당 개체가 속한 클래스와 메서드 이름을 대문자로 적고 쌍따옴표로 묶어야 함을 의미합니다.

SAP<SID> 스키마에 포함되지 않은 개체는 런타임에서 사용 가능해야 하므로 이러한 개체는 관리되지 않으며, 따라서 USING 절에 포함되지 않습니다.

마지막으로 AMDP 본문 내에서 SQLScript 언어를 사용하여 데이터베이스 계층에서 실행되는 비즈니스 로직을 작성합니다.

프로시저 결과는 AMDP 메서드의 가져오는 매개변수로 제공된 선택 기준을 기반으로 SQLScript 함수 APPLY_FILTER를 사용하여 필터링됩니다.

AMDP 본문에 작성된 프로시저는 ABAP 특정 언어와 데이터베이스 특정 언어를 구별하기 위해 회색으로 강조 표시됩니다. 편집기 배경의 색상을 설정하는 방법은 그림 6.4를 참조하십시오.

AMDP 메서드를 구현할 때 다음과 같은 제한 사항을 고려해야 합니다:
- 데이터 정의 언어(DDL)인 Create, Alter, Delete와 같은 문은 데이터베이스 개체를 생성, 변경 또는 삭제하는 데 사용할 수 없습니다.
- 클래스 정의에서 정의된 내부 테이블이나 변수와 같은 로컬 임시 데이터 개체에 접근할 수 없습니다.
- 데이터베이스 커밋 및 롤백과 같은 문은 메서드 본문에서 허용되지 않습니다. 또한 프로시저 간의 데이터 일관성 문제를 피하기 위해 논리적인 작업 단위를 ABAP 프로그램에서 따로 처리해야 합니다.
- AMDP 메서드 내에서 암시적 개선 옵션을 사용하여 AMDP 메서드를 확장할 수 없습니다. 이러한 메서드는 데이터베이스에서 직접 실행되므로 암시적 옵션은 AMDP 메서드 내에서 사용할 수 없습니다.
- INSERT, UPDATE, MODIFY, DELETE 등과 같은 데이터 조작 언어(DML)을 사용할 때, 버퍼링된 테이블에 대한 쓰기 액세스가 허용되지 않습니다.

 

반응형

'AMDP > ADMP 기초' 카테고리의 다른 글

2.4 Using Multiple Selection Criteria  (0) 2023.08.23
2.3 Calling AMDP Methods in Applications  (0) 2023.08.22
2.1 Prerequisites  (0) 2023.08.21
2. Creating AMDP Classes  (0) 2023.08.19
1.2 Development Environment for AMDP  (0) 2023.08.19