본문 바로가기

CDS View(Core Data Service)/Core Data Service 기초

Enhancement

SAP에서 제공하는 CDS 뷰는 추가 필드, 표현식(산술식 또는 case문), 연관 관계, SQL 함수 또는 리터럴을 결과 집합에 포함하여 확장 (Enhanced) 수 있습니다. 이러한 수정이 자유로운 확장은 CDS 뷰 정의에 추가 필드와 같은 사용자 정의 요구사항을 포함할 수 있도록 해줍니다. CDS 뷰 확장은 AS ABAP 7.4 SP08부터 사용 가능합니다. CDS 뷰 확장은 EXTEND VIEW 키워드를 사용하여 전용 데이터 정의(DDL 소스)에 정의됩니다. CDS 뷰 확장은 여러 개의 CDS 뷰 확장을 생성할 수 있지만, 하나의 CDS 뷰에 항상 할당되기 때문에 재사용할 수는 없습니다.

아래 그림에 나와 있는 것과 같이 CDS 뷰 정의가 두 개의 레지토리 객체(뷰 엔티티와 SQL 뷰)를 생성하는 것과 유사하게, CDS 뷰가 활성화되면 EXTEND VIEW 키워드로 생성된 확장도 두 개의 레파지토리 객체를 정의합니다. 즉, 실제 CDS View Extension과 Append View는 CDS 뷰 정의에 의해 생성된 두 개의 객체(뷰 엔티티와 SQL 뷰)와 유사합니다.

ADT(ABAP Development Tools)에서는 그림1에 나와 있는 것과 같이 DDL 소스 편집기에서 확장된 뷰 템플릿을 제공하여 CDS 뷰 정의를 확장할 수 있습니다. 이 템플릿을 사용하면 확장하려는 원본 CDS 뷰 정의 이름을 제공하고, 그 뒤에 CDS View Extension과 Append View의 이름을 @AbapCatalog.sqlViewAppendName ABAP 어노테이션을 사용하여 DDL 소스를 생성할 수 있습니다.

CDS 뷰와 그 확장 뷰 정의 간의 관계는 확장 정의에서 EXTEND VIEW 키워드 뒤에 CDS 뷰 이름을 제공함으로써 형성됩니다.

그림 1

먼저 그림 1에 나와 있는 원본 뷰인 SADL_V_EXPOSURE을 살펴보겠습니다. 해당하는 SQL 뷰는 그림 2에 나와 있습니다. 스탠다 CDS 뷰인 SADL_V_EXPOSURE은 CDS 뷰 확장인 ZSADL_V_EXPOSURE_EXT를 사용하여 원본 뷰 정의에 추가 필드인 "flight date"를 포함하여 확장될 것입니다. 이를 그림 3에 나와 있는 것과 같이 확인할 수 있습니다. 확장에서 SQL 뷰의 이름은 필요하지 않습니다. 두 DDL 소스 간의 관계는 EXTEND VIEW 키워드 뒤에 CDS 뷰 이름을 제공함으로써 형성되기 때문입니다.

그림1
그림 2
그림 3

 


CDS View Extension


CDS 뷰 정의에는 CDS 뷰 확장을 통해 여러 요소들을 포함시킬 수 있습니다. 그러나 이러한 요소들의 사용 가능 여부는 확장이 구현되는 ABAP 릴리스에 따라 달라집니다. 예를 들어, GROUP BY 및 UNION 키워드가 포함된 CDS 뷰는 AS ABAP 7.51부터만 확장 가능하며, 뷰 확장에서 ABAP 어노테이션 @AbapCatalog.viewEnhancementCategory를 사용해야 합니다.

다음은 CDS 확장을 사용하여 표준 데이터 정의에 포함할 수 있는 사용 가능한 기능들을 설명합니다.

■ Element List
- Element List은 리터럴, 필드, 표현식 또는 함수를 포함할 수 있습니다.
- Element List에는 입력 매개변수와 경로 표현식을 포함할 수 있습니다.
- 집계를 포함하는 CDS 뷰는 확장될 수 있습니다(AS ABAP 7.51 이상), 단 확장 대상 뷰에 집계가 포함되어 있어야 합니다.

■ Association
- Association 관계를 포함할 수 있는지에 대한 가능

■ GROUP BY clauses
-AS ABAP 7.51 이상에서, 대상 뷰에 GROUP BY 절이 포함된 CDS 뷰는 GROUP BY 절이 포함된 경우에 한해 확장할 수 있습니다.
- 새로운 요소가 집계 함수가 아닌 경우, 이 요소들은 반드시 GROUP BY 절을 가져야 합니다

■ UNION ALL statement
AS ABAP 7.51 이상에서, 대상 뷰에 UNION ALL 절이 포함된 CDS 뷰는 UNION ALL 문이 대상 뷰에 있는 경우에 한해 확장할 수 있습니다. 하지만 대상 뷰에는 원본 CDS 뷰에서 사용한 것과 동일한 수의 UNION ALL 문이 필요합니다.


Limiting CDS View Extensibility


CDS 뷰를 정의할 때, 특정 비즈니스 상황에서는 개발자가 일관성을 유지하기 위해 CDS 뷰의 확장을 제한하고 싶어할 수 있습니다. 이러한 고려 사항은 특히 CDS 뷰 정의가 데이터베이스 테이블의 프록시 객체로 생성되었을 때, 추가 필드나 다른 이름을 포함해서는 안 되는 경우에 중요합니다.

아래 그에 나와 있는 것과 같이, CDS 뷰의 확장 기능에 대한 제어 지원은 AS ABAP 7.51부터 사용 가능하며, ABAP 어노테이션 @AbapCatalog.viewEnhancementCategory를 사용하여 구현할 수 있습니다. 이 어노테이션을 이용하면 CDS 뷰에 대한 확장을 허용하거나 제한할 수 있습니다. 이를 통해 CDS 뷰의 일관성을 유지하고 개발자가 불필요한 추가 확장을 방지할 수 있습니다.

ABAP 어노테이션 @AbapCatalog.viewEnhancementCategory는 DEFINE VIEW 문 앞에서 사용되며, 여러 허용값(쉼표로 구분되고 대괄호로 묶인)을 포함하여 확장 기능을 제어할 수 있습니다.

만약 대괄호 없이 Annotation을 사용하거나 전혀 사용하지 않는다면, CDS 뷰의 확장 기능은 기본값인 #PROJECTION_LIST로 관리됩니다.

@AbapCatalog.viewEnhancementCategory 어노테이션은 다음과 같은 값들을 대괄호 내에 포함할 수 있습니다.

■ #GROUP_BY
#PROJECTION_LIST와 함께 사용되는 경우, 이 값은 집계 표현식이 포함된 필드 목록에 집계된 또는 집계되지 않은 요소를 추가할 수 있도록 허용합니다. GROUP BY 절의 관련 확장도 허용됩니다.

■ #NONE
이 값을 사용하면 CDS 뷰 정의의 확장을 제한할 수 있습니다. 이 값은 다른 값들과 함께 사용될 수 없습니다.

■ #PROJECTION_LIST
이 값(#PROJECTION_LIST)을 사용하면 SELECT 목록을 확장하고 다른 연관 관계를 포함시킬 수 있습니다. 또한, 집계와 UNION 절이 포함된 SELECT 목록을 확장하려면 #UNION 또는 #GROUP_BY 값과 함께 #PROJECTION_LIST를 사용해야 합니다.

■ #UNION
#PROJECTION_LIST와 함께 이 값을 사용하면 SELECT 목록에 UNION 절이 포함된 CDS 뷰를 확장할 수 있습니다.

아래 표는 Annotation enhancement category에 대한 허용되는 값과 해당 값들의 조합을 보여줍니다.

Annotation Name Permitted Values Permitted Combinations
AbapCatalog.viewEnhancementCategory #GROUP_BY
#NONE
#PROJECTION_LIST
#UNION
#GROUP_BY and #UNION require #PROJECTION_LIST #NONE is used standalone

Finding CDS Extensions to Enhance CDS View Definitions


개발자들은 때로는 특정 CDS 뷰 정의에 대해 CDS 뷰 확장이 구현되었는지 여부를 확인해야 할 수 있습니다. 이 정보는 원본 뷰 정의인 DDL 소스에서 직접 확인할 수 있습니다.

CDS 뷰가 EXTEND VIEW 정의를 사용하여 확장되면 원본 뷰 정의의 DEFINE VIEW 문 왼쪽에 나선 모양의 아이콘이 표시됩니다(그림 1 참조). 이 아이콘은 뷰가 원래 뷰 정의에 포함되지 않았던 새로운 필드, 표현식 등과 같은 추가적인 비즈니스 요구사항을 포함하여 확장되었음을 나타냅니다. 나선 아이콘 위로 커서를 이동하면 확장된 뷰 정의에 대한 사용 가능한 확장 목록이 나오는 대화 상자가 표시됩니다. 이 목록에서 이름을 선택하면 해당 확장 뷰 정의를 열 수 있습니다(그림 2 참조).

그림 1
그림 2

 

반응형

'CDS View(Core Data Service) > Core Data Service 기초' 카테고리의 다른 글

Authorization Concept  (0) 2023.07.22
Consuming CDS View  (0) 2023.07.16
CDS View Association  (0) 2023.07.10
CDS View Annotations  (0) 2023.07.09
CDS View 내장 함수 & 표현식 5. Date and Time Function  (0) 2023.07.06