重要
データ アクションのフック機能は廃止されました。 パフォーマンスの問題を避けるために、データアクション層のビジネスロジックを変更する場合は、データ アクションの上書きを使用することを強く推奨します。
この記事では、事前および事後のデータ アクション イベントにフックし、必要に応じてさらにデータを処理する方法について説明します。
Dynamics 365 Commerce ソフトウェア開発キット (SDK) に含まれるモジュールは、既存のアクションを使用して、使用するモジュールのデータを取り込みます。 データ アクション レイヤーのビジネス ロジックのいくつかを変更するシナリオがある場合があります。 データ アクションのオーバーライドのサポートに加えて、Commerce プラットフォームには、事前および事後のデータ アクション イベントにフックする機能もあります。
サポートされているデータ アクションのフック イベント
次のデータ アクションのフック イベントがサポートされています。
- preHook: データ アクション入力を変更できるように、アクションが開始される前に実行する。 このイベントは、キャッシュされていないデータ アクションにのみ適用されます。
- preReadOnlyHook: アクションが開始される前に実行するが、データ アクション入力を変更することはできない。 このイベントは、キャッシュされたデータ アクションとキャッシュされていないデータ アクションの両方に適用できます。
- postHook: データ アクションが完了した後に実行し、データ アクション出力を変更することができる。 このイベントは、キャッシュされていないデータ アクションにのみ適用されます。
- postReadOnlyHook: データ アクションが完了した後に実行するが、データ アクション出力を変更することはできない。 このイベントは、キャッシュされたデータ アクションとキャッシュされていないデータ アクションの両方でサポートされています。
データ アクションのフックを使用する
データ アクションのフックを使用するために、add-data-action コマンド ライン インターフェイス (CLI) を活用し、ファイルを作成することができます。 次の例では、"\src\actions" ディレクトリに、"get-address-hook.action.ts" という名前のデータ アクション ファイルを作成しています。
yarn msdyn365 add-data-action get-address-hook
次に、データ アクション ファイルのコードを次のテンプレート コードで置き換え、必要なイベントに適切なコードを追加します。
import { createDataActionHook, IActionInput } from '@msdyn365-commerce/core';
// import { Cart } from '@msdyn365-commerce/retail-proxy';
const beforeCart = async (inputs: IActionInput | IActionInput[]) => {
// tslint:disable-next-line: no-console
console.info('Pre Hook');
};
const afterCart = async (_inputs: IActionInput | IActionInput[], cartName: string | string[]) => {
// tslint:disable-next-line: no-console
console.info('Post Hook');
};
const preReadOnlyCart = async (inputs: IActionInput | IActionInput[]) => {
// tslint:disable-next-line: no-console
console.info('Pre ReadOnly Hook');
};
const postReadOnlyCart = async (_inputs: IActionInput | IActionInput[], cartName: string | string[]) => {
// tslint:disable-next-line: no-console
console.info('Post ReadOnly Hook');
};
createDataActionHook({
actionId: 'Action_ID',
postHook: afterCart,
preHook: beforeCart,
preReadonlyHook: preReadOnlyCart,
postReadonlyHook: postReadOnlyCart
});
メモ
Action_ID をイベント フックを追加するデータ アクション ID に変更する必要があります。 データ アクションのモジュール ライブラリの一覧は、SDK のディレクトリの …\Msdyn365.Commerce.Online\node_modules@msdyn365-commerce-modules\retail-actions\dist\lib にあります。