-
AMDP 없이 CDS 데이터 구성하기 | SAP ABAPSAP 2026. 5. 29. 17:24
AMDP 없이 CDS 데이터 구성하기 | SAP ABAP AMDP 없이 CDS 데이터 구성하기
CDS View에서 데이터를 제공하는 방법은 DB 테이블이나 AMDP만 있는 것이 아닙니다. AMDP 없이 고정 데이터 또는 ABAP 로직으로 데이터를 직접 구성할 수 있는 두 가지 방법을 정리합니다.
1. 방법 비교 요약
항목 Custom Entity + Query Provider CDS UNION ALL AMDP 필요 불필요 불필요 DB 테이블 의존 없음 있음 (행 보장 불가) 데이터 유지보수 ✅ ABAP 클래스만 수정 ⚠️ CDS 수정 필요 (재활성화) 데이터 건수 제한 없음 많아지면 비효율 조건 분기 / 계산 ✅ ABAP 로직 자유롭게 ❌ 불가 권장 여부 ✅ SAP 표준, 권장 소량 임시용만 사용 2. 방법 1 — Custom Entity + Query Provider 권장
SAP RAP 기반의 표준 방식입니다.
define custom entity로 CDS 구조를 선언하고,@ObjectModel.query.implementedBy로 지정한 ABAP 클래스가 데이터를 직접 반환합니다. DB 테이블도, AMDP도 필요하지 않습니다.💡 Custom Entity는 DB View가 아닌 가상 엔티티입니다. 데이터 소스는 오직 Query Provider 클래스의if_rap_query_provider~select메서드가 담당합니다.STEP 1 Custom Entity 정의
@EndUserText.label: '코드 목록' @ObjectModel.query.implementedBy: 'ABAP:ZCL_CODE_LIST_PROVIDER' define custom entity ZC_CODE_LIST { key Code : abap.numc(1); CodeText : abap.char(10); }💡define custom entity는as select from없이 필드 구조만 선언합니다. SQL View가 생성되지 않으며, 데이터는 전적으로 Query Provider가 제공합니다.STEP 2 Query Provider 클래스 구현
CLASS zcl_code_list_provider DEFINITION PUBLIC FINAL CREATE PUBLIC. PUBLIC SECTION. INTERFACES if_rap_query_provider. ENDCLASS. CLASS zcl_code_list_provider IMPLEMENTATION. METHOD if_rap_query_provider~select. " ① 데이터 하드코딩 (ABAP 로직으로 자유롭게 구성 가능) DATA(lt_data) = VALUE TABLE OF zc_code_list( ( code = '1' code_text = '일' ) ( code = '2' code_text = '이' ) ( code = '3' code_text = '삼' ) ( code = '4' code_text = '사' ) ( code = '5' code_text = '오' ) ( code = '6' code_text = '육' ) ( code = '7' code_text = '칠' ) ( code = '8' code_text = '팔' ) ( code = '9' code_text = '구' ) ). " ② 페이징 처리 (OData 요청 대응 — 필수 구현) DATA(lv_offset) = io_request->get_paging( )->get_offset( ). DATA(lv_limit) = io_request->get_paging( )->get_page_size( ). IF lv_limit <> if_rap_query_paging=>page_size_unlimited. lt_data = lt_data[ lv_offset + 1 .. MIN( lv_offset + lv_limit, lines( lt_data ) ) ]. ENDIF. " ③ 결과 반환 (건수 + 데이터 모두 필수) io_response->set_total_number_of_records( lines( lt_data ) ). io_response->set_data( lt_data ). ENDMETHOD. ENDCLASS.⚠️set_total_number_of_records와set_data둘 다 반드시 호출해야 합니다. 누락 시 OData $count 요청 오류가 발생합니다.STEP 3 Service Definition 등록
define service ZCODE_SRV { expose ZC_CODE_LIST as CodeList; }이후 ADT에서 Service Binding(OData V4 - UI)을 생성하고 Activate하면 Fiori Elements로 바로 노출됩니다.
3. 방법 2 — CDS UNION ALL 소량 임시용
CDS View 내에서
UNION ALL로 고정 값을 직접 나열하는 방법입니다. 구현이 단순하지만, 실제 DB 테이블 행의 존재 여부에 의존하므로 신뢰성이 낮습니다.define view entity ZI_CODE_LIST as select from t001 { '1' as Code, '일' as CodeText } where mandt = $session.client and bukrs = '0001' union all select from t001 { '2' as Code, '이' as CodeText } where mandt = $session.client and bukrs = '0001' union all select from t001 { '3' as Code, '삼' as CodeText } where mandt = $session.client and bukrs = '0001';⚠️FROM t001에 해당 bukrs 데이터가 없으면 행이 생성되지 않습니다. 데이터가 보장된 테이블을 사용해야 하며, 건수가 많아질수록 CDS가 비대해집니다.4. 어떤 방법을 선택할까
상황 권장 방법 코드/공통 데이터를 ABAP에서 직접 관리 ✅ Custom Entity + Query Provider DB 조회 결과 + 고정 항목 혼합 ✅ Custom Entity (ABAP에서 SELECT 후 APPEND) 조건 분기, 외부 API 호출, 복잡한 계산 ✅ Custom Entity + Query Provider 3~5건 이하 단순 고정값, 빠른 프로토타입 ⚠️ CDS UNION ALL (임시) 5. 구현 체크리스트
Custom Entity
- ☐
define custom entity키워드 사용 (일반 view entity 아님) - ☐
@ObjectModel.query.implementedBy: 'ABAP:클래스명'어노테이션 선언 - ☐ 클래스에
if_rap_query_provider인터페이스 구현 - ☐
set_total_number_of_records호출 (건수 반환 필수) - ☐
set_data호출 (데이터 반환 필수) - ☐ 페이징(
get_offset/get_page_size) 처리 구현 - ☐ Service Definition + Binding (OData V4) 등록 및 활성화
CDS UNION ALL
- ☐ FROM 절에 사용하는 테이블에 데이터 존재 여부 확인
- ☐
mandt = $session.client조건 필수 - ☐ 건수 증가 시 Custom Entity로 전환 검토
'SAP' 카테고리의 다른 글
SAP HANA SQL — 4.12 Error Codes (0) 2026.05.29 SAP HANA SQL - 4.5 Operators / 4.6 Expressions (0) 2026.05.29 Oracle Hierarchy → SAP HANA SQLScript 변환 가이드 (0) 2026.05.26 ABAP RAP + AMDP 정리 (0) 2026.05.25 SAP HANA SQL Functions 완전 정리 (Platform 2.0 SPS07) (0) 2026.05.20 - ☐