技術・ツール

CDSアノテーション駆動開発|@UI アノテーション完全ガイド

目次

はじめに

Fiori Elementsで画面を作るとき、画面コードは書きません。代わりにCDSビューに @UI.* アノテーションを付与し、これを設計図としてFiori Elementsが画面を生成します。

アノテーションの種類を把握していないと、「このフィルタバーはどう出すんだっけ」「Object Pageのタブはどう分けるんだっけ」と毎回ドキュメントを引き直すことになります。この記事では、実務で使用頻度の高い@UIアノテーションを網羅的に整理します。

CDSビューの基本はCDSビュー基礎を先に確認してください。


アノテーションの全体マップ

flowchart LR
  CDS["CDS View"] --> H["@UI.headerInfo
Object Pageヘッダ"] CDS --> L["@UI.lineItem
テーブル列"] CDS --> S["@UI.selectionField
検索フィルタ"] CDS --> F["@UI.facet
Object Pageタブ"] CDS --> FG["@UI.fieldGroup
フィールド集合"] CDS --> ID["@UI.identification
詳細画面ヘッダ項目"] CDS --> C["@UI.chart
ALP用チャート"] CDS --> PV["@UI.presentationVariant
表示切替"]
凡例 CDSが持つアノテーション種別 [ ] アノテーション名と用途

1. @UI.headerInfo

Object Pageのヘッダに表示する情報を定義します。

@UI.headerInfo: {
  typeName: '発注書',
  typeNamePlural: '発注書一覧',
  title: { value: 'PoId' },
  description: { value: 'Supplier' }
}
  • typeName/typeNamePlural:単数形/複数形の名称
  • title:ヘッダの主タイトルに表示する項目
  • description:サブタイトルに表示する項目

2. @UI.lineItem

List ReportやObject Page内のテーブル列を定義します。

@UI.lineItem: [{ position: 10, label: '発注番号' }]
key ebeln as PoId,

@UI.lineItem: [{ position: 20, label: '仕入先' }]
lifnr as Supplier,

@UI.lineItem: [{ position: 30, importance: #HIGH }]
netwr as NetAmount
  • position:列の表示順
  • label:列ヘッダ
  • importance:重要度(#HIGH/#MEDIUM/#LOW)。重要度低は狭い画面で非表示になる

3. @UI.selectionField

List Reportのフィルタバーに表示する検索項目を指定します。

@UI.selectionField: [{ position: 10 }]
lifnr as Supplier,

@UI.selectionField: [{ position: 20 }]
bukrs as CompanyCode

positionがフィルタバーでの並び順を決めます。


4. @UI.facet

Object Pageのタブ(ファセット)構造を定義します。

@UI.facet: [
  { id: 'general',
    purpose: #HEADER,
    type: #FIELDGROUP_REFERENCE,
    label: '基本情報',
    targetQualifier: 'GeneralInfo' },
  { id: 'items',
    type: #LINEITEM_REFERENCE,
    label: '明細',
    targetElement: '_Items' },
  { id: 'history',
    type: #FIELDGROUP_REFERENCE,
    label: '履歴',
    targetQualifier: 'History' }
]
  • purpose:#HEADERならヘッダに、省略ならタブに配置
  • type:#FIELDGROUP_REFERENCE(フィールド集合)または #LINEITEM_REFERENCE(テーブル)
  • targetQualifier:参照する fieldGroup の名前
  • targetElement:関連エンティティ(Navigation Property)の名前

5. @UI.fieldGroup

複数のフィールドを論理的にグルーピングします。@UI.facetから参照される「部品」として使います。

@UI.fieldGroup: [{ qualifier: 'GeneralInfo', position: 10 }]
bsart as DocumentType,

@UI.fieldGroup: [{ qualifier: 'GeneralInfo', position: 20 }]
bedat as DocumentDate

qualifierが一致するフィールドが、同じグループ内でpositionの順に表示されます。


6. @UI.identification

Object Pageのヘッダ直下の識別情報欄に表示するフィールドを指定します。主キーや参照コードに使います。

@UI.identification: [{ position: 10 }]
ebeln as PoId

7. @UI.chart(ALP用)

ALP実装ガイドでも触れたチャート定義です。

@UI.chart: [{
  title: '仕入先別発注額',
  chartType: #COLUMN,
  dimensions: [ 'Supplier' ],
  measures: [ 'NetAmount' ]
}]

8. @UI.presentationVariant

表示方法のバリアントを定義します。ALPでチャート/テーブルを切り替える場合に使います。

@UI.presentationVariant: [{
  visualizations: [
    { type: #AS_CHART },
    { type: #AS_LINEITEM }
  ],
  sortOrder: [{ by: 'NetAmount', direction: #DESC }]
}]

sortOrderでデフォルトのソート順も指定できます。


9. @UI.dataPoint(KPI表示)

OVPのKPIカードやObject Pageのヘッダで使う数値表示の書式を定義します。

@UI.dataPoint: {
  title: '今月売上',
  targetValue: 10000000,
  criticality: 'SalesStatus'
}
netwr as NetAmount

criticalityは色分け(赤/黄/緑)の条件を指す列を指定します。


アノテーションをどこに書くか

ABAP CDS Viewで直接定義

シンプルで一貫性がある反面、CDS変更のたびにTransportが必要です。

Metadata Extension (MDE)

既存CDSに対して、UIアノテーションだけを別ファイルで追加定義できます。

@Metadata.layer: #CUSTOMER
annotate view ZV_PurchaseOrder with {
  @UI.lineItem: [{ position: 10 }]
  PoId;
}

お客様環境のみのUI追加に向いています。Clean Core戦略(Clean Core戦略)の観点でも、標準CDSの直接変更を避けるMDEが推奨されます。


よくある疑問

Q. 値ヘルプ(F4)はどう定義しますか?

A. @Consumption.valueHelpDefinition というアノテーションで、値ヘルプ用のCDSビューを紐付けます。Fiori Elementsは自動で値ヘルプダイアログを生成します。

Q. 項目の多言語化は?

A. @EndUserText.label: '発注番号' をフィールドに付け、翻訳はTコードSE63で多言語対応します。ラベル表示は自動で言語切替されます。

Q. positionは連番でないとダメ?

A. ダメではないですが、10/20/30とスペースを空けて振るのが慣例です。後から挿入しやすくなります。

Q. アノテーションは大文字小文字区別ありますか?

A. キーワードは大文字小文字非依存ですが、慣例的に @UI.lineItem のようなキャメルケースを使います。


まとめ

  • @UI.*アノテーションはFiori Elementsの設計図
  • headerInfo / lineItem / selectionField / facet / fieldGroup / identification が基本6点
  • chart / presentationVariant / dataPoint は分析・KPI系で使う
  • Metadata Extensionを使えば標準CDSに触らずUIを追加できる
  • 値ヘルプ・多言語化も専用アノテーションが用意されている

次はFreestyle UI5 vs Fiori Elementsで、アノテーション駆動と自由実装の判断軸を整理します。


CDSアノテーションの書き方を覚えた後は、実際にCAPプロジェクトを作ってアノテーションがどう画面に反映されるかを確かめるのが一番の近道です。約15時間のハンズオン形式で、アノテーション駆動開発の実践感覚が身につきます。

▶ SAP Fiori UI5 & CAPM on BTP – Zero to Real Project 全97レクチャー / 評価4.6 / ※英語での受講になります
← Fiori Elements実装ガイド|Analytical List Page / Overview Page Freestyle UI5 vs Fiori Elements|判断軸と使い分け →
← 記事一覧に戻る