技術・ツール

Fiori×OData|FioriアプリがODataをどう使うか・Fiori Elementsの仕組み

目次

はじめに

このODataシリーズの最終回では、Fioriアプリが裏側でODataをどのように使っているかを解説します。Fioriは「綺麗な画面」だけでなく、ODataを通じてSAPのデータにアクセスする一貫したアーキテクチャを持っています。

本記事で扱う内容は以下の3つです。

  1. FioriアプリのアーキテクチャとOData — 画面の裏側で何が起きているか
  2. SAPUI5のODataモデル — データバインディングの仕組み
  3. Fiori Elements — CDS Viewのアノテーションから自動生成されるUI

なぜこの知識が必要か(why so):Fiori アプリのカスタマイズや新規開発では、「画面に表示されるデータがどこから来るか」を理解する必要があります。答えはすべて OData です。OData サービスの構造を知っていれば、Fiori の動作原理が理解でき、問題発生時の原因切り分けも格段に速くなります。


Fiori アプリのアーキテクチャと OData

Fiori アプリの構成要素

SAP Fiori アプリは、大きく3つの層で構成されています。

flowchart LR
  subgraph "ブラウザ(**クライアント**側)"
    A["SAPUI5\n(JavaScriptフレームワーク)"]
    B["ODataモデル\n(データ管理)"]
    A --> B
  end
  subgraph "SAP **Gateway**"
    C["ODataサービス\n(HTTPエンドポイント)"]
  end
  subgraph "SAP**バックエンド**"
    D["CDS View / DPC\n(データ取得・更新)"]
    E["ビジネスデータ\n(テーブル)"]
    D --> E
  end
  B -->|"HTTP/OData\nGET/POST/PUT/DELETE"| C
  C --> D
凡例 データの流れ [ ] 各コンポーネントの役割
技術役割
クライアントSAPUI5(JavaScript)UI の描画、ユーザー操作の処理、OData リクエストの送信
GatewaySAP GatewayOData プロトコルの処理、認証、ルーティング
バックエンドCDS View / DPC(Data Provider Class:ODataのバックエンドロジックを実装するABAPクラス)データの取得・更新、ビジネスロジックの実行

Fiori アプリのすべてのデータ操作は OData を経由するのが基本原則です。画面に表示されるデータの取得、ユーザーが入力したデータの保存、検索条件によるフィルタリング――すべてが OData リクエストとして実行されます。

ユーザー操作と OData リクエストの対応

ユーザーが Fiori アプリ上で行う操作は、裏側で以下の OData リクエストに変換されています。

ユーザー操作OData リクエストクエリオプション
一覧画面を開くGET /EntitySet$top, $skip(ページング)
検索条件を入力して検索GET /EntitySet?$filter=...$filter
一覧から1件を選択して詳細表示GET /EntitySet('key')$expand(関連データ)
新規作成して保存POST /EntitySet
編集して保存PUT / MERGE(V2)/ PATCH(V4) /EntitySet('key')
削除DELETE /EntitySet('key')
ソートGET /EntitySet?$orderby=...$orderby
項目の値ヘルプ(ドロップダウン)GET /ValueHelpSet$filter(入力中の文字でフィルタ)

補足:Fioriアプリの実際の動作ではMERGE(V2)やPATCH(V4)による部分更新が一般的です。PUTはエンティティ全体の置き換えを意味するため、変更したフィールドだけを送信するMERGE/PATCHの方が効率的で、SAPUI5のODataモデルもデフォルトでこの方式を採用しています。

読者への示唆(so what):Fiori アプリが「遅い」「データが表示されない」といった問題は、ブラウザの開発者ツール(F12)の Network タブで OData リクエストを確認することで原因を特定できます。どの URL にリクエストが飛んでいるか、レスポンスのステータスコードは何か、レスポンス時間はどれくらいか――これらを確認するだけで、問題の層(フロントエンド/Gateway/バックエンド)を切り分けられます。OData のエラーパターンと切り分け方法についてはODataサービスのテスト・デバッグで解説しています。


SAPUI5 の OData モデル

OData モデルとは

SAPUI5 では、OData モデルがアプリケーションとバックエンドの間のデータ管理層として機能します。UI のコントロール(テーブル、フォーム、入力フィールドなど)は OData モデルにデータバインドされており、モデルのデータが変わるとUIが自動的に更新されます。

flowchart LR
  subgraph "SAPUI5 アプリ"
    UI["UIコントロール\n(テーブル・フォーム)"] -->|"データバインディング\n{PropertyName}"| M["ODataモデル\n(データキャッシュ)"]
  end
  M -->|"GETリクエスト\n(自動送信)"| S["ODataサービス"]
  S -->|"JSONレスポンス"| M
凡例 データの流れ [ ] 各コンポーネントの役割

読者への示唆(so what):ODataモデルの仕組みを理解していると、データが画面に反映されない問題のデバッグ時に、モデルのキャッシュ状態やバインディングパスの誤りを効率的に特定できます。

OData V2 モデルV4 モデル

SAPUI5 では OData のバージョンに応じて異なるモデルクラスを使います。

モデルクラス名特徴
V2 モデルsap.ui.model.odata.v2.ODataModel現在最も広く使われている。バッチリクエスト対応
V4 モデルsap.ui.model.odata.v4.ODataModel新しい標準。より効率的なデータ取得

S/4HANA Cloudの新規開発ではV4モデルが推奨されます。既存のSEGWベースのサービスを利用する場合はV2モデルを使います。プロジェクトで使用するODataバージョンはバックエンドのサービス実装方式に依存するため、先にサービス側の方針を確認してください。

バッチリクエスト

SAPUI5 の OData モデルは、複数のリクエストを1つの HTTP リクエストにまとめて送信する「バッチリクエスト」をサポートしています。

flowchart LR
  subgraph "バッチなし(3回のHTTPリクエスト)"
    A1["GET /HeaderSet"] --> A2["GET /ItemSet"] --> A3["GET /StatusSet"]
  end
  subgraph "バッチあり(1回のHTTPリクエスト)"
    B1["POST /$batch\n中身:\nGET /HeaderSet\nGET /ItemSet\nGET /StatusSet"]
  end
凡例 リクエストの順序 [ ] HTTPリクエストの内容

なぜバッチが重要か(why so):Fiori アプリの1画面には複数のデータソースが表示されることが多く(ヘッダ情報、明細一覧、ステータスなど)、それぞれ別の OData リクエストが必要です。バッチリクエストにより、これらを1回のHTTP通信にまとめることで、ネットワークのラウンドトリップを削減しパフォーマンスを向上させます。

パフォーマンス問題の調査では、ブラウザのNetworkタブで$batchリクエストの中身を展開し、不要なリクエストが含まれていないかを確認することが第一歩です。


Fiori Elements

Fiori Elements とは

Fiori Elements は、CDS View のアノテーションを基にFiori の UIを自動生成する仕組みです。開発者が HTML や JavaScript を書かなくても、CDS View のアノテーション(@UI.*)を定義するだけで標準的な画面が生成されます。

従来の Freestyle Fiori との違い

項目Freestyle FioriFiori Elements
UI の実装開発者が SAPUI5 のコードを手書きCDS View のアノテーションから自動生成
開発工数高い(HTML/JS/CSS を書く)低い(アノテーション定義のみ)
カスタマイズ性完全に自由テンプレートの範囲内(拡張は可能)
UX の一貫性開発者のスキルに依存SAP のデザインガイドラインに自動準拠
メンテナンスUIコード+バックエンドの両方アノテーション変更のみで済むことが多い

Fiori Elements のテンプレート

Fiori Elements には、業務パターンに応じた**テンプレート(フロアプラン)**が用意されています。

テンプレート用途画面構成
List Reportデータの検索・一覧表示フィルタバー + テーブル
Object Page1件のデータの詳細表示・編集ヘッダー + セクション
Worklistシンプルな作業一覧テーブル(フィルタバーなし)
Overview Pageダッシュボード的な概要表示カード形式の複数ビュー
Analytical List Page分析+一覧の統合グラフ + テーブル
flowchart LR
  subgraph "よくある画面遷移"
    A["List Report\n(検索・一覧)"] -->|"1件選択"| B["Object Page\n(詳細・編集)"]
  end
  subgraph "ODataリクエスト"
    C["GET /EntitySet\n?$filter=...\n(一覧取得)"]
    D["GET /EntitySet('key')\n?$expand=...\n(詳細取得)"]
  end
  A --> C
  B --> D
凡例 画面遷移 / データの対応関係 [ ] テンプレート名またはリクエスト内容

CDS View アノテーションと Fiori Elements の対応

Fiori Elements は CDS View の @UI アノテーションを読み取って画面を構成します。CDS View のアノテーション体系についてはCDS Viewとは何か?S/4HANAのデータモデリングを支える新しい基盤で解説しています。

アノテーションFiori Elements での効果
@UI.lineItem: [{position: 10}]List Report のテーブルに列として表示(position で表示順を制御)
@UI.selectionField: [{position: 10}]List Report のフィルタバーに検索条件として表示
@UI.identification: [{position: 10}]Object Page のフィールドとして表示
@UI.headerInfoObject Page のヘッダー部分(タイトル、サブタイトル、画像)を定義
@UI.facetObject Page のセクション構成を定義
@UI.hidden: true画面に表示しない(内部データとして使用)

具体例:CDS View アノテーションから List Report が生成されるまで

define view entity Z_C_PurchaseOrder
  as projection on Z_I_PurchaseOrderHeader
{
      @UI.selectionField: [{ position: 10 }]
      @UI.lineItem: [{ position: 10, label: '発注番号' }]
  key PurchaseOrder,

      @UI.selectionField: [{ position: 20 }]
      @UI.lineItem: [{ position: 20, label: '会社コード' }]
      CompanyCode,

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

      @UI.lineItem: [{ position: 40, label: '作成日' }]
      CreatedAt,

      _Item
}

この CDS View から生成される List Report は以下のような構成になります。

画面要素生成元
フィルタバーに「発注番号」「会社コード」の入力欄@UI.selectionField
テーブルに「発注番号」「会社コード」「仕入先」「作成日」の4列@UI.lineItem
テーブルの列順序position の値で制御

HTML/JavaScript を1行も書かずに、CDS View のアノテーションだけで検索画面が完成するのが Fiori Elements の強みです。


OData シリーズ全体の振り返り

本シリーズ全5回で扱った内容を整理します。

flowchart LR
  subgraph "第1回:ODataの基礎"
    A1["エンティティ設計\nクエリオプション"]
  end
  subgraph "第2回:SAP×OData"
    A2["SAP Gateway\nFES/BES構成"]
  end
  subgraph "第3回:サービスの作り方"
    A3["SEGW方式\nRAP方式"]
  end
  subgraph "第4回:テスト・デバッグ"
    A4["Gateway Client\nエラーログ"]
  end
  subgraph "第5回:Fiori×OData"
    A5["SAPUI5モデル\nFiori Elements"]
  end
  A1 --> A2 --> A3 --> A4 --> A5
凡例 シリーズの流れ [ ] 各回の主要トピック

各回の詳細トピック(Navigation Property、処理フロー、使い分け判断基準、頻出エラーパターン、アノテーション体系など)は下表を参照してください。

記事主要トピック
1ODataとは何かエンティティ設計、Navigation Property、クエリオプション
2SAP×ODataSAP Gateway、FES/BES構成、ODataリクエスト処理フロー
3ODataサービスの作り方SEGW方式とRAP方式の比較、使い分けの判断基準
4テスト・デバッグGateway Client、エラーログ、頻出エラーパターン
5Fiori×OData(本記事)SAPUI5のODataモデル、Fiori Elements、アノテーション

よくある疑問

Q1. Fiori Elements と Freestyle Fiori はどちらを選ぶべきですか?

原則として Fiori Elements を第一候補とし、Elements のテンプレートでは実現できない要件がある場合にのみ Freestyle を選びます。

選択基準Fiori ElementsFreestyle
標準的な一覧・詳細画面✅ 最適不要
高度にカスタマイズされたUIテンプレート拡張で対応✅ 必要な場合のみ
開発スピード重視✅ 圧倒的に速い工数が大きい
SAP の推奨標準推奨Clean Core戦略に沿った開発方式)限定的な場面のみ

Q2. Fiori アプリから直接 ABAP を呼ぶことはできますか?

Fiori(SAPUI5)はブラウザ上で動く JavaScript アプリのため、ABAP を直接呼ぶことはできません。すべてのバックエンドアクセスは OData サービスを経由します。ABAP のロジックを実行したい場合は、OData サービスの Function Import(V2)や Action(V4)として公開し、Fiori 側からHTTPリクエストで呼び出します。Function Import(V2)やAction(V4)は、ODataサービスに独自の操作(例:発注の承認、在庫の払出など)を追加する仕組みです。

Q3. Fiori Launchpad とは何ですか?

Fiori Launchpad は、複数の Fiori アプリを統合的に管理・起動するポータル画面です。ユーザーはブラウザから Fiori Launchpad にログインし、タイルをクリックして各アプリを起動します。各タイルの裏側で、対応する OData サービスが呼び出されます。

Q4. OData 以外のデータアクセス方法は Fiori にありますか?

SAPUI5 は OData モデル以外にも JSON モデルや XML モデルをサポートしていますが、これらはクライアント側のローカルデータ用です。SAP バックエンドのデータにアクセスする場合は、OData が標準的かつ推奨される手段です。


まとめ

  • Fiori アプリのすべてのデータ操作は OData サービスを経由しており、ユーザーの画面操作は裏側で GET / POST / PUT / DELETE に変換されている
  • SAPUI5 の OData モデルがアプリとバックエンドの間のデータ管理層として機能し、データバインディングにより UI が自動更新される
  • バッチリクエストにより、複数の OData リクエストを1回の HTTP 通信にまとめてパフォーマンスを向上させている
  • Fiori Elements は CDS View の @UI アノテーションから UI を自動生成する仕組みであり、HTML/JavaScript を書かずに標準的な画面を構築できる
  • 新規開発では Fiori Elements を第一候補とし、テンプレートで実現できない要件がある場合のみ Freestyle を選択する
  • 問題発生時はブラウザの開発者ツール(Network タブ)で OData リクエストを確認することで、フロントエンド/Gateway/バックエンドの切り分けが可能

FioriとODataの連携をさらに深く理解するには、SAPUI5のデータバインディングやFiori Elementsの実装を実際に手を動かして学ぶのが効果的です。ABAP・OData・RAP・UI5 Fioriまで一貫して学べる実践講座で、Fiori開発の全体像を体系的に身につけられます。

▶ SAP ABAP・OData・RAPを体系的に学ぶ 全335レクチャー / 受講生10,000人超 / 評価4.4 / ※英語での受講になります
← ODataサービスのテスト・デバッグ|Gateway Client・エラーログ・よくあるエラーパターン CDS Viewとは何か?S/4HANAのデータモデリングを支える新しい基盤 →
← 記事一覧に戻る