본문 바로가기
SAP Story/CDS View

DDL정의-(2) View 정의 - 주석(Annotation)

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

CDS View 정의 시 사용하는 주석(Annotation)에 대해서 알아보겠습니다.

 

문법

... @annotation ...

효과

CDS View 정의 시 DEFINE VIEW 구문의 앞부분에서 annotation 으로 정의된 주석은 View에 대한 주석입니다. 

문자 @는 주석의 이름인 annotation 의 앞에 기록되어야 합니다. 

주석은 CDS 주석 정의에서 CDS 개체로 정의되어야 하며, 값 #PARAMETER를 사용하여 주석 정의 @Scope의 주석을 여기에 지정해야 합니다.

다음의 표에서 사용 가능한 ABAP 주석 항목과 의미 및 사용방법에 대해서 알아보겠습니다. 

ABAP 주석은 모든 CDS 엔티티에 대해 ABAP 런타임 환경에 의해 평가됩니다. 

다른 식별자를 사용한 주석은 일반적으로 프레임워크별 주석입니다. 

이들은 ABAP 런타임 환경에 의해 평가되지 않고 대신 다른 SAP 프레임워크에 의해 평가됩니다. 

 ■ AbapCatalog Annotations
 ■ AccessControl Annotations
 ■ ClientDependent Annotations (Obsolete)
 ■ ClientHandling Annotations
 ■ DataAging Annotations
 ■ EndUserText Annotations
 ■ Metadata Annotations
 ■ Examples

첫 번째 항목은 ABAP 주석의 이름인 annotation 입니다. 

그리고 두번째 항목은 그 의미를 설명합니다. 

세번째 항목은 사용가능한 주석의 값을 표현합니다. 

네 번째 항목에는 주석이 명시적으로 사용되지 않는 경우 주석 값에 대해 암묵적으로 설정된 값이 표시됩니다. 

다섯 번째 항목에는 값이 없는 주석이 지정된 경우 주석 정의에 따라 값에 대해 암묵적으로 설정되는 기본값이 표시됩니다. 

주석 값으로 지정된 항목이 없으면 값 없이 주석을 지정해야 합니다.

 

AbapCatalog Annotations

CDS View에 대한 기술적인 설정입니다.

(1) Annotation :: @AbapCatalog.buffering.status
(2) 의미 :: CDS View에 대한 테이블 버퍼링 활성화 및 비활성화
(3) 주석 값(Values)
      - #ACTIVE :: 테이블 버퍼링 활성화
      - #SWITCHED_OFF :: 테이블 버퍼링 비활성화
      - #NOT_ALLOWED :: 테이블 버퍼링 허용하지 않음
(4) 사용되지 않은 경우 기본값
      - #SWITCHED_OFF
(5) 값이 지정되지 않은 경우 기본값
      - #SWITCHED_OFF
(1) Annotation :: @AbapCatalog.buffering.type
(2) 의미 :: 테이블 버퍼링 유형
(3) 주석 값(Values) - #SINGLE :: 단일 값
    - #GENERIC :: 일반 영역
    - #FULL :: 전체
    - #NONE :: 없음
(4) 사용되지 않은 경우 기본값
    - #NONE
(5) 값이 지정되지 않은 경우 기본값
    - #NONE
(1) Annotation :: @AbapCatalog.buffering.numberOfKeyFields
(2) 의미 :: 일반 영역의 테이블 버퍼링에서 키 엘리먼트 수
(3) 주석 값(Values)
    - 0 ~ K-1 까지의 숫자 (K값은 키 엘리먼트의 수)
(4) 사용되지 않은 경우 기본값
    - 0
(5) 값이 지정되지 않은 경우 기본값
    - 0
(1) Annotation :: @AbapCatalog.compiler.compareFilter
(2) 의미 :: CDS View의 경로 표현(A.FieldName)에서 필터 조건의 평가를 정의
(3) 주석 값(Values)
     - true :: 경로 표현식에서 두 번 이상 발생하는 연결의 필터 조건을 비교하고 일치하는 경우 연결된 조인 표현식이 한 번만 생성됨
     - false :: 필터 조건과의 각 연결에 대해 별도의 조인 식이 생성되고 평가됨
(4) 사용되지 않은 경우 기본값
     - false
(5) 값이 지정되지 않은 경우 기본값
     - false
(1) Annotation :: @AbapCatalog.dbHints[ ].dbSystem
(2) 의미 :: 데이터베이스 힌트로 저징된 데이터베이스 시스템
(3) 주석 값(Values)
     - #ADA :: SAP MaxDB
     - #DB2 :: IBM DB2
     - #DB4 :: IBM DB2 for AS/400
     - #DB6 :: IBM DB2 UDB
     - #INF :: Informix - #MSS :: Microsoft SQL Server
     - #ORA :: Oracle DB
     - #HDB :: SAP HANA database
     - #ASE :: Sybase ASE
     - #ALL :: all database systems
(4) 사용되지 않은 경우 기본값
     - 없음
(5) 값이 지정되지 않은 경우 기본값
     - 없음
(1) Annotation :: @AbapCatalog.dbHints[ ].hint
(2) 의미 :: 데이터베이스 힌트
(3) 주석 값(Values)
     - 플랫폼에 대한 데이터베이스 힌트
(4) 사용되지 않은 경우 기본값
     - 없음
(5) 값이 지정되지 않은 경우 기본값
     - 없음
(1) Annotation :: @AbapCatalog.preserveKey
(2) 의미 :: CDS View의 CDS 데이터베이스 View에 대한 정의를 지정
(3) 주석 값(Values)
     - true :: CDS 데이터베이스 View의 키필드는 추가 Key에 따라 정의됨
     - false :: CDS 데이터베이스 View의 키 필드는 추가 KEY(키)에 관계없이 ABAP Dictionary의 기존 View에 대해 결정됨
(4) 사용되지 않은 경우 기본값
     - false
(5) 값이 지정되지 않은 경우 기본값
     - false
(1) Annotation :: @AbapCatalog.sqlViewName
(2) 의미 :: CDS View에 대한 CDS 데이터베이스 View 이름
(3) 주석 값(Values)
     - 최대 16자리의 문자열(문자, 숫자, 언더바 사용가능)
(4) 사용되지 않은 경우 기본값
     - 없음
(5) 값이 지정되지 않은 경우 기본값
     - 없음
(1) Annotation :: @AbapCatalog.viewEnhancementCategory[ ]
(2) 의미 :: CDS View Enhancements를 사용하여 CDS View를 어떻게 확장하는지 정의, 주석 배열의 대괄호 안에 쉼표로 구분된 값 리스트를 지정할 수 있음
(3) 주석 값(Values)
     - #PROJECTION_LIST :: Select 리스트 및 추가적인 연관의 확장을 허용함. SELECT 목록에 집계 식이 포함되어 있거나 UNION 절이 있는 CDS View의 확장은 추가 값을 사용하여 허용되어야 함
     - #GROUP_BY :: 집계되거나 집계되지 않은 요소는 집계된 식과 함께 SELECT 목록에 추가할 수 있으며 GROUP-BY 절의 관련 확장도 허용됨, #PROJECTION_LIST와 함께만 지정할 수 있음
     - #UNION :: Union 조항이 있는 CDS View의 SELECT 목록을 확장할 수 있음, #PROJECTION_LIST와 함께만 지정할 수 있음
     - #NONE :: 확장이 허용되지 않음, 다른 값과 함께 지정할 수 없음
(4) 사용되지 않은 경우 기본값
     - #PROJECTION_LIST
(5) 값이 지정되지 않은 경우 기본값
     - #PROJECTION_LIST

참고

  ■ 각각의 CDS View 정의는 ABAP 주석 @AbapCatalog.sqlViewName 을 반드시 포함해야 합니다. ABAP 사전에서 CDS 데이터베이스 View 이름으로 정의됩니다.
  ■ CDS View가 활성화 되어 시스템에 반영되면, 데이터베이스 View 이름은 더이상 변경할 수 없습니다.
  ■ 주석 배열 AbapCatalog.viewEnhancementCategory[ ], #GROUP_BY, #UNION 은 기본 값인 #PROJECTION_LIST 과 같이 정의 되어야 합니다. #NONE 값은 다른 값들을 제외합니다.
  ■ 집계 표현식 또는 UNION 이 있는 View의 확장은 결과셋의 카디널리티를 수정합니다. 즉, 이러한 확장은 View를 사용하는 다른 View가 카디널리티에 대한 변경사항을 처리할 수 있도록 View에 특별한 권한이 있어야 합니다.
  ■ 주석 @AbapCatalog.compiler.compareFilter 의 값은 true 를 사용하는 것이 좋습니다. 신규 CDS View를 생성할 때 ADT 는 제안합니다.

 


AccessControl Annotations

CDS View에 대한 접근 제어를 정의합니다.

 

(1) Annotation :: @AccessControl.authorizationCheck
(2) 의미 :: Open SQL을 사용하여 CDS View에 접근할 때 암묵적인 접근 제어를 정의
(3) 주석 값(Values)
     - #CHECK :: OPEN Sql을 사용하여 CDS View에 접근하는 경우, CDS 권한 역할이 View에 지정된 경우 접근 제어가 내부적으로 실행됨. CDS View에 지정된 역할이 없는 경우 문법 점검에서 경고를 발생.
     - #NOT_REQUIRED :: #CHECK 와 같지만, 문법 점검에서 경고를 발생하지 않음.
     - #NOT_ALLOWED :: 접근제어가 실행되지 않음. 이것은 View에 대한 역할의 DCL 소스코드에서 문법 점검에서 경고를 생성함.
     - #PRIVILEGED_ONLY :: 권한이 있는 연결
(4) 사용되지 않은 경우 기본값
     - #CHECK
(5) 값이 지정되지 않은 경우 기본값
     - #CHECK

참고

  ■ CDS View 생성 시 액세스 제어가 제공되지 않지만 나중에 어떤 역할을 정의할 수 있는 #NOT_REQUIRED 값이 권장됩니다.
  ■ #NOT_ALLOWED 값은 Open SQL에서 CDS View에 액세스할 때 내부적인 액세스 제어를 끕니다. FROM 절에서 WITH_PRIVILEGED_ACCESS를 추가하여 이 주석에 주석을 달지 않은 View에 대한 액세스 제어를 끌 수 있습니다.

SELECT *
       FROM demo_cds_auth_literal WITH PRIVILEGED ACCESS
       ORDER BY carrid
       INTO TABLE @DATA(result).

  ■ 클라이언트간 접근에서는 CDS 접근제어가 동작하지 않습니다. 따라서 Open SQL에서 클라이언트 및 클라이언트 지정 추가는 액세스 제어가 수행되지 않는 CDS 엔티티에 액세스할 때만 사용할 수 있습니다. 주석  @AccessControl.authorizationCheck:#NOT_ALLOWED 를 사용하는 것은 클라이언트 간 액세스 대상이 되는 CDS View 에만 지정하는 것을 권장합니다.

 


ClientDependent Annotations (폐기됨,Obsolete)

CDS View에 대한 클라이언트를 제어하는 것을 정의합니다. (구식,폐기됨, Obsolete)

(1) Annotation :: @ClientDependent
(2) 의미 :: Open SQL을 사용하여 CDS View에 액세스하는 경우 클라이언트 처리를 정의 (폐기됨)
(3) 주석 값(Values)
     - true :: CDS View는 클라이언트별로 다름. ABAP 프로그램 관점에서 View의 CDS 엔티티 필드는 클라이언트 컬럼을 다루지 않음. Select 를 사용하여 접근할 때, 자동적으로 클라이언트 제어가 적용됨
     - false :: CDS View 는 클라이언트간 View 임. 클라이언트 제어가 자동적으로 적용되지 않음
(4) 사용되지 않은 경우 기본값
     - 없음
(5) 값이 지정되지 않은 경우 기본값
     - True

참고

  ■ 폐기된 주석 @ClientDependent 는 주석 @ClientHandling.type 과 @ClientHandling.algorithm 으로 대체됩니다.
  ■ 폐기된 주석 @ClientDependent 는 사용되지 않는 경우 기본값은 없습니다. 주석 @ClientDependent 또는  @ClientHandling이 정의되지 않은 경우, 기본값은 주석 @ClientHandling 의 기본값이 적용됩니다.
  ■ 폐기된 주석 @ClientDependent 는 주석 @ClientHandling 과 같이 지정할 수 없습니다.

 


ClientHandling Annotations

CDS View에 대한 클라이언트를 제어하는 것을 정의합니다.

(1) Annotation :: @ClientHandling.type
(2) 의미 :: Open SQL을 사용하여 CDS View에 액세스할 때 클라이언트 종속성을 정의
(3) 주석 값(Values)
     - #CLIENT_DEPENDENT :: CDS View는 클라이언트별로 다름. SELECT 를 사용하여 접근할 때 클라이언트 제어가 자동 수행됨
     - #CLIENT_INDEPENDENT :: CDS View는 클라이언트간 기능임. 클라이언트 제어가 자동적으로 수행되지 않음
     - #INHERITED :: CDS View에 대한 클라이언트 종속성은 사용되는 데이터 소스에 의해 결정됨. 데이터 소스가 클라이언트 간인 경우, CDS View도 동일하게 적용.
(4) 사용되지 않은 경우 기본값
     - #INHERITED
(5) 값이 지정되지 않은 경우 기본값
     - #INHERITED
(1) Annotation :: @ClientHandling.algorithm
(2) 의미 :: CDS View에 접근하기 위해 Open Sql을 사용할 떄 클라이언트 제어를 정의
(3) 주석 값(Values)
     - #NONE :: 내부적인 클라이언트 처리가 수행되지 않음
     - #AUTOMATED :: 내부적인 클라언트 처리가 수행됨
     - #SESSION_VARIABLE :: 내부적인 클라언트 처리가 수행됨. 이것의 성능은 세션 변수 $session.client 의 평가에 의해 내부적으로 지원됨
(4) 사용되지 않은 경우 기본값
     - #AUTOMATED
(5) 값이 지정되지 않은 경우 기본값
     - #AUTOMATED

참고

  ■ 주석 @ClientHandling 은 폐기된 주석 @ClientDependent 와 같이 지정될 수 없습니다.

 


DataAging Annotations

CDS View에 대한 폐기된 데이터의 제어를 정의합니다.

(1) Annotation :: @DataAging.noAgingRestriction
(2) 의미 :: CDS View에 접근하기 위해 Open SQL을 사용할 때, SAP HANA 데이터베이스의 폐기된 데이터 제어를 정의
(3) 주석 값(Values)
     - true :: Open Sql 은 모든 데이터를 조회
     - false :: Open Sql은 최근 데이터만을 조회
(4) 사용되지 않은 경우 기본값
     - false
(5) 값이 지정되지 않은 경우 기본값
     - true

 


EndUserText Annotations

CDS View의 번역가능한 텍스트입니다.

(1) Annotation :: @EndUserText.label
(2) 의미 :: CDS View의 번역가능한 단문
(3) 주석 값(Values)
     - 최대 60자리 문자열
(4) 사용되지 않은 경우 기본값
     - 없음
(5) 값이 지정되지 않은 경우 기본값
     - 없음

참고

  ■ EndUserText 를 사용하여 소개된 ABAP 주석은 CDS 개체에 대해 번역 가능한 의미 텍스트를 정의하는 데 사용됩니다. 이와 같은 주석의 값은 언어 키가 있고 번역 가능한 특수 테이블에 저장됩니다. 소스 코드에 지정된 값은 CDS 소스 코드의 원래 언어로 된 텍스트로 구성되어야 하며 필요한 언어로 번역됩니다. 클래스 CL_DD_DDL_ANNOTATION_SERVICE 의 메소드는 언어에 대한 입력 매개변수로 지정된 텍스트를 읽습니다. 입력 매개변수에 언어를 지정하지 않은 경우 텍스트 환경 언어(현재 세션 언어값)가 기본값으로 사용됩니다. 만약 언어에 대한 텍스트가 없다면, AS ABAP의 두번째 언어가 사용됩니다.


Metadata Annotations

CDS View에서 메타데이터 처리를 정의합니다.

(1) Annotation :: @Metadata.allowExtensions
(2) 의미 :: 메타데이터 확장에서 주석을 확장할 수 있는지 여부를 정의
(3) 주석 값(Values)
     - true :: 현재 CDS View를 확장할 수 있음
     - false :: 현재 CDS View를 확장할 수 없음
(4) 사용되지 않은 경우 기본값
     - false
(5) 값이 지정되지 않은 경우 기본값
     - true
(1) Annotation :: @Metadata.ignorePropagatedAnnotations
(2) 의미 :: 주석 API CL_DD_DDL_ANNOTATION_SERVICE 를 사용하여 주석의 분석을 사용할 수 있는 지 여부를 정의
(3) 주석 값(Values)
     - true :: 현재 CDS 엔티티의 직접 및 파생 주석만 적용
     - false :: 사용된 CDS 엔티티의 상속된 주석도 적용
(4) 사용되지 않은 경우 기본값
     - false
(5) 값이 지정되지 않은 경우 기본값
     - true

<예제1>

CDS View 'business_partner'에 대한 ABAP 주석을 사용하여 추가 속성을 정의합니다. 
(필수 주석 항목인  @AbapCatalog.sqlViewName 은 제외합니다.) 
단문은  Business partner 이고, CDS View는 클라이언트 간 입니다.

@AbapCatalog.sqlViewName: 'BPA_VW' 
@EndUserText.label:       'Business partner' 
@ClientDependent:         false 
define view business_partner as 
  select from snwd_bpa 
         { key snwd_bpa.bp_id as id, 
               snwd_bpa.bp_role as role, 
               snwd_bpa.company_name, 
               snwd_bpa.phone_number }
@EndUserText.label: 'Business partner'
단문으로 business_partner 가 정의됩니다. 번역 가능한 텍스트 요소 입니다.
@ClientDependent: false
클라이언트 간 View로 정의합니다.

 


<예제2>

CDS View 'business_partner'에 대한 단일 테이블 버퍼링을 SAP 버퍼링에 활성화 합니다. 

@AbapCatalog.sqlViewName:      'BPA_VW'
@AbapCatalog.buffering.status: #ACTIVE
@AbapCatalog.buffering.type:   #SINGLE
define view business_partner as
  select from snwd_bpa
         { key snwd_bpa.bp_id as id,
               snwd_bpa.bp_role as role,
               snwd_bpa.company_name,
               snwd_bpa.phone_number }
@AbapCatalog.buffering.status: #ACTIVE
테이블 버퍼링을 활성화 합니다.
@AbapCatalog.buffering.type: #SINGLE
버퍼링 유형을 SINGLE로 지정합니다.

 


<예제3>

CDS View 'business_partner'에 대하여 일반영역의 Key 요소에 대한 테이블 버퍼링을 활성화 합니다. 

@AbapCatalog.sqlViewName:                 'BPA_VW'
@AbapCatalog.buffering.status:            #ACTIVE
@AbapCatalog.buffering.type:              #GENERIC
@AbapCatalog.buffering.numberOfKeyFields: 1
define view business_partner as
  select from snwd_bpa
        { key snwd_bpa.bp_id as id,
              snwd_bpa.bp_role as role,
              snwd_bpa.company_name,
              snwd_bpa.phone_number }
@AbapCatalog.buffering.status: #ACTIVE
테이블 버퍼링을 활성화 합니다.
@AbapCatalog.buffering.type: #GENERIC
버퍼링 유형은 일반 영역입니다.
@AbapCatalog.buffering.numberOfKeyFields: 1
버퍼링 Key 요소는 1개 입니다.

 

 

반응형

댓글