LoginSignup
8
6

More than 3 years have passed since last update.

【Fiori】CDS + BOPFでトランザクション実行

Posted at

はじめに

SAPUI5のアプリケーションを作るとき、過去の記事ではODataサービスを登録して、DPCクラスでCRUDの操作を書いて・・・と、コーディングをする場面が結構ありました。
BOPFを使うとコーディング不要でCRUDの操作が実装できます。これまで1日かかっていた作業が10分でできてしまいます(筆者比)。今回は、前回までに作ったCDSビューにBOPFを追加して、CRUD操作ができるようにします。

BOPFについて

BOとは

ビジネスオブジェクトのことで、データとそれに対する操作が一体となったクラスのようなものです。

BOPFとは

Business Object Processing Frameworkの略で、ビジネスオブジェクトに対する汎用的なサービス(CRUDオペレーションなど)が提供されます。BOPFを使うとコーディング不要でデータに対する基本的な操作が実装できます。
BOPFは古くからSAP標準のアプリケーションで使われてきましたが、SAP NetWeaver 7.50からアドオン開発でも使えるようになりました。
参考:Introduction to Business Object Processing Framework (BOPF)

BOPFの構成

ビジネスオブジェクトは、ノードで構成されるツリー状の構造をしています。それぞれのノードにはデータ(テーブルの行)と、関連するビジネスロジックがひもづけられています。
image.png
Introduction to Business Object Processing Framework (BOPF)より引用

BOPFの作り方

CDSからBOPFを作る場合、アノテーションを書くだけでBOPFが自動的に生成されます。開発ツールはADTを使う必要があります。

ステップ

  1. CDSビューにアノテーションを追加
  2. Fiori Appからトランザクションを実行

1. CDSビューにアノテーションを追加

以下のアノテーションを追加します。

@ObjectModel: {
    modelCategory: #BUSINESS_OBJECT,
    compositionRoot: true,
    transactionalProcessingEnabled: true,
    createEnabled: true,
    updateEnabled: true,
    deleteEnabled: true,
    writeActivePersistence: 'zstudents'
}

アノテーションの意味

アノテーション 意味
modelCategory ビジネスオブジェクトの種類を指定します。アプリケーションの動作には特に影響を与えません。
compositionRoot 複数のビューが階層的な関係を持つとき、このビューがルートであるかどうかを指定します。
transactionalProcessingEnabled 更新などのトランザクションを許可するかどうか。rootビューのレベルでのみ指定できる属性です。
createEnabled~deleteEnabled 登録、更新、削除を許可するかどうかを指定します。
writeActivePersistence 更新対象となるテーブルを指定します。

全体はこうなります。
image.png

有効化すると、ビューと同じ名前のBOPFビジネスオブジェクトが登録されます。
ショートカット:Ctrl+Shift+Aで探してみましょう。
image.png
ここからBOのルートノードに移動できます。
image.png
ここから追加のアクションやチェックなどを実装できますが、今回はそのまま使います。
image.png

たったこれだけで!トランザクションが実行できるようになります。

2. Fiori Appからトランザクションを実行

Fiori Appをリフレッシュすると、削除ボタンと+ボタンが出てきます。
image.png

登録

+ボタンを押すと、新規登録画面になります。
image.png
適当な値を入力して保存ボタンを押すと、保存されます。
image.png
念のためSE11でも確認してみると、Keyが自動的に採番されています。
image.png
このためにKeyはUUIDにしていたのでした。
image.png

更新

詳細画面に移動すると、編集ボタンが表示されます。編集ボタンを押すと更新画面になります。
image.png
住所を変更して保存します。
image.png
更新できました。
image.png

削除

行を選択して削除ボタンを押します。
image.png
image.png
削除されました。
image.png

CRUDの操作だけでなくメッセージ出力なども自動的にやってくれることがわかります。

次回

BOPFのアクションやバリデーションを使って追加のロジックを実装してみたいと思います。

8
6
11

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
6