ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [RAP] #7 Annotation 정리
    SAP/RAP 2026. 3. 3. 21:00

     

     

     

     

     

     

     

     

     

     

     

     

     

    기본 Annotation

    @EndUserText.label: '설명'

     

    • CDS 엔티티 또는 필드의 사용자 표시용 기본 라벨

    UI 관련 Annotation

    주로 Projection View 필드 위 또는 Metadata Extension에 사용하며, Fiori Elements 화면 제어용이다.

    @UI.lineItem: [{ position: 70, label: '최대좌석수' }]
    • List Report 테이블 컬럼 표시
    • position : 컬럼의 위치
      label : 테이블의 컬럼 헤더명

    @UI.selectionField: [{ position: 10 }]
    • 필터바에 표시되는 필드. 즉, 검색을 위한 Input이 생성됨.

    @UI.hidden: true
    • UI에서 숨김 처리

    @UI:{
        headerInfo: { 
            typeName: 'SFLIGHT Typename',
            typeNamePlural: 'Flight Plural',  // 메인 페이지(List page) 테이블 제목
            title: { value: 'Carrid' },  // 상세 페이지(Object page) 제목
            description: { value: 'Planetype' } // 상세 페이지 제목의 설명
        }
    }

    Search 관련 Annotation

    @Search.searchable: true
    define root view entity ZSFLIGHT_CR_B20
        as projection on ZSFLIGHT_IR_B20
    {
      @Search.defaultSearchElement: true
      key Carrid,
      
      @Search.defaultSearchElement: true
      @Search.fuzzinessThreshold: 0.8
      Carrname,
      ...
    }

    @Search.searchable: true
    • 해당 View에서 검색 가능하도록 설정
    • View 상단에 선언
    • Search Input UI가 생성된다.
    @Search.defaultSearchElement: true
    • 기본 검색 대상 필드 지정
    @Search.fuzzinessThreshold: 0.8
    • 유사 검색 허용 범위
    • 0.8이면 80% 유사해도 검색됨

    Filter 관련 Annotation

    selectionField를 생성하면 기본적으로 첫 번째 사진과 같이 다중 값 필터가 가능한데

    두 번째 사진과 같이 단일 값 필터로 변경하려면 filter Annotation을 사용한다.

    @UI:{
        lineItem: [{ position: 10, label: '항공사' }],
        selectionField: [{ position: 10 }]
    }
    @Consumption.filter: { selectionType: #SINGLE }
    Carrid;

    @Consumption.filter: { selectionType: #SINGLE }
    • 단일 값만 입력 가능
    @Consumption.filter: { 
        selectionType: #SINGLE,
        multipleSelections: false,
        defaultValue: 'AZ'
    }
    • multipleSelections : 다중 선택 여부
    • defaultValue : 필터 기본값 설정

    Value Help 관련 Annotation

    @Consumption.valueHelpDefinition: [{ 
        entity: { name: '서치헬프이름', element: '필드명'}
    }]
    • F4 도움말 연결

    @Consumption.valueHelpDefinition: [{ 
        entity: { name: '/DMO/I_Carrier', element: 'AirlineID'},
        additionalBinding:[{
            localElement: 'Currency', element: 'CurrencyCode'
        }]
    }]
    • additionalBinding : Value Help View의 필드와 현재 화면(View)의 필드를 연결해서 필터 조건 또는 결과 컬럼으로 사용하겠다는 설정
    • 서치헬프에서 데이터를 선택하면 currency까지 데이터 바인딩 된다.

    Value Help 필터

    Carrid 먼저 선택 후 Connid 서치헬프 오픈 시 Carrid 선택 값으로 필터링 되어 나온다.

    @AccessControl.authorizationCheck: #NOT_REQUIRED
    @EndUserText.label: 'Consumption View (root, Projection view)'
    @Metadata.ignorePropagatedAnnotations: false
    @Metadata.allowExtensions: true
    @Search.searchable: true
    define root view entity ZSFLIGHT_CR_B20
        as projection on ZSFLIGHT_IR_B20
    {
        @Consumption.valueHelpDefinition: [{ 
            entity: { name: '/DMO/I_Carrier', element: 'AirlineID'},
            additionalBinding:[{
                localElement: 'Currency', element: 'CurrencyCode'
            }]
        }]
        key Carrid,
        
        @Consumption.valueHelpDefinition: [{
            entity: { name: '/DMO/I_Connection_StdVH', element: 'ConnectionID'},
            additionalBinding:[{
                localElement: 'Carrid', element: 'AirlineID'
            }]
        }]
        key Connid,
        ...
    }

    Value Help 직접 생성

    • Value Help 조회를 위한 CDS View 생성
    @AbapCatalog.viewEnhancementCategory: [#NONE]
    @AccessControl.authorizationCheck: #NOT_REQUIRED
    @EndUserText.label: 'Value Help Carrid'
    @Metadata.ignorePropagatedAnnotations: true
    @Search.searchable: true
    define view entity ZVH_CARRIER_B20 as select from /DMO/I_Carrier
    {
        @Search.defaultSearchElement: true -- SearchBar 검색 대상
        @Search.fuzzinessThreshold: 0.8
        @ObjectModel.text.element: [ 'Name' ]
        @UI.textArrangement: #TEXT_FIRST
        key AirlineID,
        @Search.defaultSearchElement: true -- SearchBar 검색 대상
        Name,
        @Search.defaultSearchElement: true -- SearchBar 검색 대상
        CurrencyCode
    }
    • 생성한 Value Help View 사용
    @AccessControl.authorizationCheck: #NOT_REQUIRED
    @EndUserText.label: 'Consumption View (root, Projection view)'
    @Metadata.ignorePropagatedAnnotations: false
    @Metadata.allowExtensions: true
    @Search.searchable: true
    define root view entity ZSFLIGHT_CR_B20
        as projection on ZSFLIGHT_IR_B20
    {
        @Search.defaultSearchElement: true
        @Consumption.valueHelpDefinition: [{ 
            entity: { name: 'ZVH_CARRIER_B20', element: 'AirlineID'},
            additionalBinding:[{
                localElement: 'Currency', element: 'CurrencyCode'
            }]
        }]
        @ObjectModel.text.element: [ 'Carrname' ]
        @UI.textArrangement: #TEXT_FIRST
        key Carrid,

    드롭다운 리스트

    ...
    @ObjectModel.resultSet.sizeCategory: #XS -- 드롭다운 리스트
    define view entity ZVH_CARRIER_B20 as select from /DMO/I_Carrier
    {
      ...
    }

    Value Help 단일 선택

    기본적으로 첫 번째 사진과 같이 다중 선택 모드인데, 두 번째 사진처럼 단일 선택으로 변경할 수 있다.

    ...
    define root view entity ZSFLIGHT_CR_B20
        as projection on ZSFLIGHT_IR_B20
    {
        @Search.defaultSearchElement: true
        @Consumption.valueHelpDefinition: [{ 
            entity: { name: 'ZVH_CARRIER_B20', element: 'AirlineID'},
            additionalBinding:[{
                localElement: 'Currency', element: 'CurrencyCode'
            }]
        }]
        @Consumption.filter: {   // 단일 선택
            selectionType: #SINGLE,
            multipleSelections: false
        }
        @ObjectModel.text.element: [ 'Carrname' ]
        @UI.textArrangement: #TEXT_FIRST
        key Carrid,

    텍스트 처리 관련 Annotation

    @ObjectModel.text.element: [ 'Carrname' ]
    @UI.textArrangement: #TEXT_LAST
    key Carrid,

    @ObjectModel.text.element: [ 'Carrname' ]
    • 코드 필드에 대한 텍스트 필드 지정
    • 즉, Carrid = 코드
            Carrname = 설명
    @UI.textArrangement: #TEXT_LAST
    • 화면에 표시 순서 제어
    옵션 의미
    #TEXT_FIRST 텍스트 (코드)
    #TEXT_LAST 코드 (텍스트)
    #TEXT_ONLY 텍스트만
    #TEXT_SEPARATE 따로 표시

    텍스트 강조 표시

    ...
    @ObjectModel.semanticKey: [ 'Carrid', 'Connid' ]
    define root view entity ZSFLIGHT_CR_B20
        as projection on ZSFLIGHT_IR_B20
    {
      ...
    }

    출력 시 데이터 정렬

     

    @Metadata.layer: #CORE
    @UI:{
        headerInfo: { 
            typeName: 'SFLIGHT Typename', // Object Page -> app title
            typeNamePlural: 'Flight Plural', // table title
            title: { value: 'Carrid' },
            description: { value: 'Planetype' }
        },
        presentationVariant: [{ // 데이터 정렬
            sortOrder: [
                { by : 'Carrid', direction: #DESC }, // 내립차순
                { by : 'Connid', direction: #ASC }   //오름차순
            ]
         }]
    }
    annotate view ZSFLIGHT_CR_B20
        with 
    {
      ...
    }

    기타 Annotation

    @Metadata.layer: #CORE
    annotate view ZSFLIGHT_CR_B20
        with 
    {
    ...
    }

     

    • Metadata Extension이 어떤 레이어에 속하는지를 정의
    • CORE = 기본 레이어

     

     

     

     

     

     

     

    'SAP > RAP' 카테고리의 다른 글

    [RAP] #8 RAP Header-Item 구조의 UI 구성  (1) 2026.03.03
    [RAP] #6 RAP  (0) 2026.03.01
    [RAP] #5 CDS View 추가 문법 (2)  (0) 2026.02.26
    [RAP] #4 CDS View 추가 문법 (1)  (0) 2026.02.25
    [RAP] #2 CDS View  (0) 2026.02.22
Designed by Tistory.