次の方法で共有


データ アクションのフック

重要

データ アクションのフック機能は廃止されました。 パフォーマンスの問題を避けるために、データアクション層のビジネスロジックを変更する場合は、データ アクションの上書きを使用することを強く推奨します。

この記事では、事前および事後のデータ アクション イベントにフックし、必要に応じてさらにデータを処理する方法について説明します。

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 にあります。

追加リソース

チェーン データ アクション

バッチ データ アクション

監視可能なデータ アクションの作成

モジュール間での状態の共有

データ アクションの上書き

データ アクション キャッシュの設定