본문 바로가기

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

CDS View 정의 1

CDS 뷰를 정의하기 위해 ADT(ABAP Development Tool)에는 DDL 소스(DDL Source) 또는 데이터 정의(Data Definition)이라는 새로운 유형의 저장소 객체(Repository Object)가 도입되었습니다. CDS 뷰를 정의하려면 File • New • Other • Data Definition로 이동하면 됩니다(아래 그림 참조). CDS 뷰는 ADT를 사용해야지만 정의하고 분석할 수 있습니다. 기존의 ABAP Workbench에는 이 새로 도입된 ABAP Repository Object(ABAP 장소 객체)의 개발을 지원하기 위한 별도의 도구가 제공되지 않습니다.

DDL 소스 코드 편집기(DDL Source Code Editor)는 여러 개의 DDL 소스 템플릿(DDL Source Templete)도 제공하여 데이터 정의 생성의 기준점으로 사용할 수 있습니다. 새로운 데이터 정의를 생성할 때, 기존 템플릿을 사용하거나 소스 코드 편집기를 통해 처음부터 새로운 템플릿을 만들 수 있습니다.

다음 템플릿을 사용하여 데이터 정의를 생성할 수 있습니다.

■ Define view
한 개의 데이터 소스를 사용하여 간단한 CDS 뷰를 정의하는 데 사용됩니다. 데이터 소스는 기존의 CDS 엔티티나 데이터베이스 테이블일 수 있습니다.

■ Define view with join
왼쪽 외부 조인을 사용하여 두 개 이상의 데이터 소스를 사용하여 CDS 뷰를 정의하는 데 사용됩니다. SQL 문과 유사하게 조인 조건은 ON 절에서 지정됩니다.

■ Define view with associations
다른 데이터 소스와의 연관성을 갖는 CDS 뷰를 정의하는 데 사용됩니다. 이 연관성은 투영 목록 및 다른 CDS 뷰를 데이터 소스로 사용하는 다른 데이터 정의에서 사용할 수 있습니다.

■ Define view with to-parent associations
부모 CDS 엔티티와 특수한 연관 관계를 갖는 CDS 뷰를 정의하는 데 사용됩니다. 이를 통해 CDS 뷰에서 부모 CDS 엔티티와의 연결을 설정할 수 있습니다.

■ Define view with parameters
CDS 뷰에 하나의 입력 매개변수를 사용하여 정의하는 데 사용됩니다. 입력 매개변수를 프로젝션 목록의 요소로 사용하거나 조건식이나 산술식의 피연산자로 사용할 수 있습니다.

■ Define projection view
간단한 프로젝션 뷰를 정의하는 데 사용됩니다.

■ Extend view
기존의 CDS 뷰를 확장하여 프로젝션 목록에 요소를 포함시키는 데 사용됩니다.

■ Define table functions with parameters
CDS 테이블 함수는 데이터베이스별 기능을 사용하기 위해 SQLScript를 통해 CDS 엔터티를 정의하는 데 사용됩니다. CDS 테이블 함수는 지정된 ABAP 메소드에서 구현되며 Open SQL에서 사용되거나 다른 CDS 뷰 정의의 데이터 소스로 사용할 수 있습니다.

■ Define abstract entity and parameters
단일 입력 매개변수를 가진 추상 CDS 엔티티를 정의하는 데 사용됩니다.

■ Define parent-child hierarchy
부모-자식 계층 구조를 가진 간단한 CDS를 정의하는 데 사용됩니다.

■ Define custom entity with parameters
단일 입력 매개변수를 사용하여 사용자 정의 CDS 엔티티를 정의하는 데 사용됩니다. 이는 SAP BTP, ABAP 환경(이전에는 SAP Cloud Platform, ABAP 환경으로 알려진)에서만 사용할 수 있습니다.

 


Using Templates



미리 정의된 소스 템플릿을 사용하여 CDS 뷰 정의를 생성할 수 있습니다. 이 섹션에서는 사용 가능한 DDL 소스 템플릿을 사용하여 새 데이터 정의를 생성하는 방법을 안내해 드리겠습니다.

이 예제에서는 하나의 데이터 소스를 사용하여 CDS 엔티티를 생성하는 Define View 템플릿을 사용합니다. 다음 단계를 따라 진행해 주세요.

1. SAP HANA Studio를 실행해주십시오
2. ABAP 관점에서, File • New • Other ABAP Repository object • Data Definitions을 선택하십시오. 패키지 이름 아래 있는 Core Data Service를 우클릭 한 뒤, New • Data Definition을 클릭합니다. 그리고 Next를 누르고 진행합니다.
3. New Data Definition 창에서, 아래 패키지 필드에 패키지 이름을 적습니다. 이름과 Data Definition 을 각각 필드에 맞게 적고 Next 버튼을 눌러 진행시킵니다.


4. 이용 가능한 DDL 소스 코드 템플릿을 사용하여 데이터 정의를 생성하려면, 이용 가능한 Transport Request을 선택하거나 새로운 요청을 생성한 후 "Next"을 클릭하세요.


5. 이 단계에서도 "Finish"을 클릭하여 Blank Templete을 사용하여 정의를 생성할 수 있습니다. 대신 기존 템플릿을 사용하여 CDS 뷰를 정의하려면 "Next"을 클릭하세요.
6. 적절한 Templete을 선택하여 Finish를 아래 그림과 같이 진행하면 됩니다.

 

CDS 뷰 정의를 저장하고 활성화하기 전에, CDS 뷰 구조를 정의해야 합니다. 이

나중에 CDS 뷰 내에서 템플릿을 변경할 수도 있습니다. 이를 위해서는 소스 코드 편집기(Source Code Editor)의 "Template view : 템플릿 보기"에서 고려하려는 템플릿을 마우스 오른쪽 버튼으로 클릭한 다음 "Insert : 삽입"을 클릭하면 됩니다. 아래 그림에 표시된 것과 같습니다.



사용 가능한 템플릿 외에도, 소스 코드 편집기(Source Code Editor)에서는 편집기 기본 설정에서 소스 코드 템플릿을 정의할 수 있는 옵션도 제공합니다. 템플릿을 정의하려면 "Windows • Preferences"를 선택하세요.

아래 그림에 표시된 대로 "Data Definition Templates : 데이터 정의 템플릿"을 검색하고 "New"를 클릭하여 사용자 정의 템플릿을 정의하세요.


Structure Definition


ABAP Data Dictionary에서 기존 테이블, 뷰 또는 다른 CDS 뷰에 대한 CDS 뷰 구조를 정의할 수 있습니다. 이를 위해 아래 코드에 표시된 DEFINE VIEW 문을 사용합니다. 이 문에서는 뷰에 포함되어야 하는 관련 데이터베이스 테이블과 관련 테이블 필드 집합을 지정합니다. SQL 뷰와 CDS 엔티티는 동일한 Namespace(Y와 Z로 시작하는)의 일부이므로 동일한 이름을 가져서는 안 됩니다.

@AbapCatalog.sqlViewName: 'ZCDS_EX_SQL02'
@AbapCatalog.compiler.compareFilter: true
@AbapCatalog.preserveKey: true
@AccessControl.authorizationCheck:#CHECK
@EndUserText.label: 'CDS to select all fields'
define view ZCDS_example_02
as select
*
from sflight

아래 예시에 표시된 대로, 데이터 원본 sflight 테이블에서 쉼표로 구분된 열 목록을 지정하여 필요한 열만 선택할 수 있습니다.

@AbapCatalog.sqlViewName: 'ZCDS_EX_SQL03'
@AbapCatalog.compiler.compareFilter: true
@AbapCatalog.preserveKey: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'CDS to select fields before FROM clause'
define view ZCDS_EXAMPLE_03
as select
carrid,
connid,
fldate,
price
from sflight

위 코드에 표시된 대로 FROM 절 전에 필드 선택을 수행할 수도 있으며, 아래 코드에 나와 있는 것처럼 중괄호 { }로 감싸서 FROM 절 이후에 수행할 수도 있습니다. 또한, AS 키워드를 사용하여 데이터 소스의 열 이름을 변경할 수도 있습니다. 그러나 별칭(alias)을 제공하는 것은 선택 사항입니다.

아래 코드는 CDS 뷰의 예시를 보여주며, 여기서는 FROM 절 이후에 필드가 선택되고 AS 키워드를 사용하여 데이터 소스의 열을 별칭(alias)으로 변경합니다.

@AbapCatalog.sqlViewName: 'ZCDS_EX_SQL04'
@AbapCatalog.compiler.compareFilter: true
@AbapCatalog.preserveKey: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'CDS to select fields after FROM clause'
define view ZCDS_EXAMPLE_04
as select from sflight
{
carrid AS AirlineNumber,
connid AS AirlineCode,
fldate AS FlightDate,
price AS Flightprice
}

아래 예시에 표시된 대로 열을 선택한 후, "Save :저장"을 클릭하세요([CTRL] + [S]), 그리고 데이터 정의를 "ACTIVATE : 활성화하세요([CTRL] + [F3]). 뷰가 활성화되면 시스템은 두 개의 Rpository Object를 생성합니다: CDS 엔티티와 SQL 뷰입니다. 활성화되기 전에는 SQL 뷰인 ZCDS_EX_SQL01이 ABAP 사전에 존재하지 않고 활성화되면 SQL 뷰 ZCDS_EX_SQL01이 Dictionary Object로 생성되고, 도표 그림1에 표시된 것처럼 ABAP Data Dictionary에서 확인할 수 있습니다.

@AbapCatalog.sqlViewName: 'ZCDS_EX_SQL_01'
@AbapCatalog.compiler.compareFilter: true
@AbapCatalog.preserveKey: true
@AccessControl.authorizationCheck:#NOT_ALLOWED
@EndUserText.label: 'CDS using one data source'
define view ZCDS_Example_01
as select from sflight
{
carrid,
connid
}

그림 1

이제 CDS 뷰 활성화 시 자동으로 생성되는 두 개의 Repository Object인 CDS 엔티티와 SQL 뷰의 의미를 알아보겠습니다.

■ CDS View Entity
이 Repository Object는 클라이언트 처리, 버퍼링, 필드 레이블 및 권한 확인(client handling, buffering, field labels, and authorization checks)을 위한 추가적인 의미 정보를 제공합니다. 이 개체는 데이터베이스에 생성되지 않기 때문에 ABAP Dictionary에서는 볼 수 없습니다. CDS 엔티티는 ABAP 애플리케이션에서 새로운 SQL 구문을 사용하여 Open SQL 문을 통해 직접 사용할 수 있지만, 사전 조건은 SAP NetWeaver Application Server for ABAP (AS ABAP) 7.4 SP05부터 도입된 New SQL 구문을 사용하는 것입니다.

■ SQL View Definition
이 Repository Object는 DDL을 사용하여 생성되는 Dictionary Object로 ABAP Dictionary에서 볼 수 있지만 편집할 수는 없습니다. 이 개체는 데이터베이스 개체를 나타내며 DDL 소스에서 사용 가능한 제한된 정보만을 나타냅니다.

아래 표는 두 개체에 대한 차이점을 정리한 내용입니다.

SQL View CDS Entity
ABAP repository object Not found in the ABAP repository
Represents the database object Not available in the database
No semantic information available Provides additional semantic information by using annotations
Is an ABAP structure with client field Is an ABAP structure without client field

 

반응형