次の方法で共有


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

この記事では、Microsoft Dynamics 365 Commerce のデータ アクションのキャッシュ設定について説明します。

データ アクション呼び出しから返されるエンティティのキャッシュ設定は、ソフトウェア開発キット (SDK) \src\settings\cache.settings.json ファイルに保持されます。 これらのエンティティはキャッシュされた後、同じキャッシュ キーを持ち、Time to Refresh (TTR) と Time to Live (TTL) の値が有効であるすべてのデータ アクション要求に対してキャッシュから返されます。

SDK で提供されるコア データ アクションの場合、キャッシュ キーはデータ アクション自体の中に暗黙的に設定されます。 (SDK からキャッシュ キーを特定する方法については、この記事で後述するデータ アクションのキャッシュ キーを特定するを参照してください。)カスタム データ アクションの場合は、 getCacheKey() メソッドをオーバーライドすることにより、アクション入力でキャッシュ キーを定義できます。

すべてのエンティティについて、既定の TTR は 60 秒で、既定の TTL は 600 秒です。

次の例では、TTR と TTL 設定のセクションを含む JavaScript Object Notation (JSON) ファイルを示します。 各セクションには、時間 (秒単位) に続いて、データ アクションのキャッシュ キーのエンティティ名が含まれます。 SDK は定期的に更新されるので、この例は SDK に含まれているファイルとは異なる場合があります。

{
    "checkPeriodInSeconds": 1800,
    "ttlInSeconds": {
        "AttributeValue": 43200,
        "Category": 43200,
        "CategoryHierarchy": 43200,
        "CategoryPath": 43200,
        "ChannelConfiguration": 43200,
        "ChannelDeliveryConfiguration": 43200,
        "FeatureState": 43200,
        "FullProduct": 43200,
        "FullProductSearchResult": 43200,
        "MappedSearchInput": 43200,
        "OrgUnit": 43200,
        "OrgUnitLocation": 43200,
        "Product": 43200,
        "ProductCatalog": 43200,
        "ProductDimensionValue": 43200,
        "PRODUCTLIST-RECOMMENDATION":43200,
        "PRODUCTLIST-RELATEDPRODUCTS":43200,
        "ProductRating": 43200,
        "ProductRefiner": 43200,
        "SimpleProduct": 43200
    },
    "ttrInSeconds": {
        "AttributeValue": 900,
        "Category": 900,
        "CategoryHierarchy": 1800,
        "CategoryPath": 900,
        "ChannelConfiguration": 1800,
        "ChannelDeliveryConfiguration": 1800,
        "FeatureState": 900,
        "FullProduct": 900,
        "FullProductSearchResult": 900,
        "MappedSearchInput": 900,
        "OrgUnit": 1800,
        "OrgUnitLocation": 900,
        "Product": 900,
        "ProductCatalog": 900,
        "ProductDimensionValue": 1800,
        "PRODUCTLIST-RECOMMENDATION":900,
        "PRODUCTLIST-RELATEDPRODUCTS":900,
        "ProductRating": 900,
        "ProductRefiner": 900,
        "SimpleProduct": 900
    }
}

データ アクションのキャッシュ キーを決定する

特定のコア データ アクションのデータ キャッシュ キーを見つけるには、SDK \node_modules\@msdyn365-commerce-modules\retail-actions\dist\lib ディレクトリの下にあるソース コードを確認します。

たとえば、"get-simple-products" データ アクションのコードを見つけるには、get-simple-products.js ファイルを確認します。 次の例でこのファイルのソース コードを調べて、SimpleProduct というエンティティ名を見つけることができます。 次に、前の例のキャッシュ設定用にこのエンティティを JSON ファイルに追加できます。

...
export class ProductInput {
    constructor(productId, apiSettings, channelId) {
        this.getCacheKey = () => buildCacheKey(`RecordId-${this.productId.toString()}`, this.apiSettings);
        this.getCacheObjectType = () => 'SimpleProduct';
        this.dataCacheType = () => 'application';
        this.apiSettings = apiSettings;
        this.productId = +productId;
        this.channelId = channelId || apiSettings.channelId;
    }
}
...

特定のエンティティに対するキャッシュ設定

次の表で、特定のデータ アクションのキャッシュ キー エンティティに対するキャッシュ設定について説明します。

エンティティ Description
AttributeValue 製品の詳細ページに表示される製品属性情報のメタデータが含まれています。 パフォーマンスを向上させ、Retail サーバーへのラウンド トリップを減少させるために、最適な TTR 値と TTL 値を使用してエンティティをキャッシュすることをお勧めします。 TTR が長いと、表示される製品属性の新しさに影響します。 このエンティティを返す API の詳細については、製品のコントロールを参照してください。
カテゴリ ナビゲーション モジュールに表示されるカテゴリ情報のメタデータが含まれています。 パフォーマンスを向上させ、Retail サーバーへのラウンド トリップを減少させるために、最適な TTR 値と TTL 値を使用してエンティティをキャッシュすることをお勧めします。 TTR が長いと、表示されるカテゴリ情報の新しさに影響します。 このエンティティを返す API の詳細については、カテゴリ コントローラを参照してください。
CategoryHierarchy ナビゲーション モジュールに表示される利用可能なカテゴリ階層のメタデータが含まれています。 パフォーマンスを向上させ、Retail サーバーへのラウンド トリップを減少させるために、最適な TTR 値と TTL 値を使用してエンティティをキャッシュすることをお勧めします。 TTR が長いと、表示されるカテゴリ階層情報の新しさに影響します。 このエンティティを返す API の詳細については、カテゴリ コントローラを参照してください。
CategoryPath 階層リンク モジュールで使用されるカテゴリ パスのメタデータが含まれています。 パフォーマンスを向上させ、Retail サーバーへのラウンド トリップを減少させるために、最適な TTR 値と TTL 値を使用してエンティティをキャッシュすることをお勧めします。 TTR が長いと、カテゴリ パス情報の新しさに影響します。
ChannelConfiguration 購入フローで使用されるチャネル情報のメタデータが含まれています。 パフォーマンスを向上させ、Retail サーバーへのラウンド トリップを減少させるために、最適な TTR 値と TTL 値を使用してエンティティをキャッシュすることをお勧めします。 TTR が長いと、表示されるチャネル構成の新しさに影響します。 このエンティティを返す API の詳細については、組織単位コントローラーを参照してください。
ChannelDeliveryConfiguration チェックアウトおよび注文確認で使用されるチャネル配信構成のメタデータが含まれています。 パフォーマンスを向上させ、Retail サーバーへのラウンド トリップを減少させるために、最適な TTR 値と TTL 値を使用してエンティティをキャッシュすることをお勧めします。 TTR が長いと、チャネル配信構成の新しさに影響します。
FeatureState 購入フローおよび注文テンプレートで使用される機能の状態のメタデータが含まれています。 パフォーマンスを向上させ、Retail サーバーへのラウンド トリップを減少させるために、最適な TTR 値と TTL 値を使用してエンティティをキャッシュすることをお勧めします。 TTR が長いと、機能状態の情報の新しさに影響します。
FullProduct 注文テンプレートおよび検索シナリオで使用される全製品のメタデータが含まれています。 パフォーマンスを向上させ、Retail サーバーへのラウンド トリップを減少させるために、最適な TTR 値と TTL 値を使用してエンティティをキャッシュすることをお勧めします。 TTR が長いと、表示される全製品の新しさに影響します。
FullProductSearchResult 検索シナリオで使用される全製品の検索結果のメタデータが含まれています。 パフォーマンスを向上させ、Retail サーバーへのラウンド トリップを減少させるために、最適な TTR 値と TTL 値を使用してエンティティをキャッシュすることをお勧めします。 TTR が長いと、表示される全製品の検索結果の新しさに影響します。
MappedSearchInput 検索シナリオで使用されるマップされた検索入力のメタデータが含まれています。 パフォーマンスを向上させ、Retail サーバーへのラウンド トリップを減少させるために、最適な TTR 値と TTL 値を使用してエンティティをキャッシュすることをお勧めします。 TTR が長いと、マップされた検索入力の新しさに影響します。
OrgUnit 「オンラインで購入し、店舗で受け取る」 (BOPIS) シナリオと店舗検索モジュールで使用される組織単位のメタデータが含まれています。 パフォーマンスを向上させ、Retail サーバーへのラウンド トリップを減少させるために、最適な TTR 値と TTL 値を使用してエンティティをキャッシュすることをお勧めします。 このエンティティを返す API の詳細については、組織単位コントローラーを参照してください。
OrgUnitLocation 店舗検索モジュールおよび購入フローで使用される組織単位の場所のメタデータが含まれています。 パフォーマンスを向上させ、Retail サーバーへのラウンド トリップを減少させるために、最適な TTR 値と TTL 値を使用してエンティティをキャッシュすることをお勧めします。 TTR が長いと、組織単位の場所の新しさに影響します。 このエンティティを返す API の詳細については、組織単位コントローラーを参照してください。
製品 検索シナリオで使用される製品情報のメタデータが含まれています。 パフォーマンスを向上させ、Retail サーバーへのラウンド トリップを減少させるために、最適な TTR 値と TTL 値を使用してエンティティをキャッシュすることをお勧めします。 TTR が長いと、マップされた検索入力の新しさに影響します。 このエンティティを返す API の詳細については、製品のコントロールを参照してください。
ProductDimensionValue 製品の詳細ページに表示される製品分析コード情報のメタデータが含まれています。 パフォーマンスを向上させ、Retail サーバーへのラウンド トリップを減少させるために、最適な TTR 値と TTL 値を使用してエンティティをキャッシュすることをお勧めします。 TTR が長いと、表示される製品分析コードの新しさに影響します。 このエンティティを返す API の詳細については、製品のコントロールを参照してください。
PRODUCTLIST-RECOMMENDATION ホームページまたは製品の詳細ページに表示されるお勧めの製品の一覧が含まれています。 パフォーマンスを向上させ、Retail サーバーへのラウンド トリップを減少させるために、最適な TTR 値と TTL 値を使用してエンティティをキャッシュすることをお勧めします。 TTR が長いと、お勧めの製品の一覧の新しさに影響します。
PRODUCTLIST-RELATEDPRODUCTS 製品の詳細ページに表示される関連製品の一覧が含まれています。 パフォーマンスを向上させ、Retail サーバーへのラウンド トリップを減少させるために、最適な TTR 値と TTL 値を使用してエンティティをキャッシュすることをお勧めします。 TTR が長いと、関連製品の新しさに影響します。
ProductRating 製品の詳細ページに表示される製品評価情報のメタデータが含まれています。 パフォーマンスを向上させ、Retail サーバーへのラウンド トリップを減少させるために、最適な TTR 値と TTL 値を使用してエンティティをキャッシュすることをお勧めします。 TTR が長いと、表示される製品評価の新しさに影響します。 このエンティティを返す API の詳細については、製品のコントロールを参照してください。
ProductRefiner 製品一覧ページに表示される製品リファイナーのメタデータが含まれています。 パフォーマンスを向上させ、Retail サーバーへのラウンド トリップを減少させるために、最適な TTR 値と TTL 値を使用してエンティティをキャッシュすることをお勧めします。 TTR が長いと、表示される製品リファイナーの新しさに影響します。 このエンティティを返す API の詳細については、製品のコントロールを参照してください。
ProductSearchResult 製品一覧ページに表示される製品の検索結果のメタデータが含まれています。 パフォーマンスを向上させ、Retail サーバーへのラウンド トリップを減少させるために、最適な TTR 値と TTL 値を使用してエンティティをキャッシュすることをお勧めします。 TTR が長いと、検索結果の製品一覧の新しさに影響します。 このエンティティを返す API の詳細については、製品のコントロールを参照してください。
SimpleProduct 製品の詳細ページに表示される製品のメタデータが含まれています。 パフォーマンスを向上させ、Retail サーバーへのラウンド トリップを減少させるために、最適な TTR 値と TTL 値を使用してエンティティをキャッシュすることをお勧めします。 TTR が長いと、表示される製品の新しさに影響します。 このエンティティを返す API の詳細については、製品のコントロールを参照してください。

インライン キャッシュ オプション

Dynamics 365 Commerce オンライン SDK のデータ アクション レイヤーは、データ アクションの応答をキャッシュする方法とそのスコープ (アプリケーションまたは要求) のコントロールに柔軟性を提供します。 すべてのカスタム データ アクションについて、キャッシュの種類はアクション入力の一部として定義することができます。 データ アクションが Retail サーバー プロキシ データ アクションを呼び出すか、または Retail サーバー プロキシ データ アクションを呼び出すモジュール ビジネス ロジックを呼び出すのが、一般的なシナリオです。 このようなシナリオの例として、ユーザーが「店舗の検索」ボタンを選択する場合があります。 これらのシナリオでは、Retail サーバー プロキシ データ アクションを呼び出すときに、モジュールはアクション コンテキストに "bypassCache" オプションを設定できます。 この設定により、モジュールの指定されたキャッシュ設定を受け入れるよう SDK は指示されます。 Retail サーバー プロキシ データ アクションの詳細については、Retail サーバー API の呼び出しを参照してください。

bypassCache でサポートされている値は次のとおりです。

  • 取得 - 読み取りを実行している間はキャッシュを無視し、Retail サーバーから最新の情報を取り込みます。
  • なし - アクション応答は要求ごとにキャッシュされます。 byPassCache が指定されていない場合、ランタイムの既定値はこの値になります。

一般に、Retail サーバーからデータを読み取るカスタム データ アクションおよび Retail サーバー プロキシ アクション ("get"、 "search"、または "read" で始まる名前の API を呼び出す) については、既定で "bypassCache" の値は「なし」に設定されます。 Retail サーバーから最新のデータを取り込むように構成されている他のすべての Retail サーバー プロキシ アクションでは、既定で、"bypassCache" の値は「取得」に設定されます。 これらの値は、必要に応じて上書きすることができます。

使用例を次に示します。

if (checkoutCartId) {
    try {
        checkoutCart = await readAsync({ callerContext: ctx, bypassCache: 'get' }, checkoutCartId);
    } catch {
        ctx.telemetry.error('Error getting checkout cart based on saved checkout cart ID');
        ctx.telemetry.exception(error);
    }
}

追加リソース

データ アクションの概要

コア データ アクション

データ アクションのオーバーライド

Commerce Scale Unit の顧客およびコンシューマー API

Retail Server API の呼び出し