-
[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