.after カスタムイベントハンドラの実装

Objective

After completing this lesson, you will be able to .after イベントハンドラを使用して送信データを拡張

イベントハンドラ後の .after の登録

上記の before ハンドラの例について話し合ったので、次に after ハンドラの実装を見てみましょう。

ハンドラハンドラの後に実行され、多くの場合、送信データの拡張に使用されます。

例として、カタログサービスのアフターハンドラを作成します。在庫が 200 を超える書籍に対して 11% の割引を適用します。このために、文字列 "- 11% 割引!"ポストハンドラを使用して、株式が 200 を超えるすべての本のタイトルにが追加されます。

ハンドラの実装と同じ方法で進めます。つまり、cat-service.js というファイルをプロジェクトの srv フォルダに登録します。これは、このフォルダには CatalogService の定義に使用されるファイル cat-service.cds も含まれているためです (以下の図を参照)。

前のハンドラで説明した内容と同様に、cat-service.js ファイルに cds.ApplicationService のサブクラスを登録します。これは CatalogService と呼ばれます。

ブックタイトルを操作するには、Books エンティティで READ 操作用に登録する必要がある after ハンドラが必要です。そのために、登録された実装クラスで継承された init() メソッドを上書きします (以下の図を参照)。

init() メソッドに after ハンドラを登録するには、継承された after() メソッドを this.after() から呼び出します。after() メソッドには以下のインタフェースがあります。個々のパラメータの詳細な説明については、CAP 文書を参照してください

Code Snippet
12345
function after ( event : string | string[] | '*', entity? : CSN definition | CSN definition[] | string | string[] | '*', handler : function )

この例では、Books エンティティに対する READ 操作に対して、名前付き関数 this.grantDiscount を登録します。これを行うために、前述の前のハンドラの登録と同様に処理します。

送信データの拡張

次に、after-handler として登録されている grantDiscount 関数を CatalogService クラスに実装する方法について説明します。

ハンドラが 2 つの引数を受け取ると、次のようになります。

  • 結果

    前に実行されたハンドラの結果

  • 必須

    インスタンス cds.Request

この例では、結果パラメータのみが必要です。これは、取得されたブックの配列です (以下の図を参照)。

books による配列に対するループを実装し、文字列 " -- 11% Discount!" を追加します。株式が 200 を超える本のタイトルに変更されます。

デモおよび演習: .after イベントハンドラの提供

注記

演習問題として、SAP Business Application Studio で、以下のデモのステップバイステップの手順を実行します。

演習の開始点として、前の演習問題 .before イベントハンドラを正常に完了したら、その結果を使用します。または、以下の GitHub リポジトリのブランチ 11_.before_event_handler を開始点として使用することもできます。

https://github.com/SAP-samples/cap-development-learning-journey

シミュレーションの完全な実装は、GitHub リポジトリの 12_.after_event_handler ブランチにあります。

リポジトリのコンテンツとその使用方法の詳細については、ここを参照してください。

.after イベントハンドラを提供する方法については、ビデオを視聴してください。