본문 바로가기
SAP Story/CDS View

DDL정의-(2) View 정의 - 개론(생성하기)

by 돈보따리 2022. 11. 15.
반응형

CDS View를 정의하는 방법에 대해서 알아보겠습니다.

 

문법

@AbapCatalog.sqlViewName: 'CDS_DB_VIEW' 
[@view_annot1]
[@view_annot2] ... 
[DEFINE] VIEW cds_entity 
            [name_list] 
            [parameter_list] 
            AS select_statement [;]

CDS View를 정의하는 문법의 구조는 위와 같습니다.
CDS View는 5부분으로 구분할 수 있습니다.

 

  ■ 주석(Annotation)
  ■ View 정의
  ■ Name List(Optional)
  ■ 파라미터(Optional)
  ■ Select 구문

 

위 5가지 항목에대해서 하나씩 알아보도록 하겠습니다.

 

CDS DDL(Data definition language)으로 CDS View를 정의합니다.  

CDS 는 Select 구문의 쿼리를 사용하여 구현합니다. 

주석 AbapCatalog.sqlViewName 은 DEFINE VIEW 를 사용하여 이름을 정의되기 전에 정의되어야 합니다. 

추가적인 주석 항목인 [@view_annot1], [@view_annot2]...항목들 또한 정의되어야 합니다. 

이것은 선택적으로 정의합니다. 

CDS View 에 대한 두개의 개체(Object)가 생성됩니다. 
두 개체의 각각에 대해 이름을 지정해야 합니다. 두 개체는 이름이 같을 수 없습니다. 

  ■ CDS 데이터베이스 View의 CDS_DB_VIEW 이름은 주석 @AbapCatalog.sqlViewName 뒤의 따옴포(")로 표시하여 정의합니다. 이 뷰는 ABAP Dictionary 에서 CDS View의 기술적은 요소입니다. ABAP Dictionary View에 대한 일반적인 규칙이 이 이름에 적용되며 대소문자를 구분하지 않습니다. (내부적으로 대문자로 변환됩니다.) 연관된 SQL View 가 데이터베이스에서 이 이름으로 생성됩니다. CDS View가 Follow-On 시스템으로 전송된 후에는 더 이상 데이터베이스 View에 지정된 이름을 변경할 수 없습니다.
  ■ CDS엔터티의 cds_entity 이름은 DEFINE VIEW 키워드 다음에 정의됩니다. (DEFINE은 선택적) 따옴표는 필요하지 않습니다. CDS 데이터베이스뷰의 이름을 따라야 하지만 30자리를 넘을 수 없습니다. CDS 엔터티는 CDS View의 모든 특성을 표현합니다.

 

두 이름 모두 ABAP Dictionary의 글로벌 데이터 유형과 클래스 라이브러리에 있는 글로벌 개체 유형의 네임스페이스에 있습니다. 그리고 각각은 유니크 해야 합니다. CDS 엔터티의 이름인 cds_entity는 다른 CDS DDL 구문에서 사용될 수 있습니다. 또는 ABAP 프로그램에서 사용되어 접근할 수 있습니다.

 

name_list 로 정의된 정보는 name_list 에 있는 View의 요소 이름을 정의하는데 사용할 수 있습니다. parameter_list 는 입력 매개 변수를 뷰에 할당하는 데 사용할 수 있습니다. 이러한 입력 매개변수는 뷰의 피연산자 위치에 지정할 수 있으며 View를 사용할 때 실제 매개변수를 지정할 수 있습니다.

 

메모

 

  ■ DEFINE VIEW를 사용하여 정의된 CDS View의 CDS 데이터베이스 View는 ABAP Workbench의 ABAP Dictionary 도구에 CDS_DB_VIEW라는 이름을 입력하여 표시할 수 있습니다. 하지만 여기에서 수정할수는 없습니다. 추가적으로 이 조회는 모든 정보를 제공하지 않습니다. CDS 엔터티인 cds_entity 는 여기에서 표시되지 않습니다.
  ■ CDS 데이터베이스 View 인 CDS_DB_VIEW 는 CDS DDL 및 ABAP에서 직접적으로 접근할 수 있습니다. 하지만 CDS 엔터티만 사용할 것을 강력하게 권고합니다. 그래야만 CDS View의 엔터티애 대한 모든 특성을 커버할 수 있습니다. 따라서 OPEN SQL 의 CDS 데이터베이스 View가 더 이상 사용되지 않습니다. (Release 7.50.)
  ■ ABAP Annotation은 ABAP Dictionary에서 더 기술적이고 의미적인 특징을 지정하여 사용할 수 있습니다. 프레임워크별 주석을 사용하여 요소에 다른 SAP 프레임워크에 대한 특정 의미 속성을 제공할 수 있습니다.
  ■ CDS DCL(Data Control Language)구문의 DEFINE ROLE을 사용하여 CDS 엔터티에 대한 CDS 역할(Role)이 정의된 경우, Open SQL을 사용하여 CDS 엔터티에 접근할 때 암묵적으로 액세스 제어가 기본으로 적용됩니다.  @AccessControl.authorizationCheck 주석에 대한 값으로 #NOT_ALLOWED 값을 사용하여 접근제어를 OFF 할 수 있습니다. 또는 Open Sql 쿼리에서 From 에  WITH PRIVILEGED ACCESS 를 추가하여 사용할 수 있습니다.
  ■ Open SQL SELECT 문과 이름 cds_entity를 사용하여 CDS 엔티티에 액세스하는 경우 구문 검사가 일반 구문 검사보다 엄격하게 수행됩니다.
  ■ 모든 CDS View는 DDL 소스코드를 가지고 있습니다. CDS View의 DDL 소스코드는 주석정의 DDLA 소스코드, CDS 메타데이터 확장의 DDLX 소스코드 및 CDS 역할의 DCL 소스코드와는 다른 편집기에서 편집됩니다. ADT 문서에서는 다양한 유형의 소스 코드가 생성되는 방법을 설명합니다. CDS 소스 코드는 ABAP Workbench의 Repository Browser(리포지토리 검색기)에 표시될 수도 있습니다.
  ■ CDS 뷰의 DDL 소스코드는 CDS 엔터티와 이름이 같을 필요는 없지만 이 이름을 사용하는 것이 좋습니다.
  ■ DDL 소스 코드가 전송되면 DDL 코드 이름과 여기에 정의된 CDS View 및 CDS 데이터베이스 View의 조합이 정의되며 더이상 이름을 변경하여 수정할 수 없습니다.
  ■ Core Data Service 의 CDS DDL 을 사용한 CDS View 프로그래밍은 ABAP Dictionary의 데이터 모델 구현에 포함된 작업 중 하나이며 일반적으로 일반 ABAP 어플리케이션 프로그래머의 책임이 아닙니다. CDS View가 한번 만들어지면 Open SQL Read 구문을 사용하는 ABAP 프로그램에서 사용되며 이를 허용할 수 있을 만큼 안정적이어야 합니다.

 


다음 CDS View는 Projection View DEMO_SPFLI와 동일한 방식으로 작동합니다. 

DEMO_CDS_PROJECTION 프로그램은 이 View를 사용하여 Select 합니다. 

전통적인 데이터베이스 View DEMO_SPFLI 에 접근하는 것과 다르게 CDS 엔터티 DEMO_CDS_SPFLI 를 실행한 결과값은 클라이언트 컬럼이 없습니다. CDS 데이터베이스 View DEMO_CDS_PRJCTN 는 클라이언트 컬럼을 출력합니다.

 

@AbapCatalog.sqlViewName: 'DEMO_CDS_PRJCTN' 
@AccessControl.authorizationCheck: #NOT_REQUIRED 
define view demo_cds_spfli 
as select from 
spfli 

key spfli.carrid, 
key spfli.connid, 
spfli.cityfrom, 
spfli.cityto 
}   


그럼 간단한 CDS View를 만들어 보도록 하겠습니다.

이클립스를 실행합니다. ( Haha Studio 또는 Eclipse에 ADT가 설치되어 있어야 합니다. )
이클립스를 실행하면 화면 우측 상단에 ABAP 아이콘을 클릭합니다.

위 아이콘이 보이지 않는다면 왼쪽의 Open Perspective 버튼을 클릭하여 ABAP을 선택합니다.

개발시스템에 접속이 되어있으면 Project Explorer 에 위와 같은 트리가 있습니다. 
CDS View 를 생성할 대상 시스템에서 개발클래스를 선택하고 마우스 우클릭을 합니다. 
NEW → Other ABAP Repository Object 메뉴를 실행합니다.

트리에 이미 Core Data Service 항목이 있다면 해당 항목에서 우클릭하여 New → Data Definition 을 실행해도 됩니다.

중간 검색칸에 Core를 입력하면 Core Data Service 폴더를 확인할 수 있습니다. 그 아래에 Data Definition을 선택합니다.

Name에 CDS View 이름을 입력합니다.  DEFINE VIEW 다음에 오는 이름으로 CDS 엔터티 이름입니다. 
Description 을 입력하고 Next를 실행합니다.

CTS 항목을 선택합니다. 
Choose from requests in witch I am involved 옵션의 아래에서 이미 만들어진 CTS 번호를 선택할 수 있습니다. 
Create a new request 옵션을 선택하고 Description을 입력하여 새로운 CTS 번호를 생성할 수도 있습니다. 
CTS 를 선택하고 Next를 실행합니다. 
( Finish를 선택해도 되지만 템플릿 소스를 획득하기 위해 꼭 Next를 실행합니다. )

템플릿 리스트를 확인할 수 있습니다. 리스트 중에서 Define View를 선택하고 Finish 를 실행합니다.

@AbapCatalog.sqlViewName: '${sql_view_name}' 
@AbapCatalog.compiler.compareFilter: true 
@AbapCatalog.preserveKey: true 
@AccessControl.authorizationCheck: #CHECK 
@EndUserText.label: '${ddl_source_description}' 
define view ${ddl_source_name_editable} as select from ${data_source_name} { 
      ${data_source_elements}${cursor} 
}

위 테플릿 소스를 가진 개발 화면이 열립니다. 

위 소스를 수정하여 CDS View를 개발합니다.

 


CDS View를 만들기 위해 5개의 포스트를 확인하세요.

  ■ 개론(생성하기)

  ■ 주석(Annotation)

  ■ Name List(Optional)

  ■ 파라미터(Optional)

  ■ Select 구문

 

반응형

댓글