1. 価格の統合

価格設定エンティティ ビューとアクションAPIの操作

Version:
日本語翻訳に関する免責事項

このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。

外部システムは、Commerce Viewsサービスに基づくオーサリングAPIであるEntity Views and Actions APIを使用して、価格関連情報を交換できます。

この に示すように、Commerce Engineの操作とコマンドをコンテナ呼び出しに含める必要があります (C# を使用)。

Sitecore Experience Commerce (XC) システムで操作を実行するには、呼び出し元のシステムはまずSitecore Identityサーバーから 有効なベアラー認証トークンを取得する 必要があります。

メモ

Views and Actions APIは、ビジネス・ユーザー・インターフェースを提供するように設計された オーサリングAPIであり、統合シナリオ用には最適化されていません。

コマース統合にViews and Actions APIを使用する場合は、次の点を考慮する必要があります。

  • Views and Actions APIは、一度に1つのCommerceエンティティのみを処理でき、バッチ処理をサポートしていません。

  • Views and Actions APIは、Commerce WebサービスAPIよりも多くのオーバーヘッドを伴います。Views and Action APIの呼び出しは、通常、アクションのビューを取得し、更新された値でビューのプロパティを変更してから、アクションを実行する必要がある3段階のプロセスです。

Pricing Entity Views and Actions APIを使用した価格表の操作 (C#)

XC Pricing View Actions APIは、価格表のaddgetedit manage associated catalogsするアクションを提供します。

価格表の追加 (C#)

価格表は、Views and Actions APIを使用して使用できます。価格表を追加する際は、次の点を考慮してください。

  • 価格表の名前は一意です。

  • 価格表を一度作成すると、その名前を変更することはできません。

  • 価格表は削除できません。

価格表を追加するには:

  1. アクションのエンティティ ビューを取得します。

    DataServiceQuerySingle<EntityView> query = container.GetEntityView(string.Empty, "Details", "AddPriceBook", string.Empty);
    EntityView view = Proxy.GetValue(query);
  2. ビューのプロパティを変更します。少なくとも、Nameプロパティの値を指定する必要があります。他のすべてのビュー プロパティは省略可能です。次の例では、クエリにすべてのプロパティの値が含まれています。

    var nameProperty = view.Properties.FirstOrDefault(p => p.Name.Equals("Name"));
    nameProperty.Value = "MyPriceBook";
    var displayNameProperty = view.Properties.FirstOrDefault(p => p.Name.Equals("DisplayName"));
    displayNameProperty.Value = "Book Display Name";
    var descriptionProperty = view.Properties.FirstOrDefault(p => p.Name.Equals("Description"));
    descriptionProperty.Value = "Book Description";
    var currencySetProperty = view.Properties.FirstOrDefault(p => p.Name.Equals("CurrencySetId"));
    currencySetProperty.Value = "{0F65742E-317F-44B0-A4DE-EBF06209E8EE}";
  3. アクションを実行します。

    CommerceCommand command = Proxy.DoCommand(container.DoAction(view));

    応答は、PriceBookAddedモデルで価格表に適したIDを返します。たとえば、次のようにします。

    PriceBookAdded priceBookAddedModel = command.Models.OfType<PriceBookAdded>().FirstOrDefault();
    string bookFriendlyId = priceBookAddedModel?.PriceBookFriendlyId;

価格表のビューを取得する (C#)

Pricing Entity Views and Actions APIを使用して、さまざまな価格表ビューを取得できます。価格表は 複合エンティティ ビューを使用します。価格表のMasterビューをクエリすると、レスポンスは子ビュー ( DetailsPriceBookCatalogsPriceCards子ビューなど) も返します。子ビューを個別にクエリできます。子ビューは、他の子ビューの親にすることもできます。

  • 価格表のマスタービューを取得するには:

    DataServiceActionQuerySingle<EntityView> query = container.GetEntityView($"Entity-PriceBook-{bookFriendlyId}", "Master", string.Empty, string.Empty);
    EntityView view = Proxy.GetValue(query);
  • 価格表の子ビュー (詳細ビュー、関連カタログ ビュー、価格カード ビューなど) を取得するには、次のようにします。

    // getting the book's details view
    query = container.GetEntityView($"Entity-PriceBook-{bookFriendlyId}", "Details", string.Empty, string.Empty);
    view = Proxy.GetValue(query);
    
    // getting the book's associated catalogs view
    query = container.GetEntityView($"Entity-PriceBook-{bookFriendlyId}", "PriceBookCatalogs", string.Empty, string.Empty);
    view = Proxy.GetValue(query);
    
    // getting the book's cards view
    query = container.GetEntityView($"Entity-PriceBook-{bookFriendlyId}", "PriceCards", string.Empty, string.Empty);
    view = Proxy.GetValue(query);

価格表の編集方法 (C#)

価格表の表示名、説明、通貨セットのプロパティは、Pricing Entity Views and Actions APIを使用して変更できます。これらのプロパティの1つに新しい値を指定しない場合、現在の値は変更されません。

価格表のプロパティを変更するには

  1. アクションのエンティティ ビューを取得します。たとえば、次のようにします。

    DataServiceQuerySingle<EntityView> query = container.GetEntityView($"Entity-PriceBook-{bookFriendlyId}", "Details", "EditPriceBook", string.Empty)
    EntityView view = Proxy.GetValue(query);
  2. 必要に応じて、ビューのプロパティを変更します (例:

    var displayNameProperty = view.Properties.FirstOrDefault(p => p.Name.Equals("DisplayName"));
    displayNameProperty.Value = "Edited Book Display Name";
    var descriptionProperty = view.Properties.FirstOrDefault(p => p.Name.Equals("Description"));
    descriptionProperty.Value = "Edited Book Description";
    var currencySetProperty = view.Properties.FirstOrDefault(p => p.Name.Equals("CurrencySetId"));
    currencySetProperty.Value = "{0F65742E-317F-44B0-A4DE-EBF06209E8EE}";
  3. アクションを実行します。

    CommerceCommand command = Proxy.DoCommand(container.DoAction(view));

カタログを価格表に関連付ける (C#)

Pricing Views and Actions APIを使用してカタログを価格表に関連付け、カタログ品目に価格カードを適用できます。同じ価格表を複数のカタログに関連付けることができますが、カタログを関連付けることができるのは1つの価格表のみです。

カタログを価格表に関連付けるには

  1. アクションのエンティティ ビューを取得します。たとえば、次のようにします。

    DataServiceQuerySingle<EntityView> query = container.GetEntityView($"Entity-PriceBook-{bookFriendlyId}", "PriceBookCatalogs", "AssociateCatalog", string.Empty);
    EntityView view = Proxy.GetValue(query);
  2. 次のように、ビューのプロパティを変更します。

    var catalogProperty = view.Properties.FirstOrDefault(p => p.Name.Equals("CatalogName"));
    catalogProperty.Value = "MyCatalog";
  3. アクションを実行します。

    CommerceCommand command = Proxy.DoCommand(container.DoAction(view));

価格表からのカタログの関連付けの解除 (C#)

カタログと価格表の関連付けを解除できるのは、カタログ内で定義された販売可能商品にその価格カードを適用する必要がなくなった場合です。

価格表の関連付けを解除するには

  1. アクションのエンティティ ビューを取得します。

    DataServiceQuerySingle<EntityView> query = container.GetEntityView($"Entity-PriceBook-{bookFriendlyId}", string.Empty, "DisassociateCatalog", string.Empty);
    EntityView view = Proxy.GetValue(query);
  2. 次のように、ビューのプロパティを変更します。 view.ItemId = "MyCatalog";

  3. アクションを実行します。

    CommerceCommand command = Proxy.DoCommand(container.DoAction(view));

Pricing Views and Actions APIを使用したプライス カードの操作 (C#)

Pricing Views and Actions APIを使用して、価格カードのaddgeteditduplicateおよびdeleteアクションを実行できます。

価格作成の追加 (C#)

指定した価格表内に価格カードを作成できます。プライスカードの名前は、プライスブック内で一意である必要があります。プライスカードは、作成後に名前を変更することはできません。

プライスカードを作成するには:

  1. アクションのエンティティ ビューを取得します。たとえば、次のようにします。

    DataServiceQuerySingle<EntityView> query = container.GetEntityView($"Entity-PriceBook-{bookFriendlyId}", "Details", "AddPriceCard", string.Empty);
    EntityView view = Proxy.GetValue(query);
  2. ビューのプロパティを変更します。少なくとも、"Name" プロパティの値を指定する必要があります。必要に応じて、次のような他のプロパティの値を指定できます。

    var nameProperty = view.Properties.FirstOrDefault(p => p.Name.Equals("Name"));
    nameProperty.Value = "MyPriceCard";
    var displayNameProperty = view.Properties.FirstOrDefault(p => p.Name.Equals("DisplayName"));
    displayNameProperty.Value = "Card Display Name";
    var descriptionProperty = view.Properties.FirstOrDefault(p => p.Name.Equals("Description"));
    descriptionProperty.Value = "Card Description";
  3. アクションを実行します。

    CommerceCommand command = Proxy.DoCommand(container.DoAction(view));

    応答は、PriceCardAdded モデルを使用してプライス カードに適したIDを返します。たとえば、次のようにします。

    PriceCardAdded priceCardAddedModel = command.Models.OfType<PriceCardAdded>().FirstOrDefault();
    string cardFriendlyId = priceCardAddedModel?.PriceCardFriendlyId;

価格カードの表示数を取得する(#)

Pricing Views and Actions APIを使用して、さまざまな価格カード ビューを取得できます。プライス カード ビューは、複合エンティティ ビューとして実装されます。価格カードのMasterビューをクエリすると、応答はその子ビュー (価格カードのDetailsビューやPriceSnapshots、子ビューなど) を返します。

子ビューを個別にクエリすることもできます。子ビューは、独自の子ビューを定義できます。

  • プライスカードのマスタービューを取得するには:

    DataServiceActionQuerySingle<EntityView> query = container.GetEntityView($"Entity-PriceCard-{cardFriendlyId}", "Master", string.Empty, string.Empty);
    EntityView view = Proxy.GetValue(query);
  • プライス カードの子ビュー ( "Details" ビューや "PriceSnapShots" ビューなど) を個別に取得するには、次のようにします。

    // getting the card's details view
    query = container.GetEntityView($"Entity-PriceCard-{cardFriendlyId}", "Details", string.Empty, string.Empty);
    view = Proxy.GetValue(query);
    
    // getting the card's snapshots view
    query = container.GetEntityView($"Entity-PriceCard-{cardFriendlyId}", "PriceCardSnapshots", string.Empty, string.Empty);
    view = Proxy.GetValue(query);

プライスカードの編集 (C#)

既存の価格カードのDisplayNameDescriptionのプロパティを変更するには、Pricing Views and Actions APIを使用します。 nameプロパティの値 (プライス カードの内部名) は変更できません。プロパティに新しい値を指定しない場合、現在の値は変更されません。

プライスカードを編集するには:

  1. アクションのエンティティ ビューを取得します。

    DataServiceQuerySingle<EntityView> query = container.GetEntityView($"Entity-PriceBook-{bookFriendlyId}", "Details", "EditPriceBook", string.Empty)
    EntityView view = Proxy.GetValue(query);
  2. 次のように、ビューのプロパティを設定します。

    var displayNameProperty = view.Properties.FirstOrDefault(p => p.Name.Equals("DisplayName"));
    displayNameProperty.Value = "Edited Book Display Name";
    var descriptionProperty = view.Properties.FirstOrDefault(p => p.Name.Equals("Description"));
    descriptionProperty.Value = "Edited Book Description";
    var currencySetProperty = view.Properties.FirstOrDefault(p => p.Name.Equals("CurrencySetId"));
    currencySetProperty.Value = "{0F65742E-317F-44B0-A4DE-EBF06209E8EE}";
  3. アクションを実行します。

    CommerceCommand command = Proxy.DoCommand(container.DoAction(view));

プライス カードを複製する (C#)

Views APIとActions APIを使用して、既存の価格カードを複製し、同じ価格表内に新しい価格カードを作成できます。複製された価格カードの価格スナップショットは、draftステータスに設定されます。

プライスカードを複製するには:

  1. アクションのエンティティ ビューを取得します。

    DataServiceQuerySingle<EntityView> query = container.GetEntityView($"Entity-PriceCard-{cardFriendlyId}", "Details", "DuplicatePriceCard", string.Empty);
    EntityView view = Proxy.GetValue(query);
  2. 新しい価格カードの名前を指定して、ビューのプロパティを変更します。

    手記

    プライスカードの名前は、プライスブック内で一意である必要があります。

    var nameProperty = view.Properties.FirstOrDefault(p => p.Name.Equals("DuplicateCardName"));
    nameProperty.Value = "MyDuplicatePriceCard";
  3. アクションを実行します。

    CommerceCommand command = Proxy.DoCommand(container.DoAction(view));

価格カードを削除する

Views and Actions APIを使用して、価格表から価格カードを削除できます。

手記

承認済みの価格スナップショットを含む価格カードは削除できません。

プライスカードを削除するには:

  1. アクションのエンティティ ビューを取得します。たとえば、次のようにします。

    DataServiceQuerySingle<EntityView> query = container.GetEntityView($"Entity-PriceCard-{cardFriendlyId}", string.Empty, "DeletePriceCard", string.Empty);
    EntityView view = Proxy.GetValue(query);
  2. ビューのプロパティを変更して、削除するプライス カードのフレンドリIDを指定します。

    view.ItemId = $"Entity-PriceCard-{cardFriendlyId}";
  3. アクションを実行します。

    CommerceCommand command = Proxy.DoCommand(container.DoAction(view));

Pricing Views and Actions APIを使用したスナップショットの操作 (C#)

スナップショットは、指定した日時にプライスカードに適用できる価格を定義します。Pricing Views and Actions APIは、スナップショットのaddeditremoveadd tagremove tagアクションを提供します。

スナップショットの追加 (C#)

Pricing Views and Actions APIを使用して、既存の価格カードにスナップショットを追加できます。

価格カードにスナップショットを追加するには:

  1. アクションのエンティティ ビューを取得します。たとえば、次のようにします。

    DataServiceQuerySingle<EntityView> query = container.GetEntityView($"Entity-PriceCard-{cardFriendlyId}", "Details", "EditPriceCard", string.Empty);
    EntityView view = Proxy.GetValue(query);
  2. 必要に応じて、次のようにビューのプロパティを変更します。

    var displayNameProperty = view.Properties.FirstOrDefault(p => p.Name.Equals("DisplayName"));
    displayNameProperty.Value = "Edited Card Display Name";
    var descriptionProperty = view.Properties.FirstOrDefault(p => p.Name.Equals("Description"));
    descriptionProperty.Value = "Edited Card Description";
  3. アクションを実行します。

    CommerceCommand command = Proxy.DoCommand(container.DoAction(view));

スナップショットの編集 (C#)

プライス カードのスナップショットのプロパティは、draftステータスのときに変更できます。

スナップショットを編集するには:

  1. アクションのエンティティ ビューを取得します。

    DataServiceQuerySingle<EntityView> query = container.GetEntityView($"Entity-PriceCard-{cardFriendlyId}", "PriceSnapshotDetails", "EditPriceSnapshot", snapshotId);
    EntityView view = Proxy.GetValue(query);
  2. 必要に応じて、プロパティ ビューを変更します。

    var dateProperty = view.Properties.FirstOrDefault(p => p.Name.Equals("BeginDate"));
    dateProperty.Value = DateTimeOffset.UtcNow.AddDays(5).ToString(CultureInfo.InvariantCulture);
    var tagsProperty = view.Properties.FirstOrDefault(p => p.Name.Equals("IncludedTags"));
    tagsProperty.Value = "['Tag1', 'Tag2']";
  3. アクションを実行します。

    CommerceCommand command = Proxy.DoCommand(container.DoAction(view));

価格スナップショットの削除 (C#)

価格カードから価格スナップショットは、Pricing actions and view APIを使用してプログラムで削除できます。

スナップショットを削除するには:

  1. アクションのエンティティ ビューを取得します。

    DataServiceQuerySingle<EntityView> query = container.GetEntityView($"Entity-PriceCard-{cardFriendlyId}", string.Empty, "DeletePriceCard", snapshotId);
    EntityView view = Proxy.GetValue(query);
  2. アクションを実行します。

    CommerceCommand command = Proxy.DoCommand(container.DoAction(view));

Pricing Actions and Views APIを使用した段階的な価格の操作 (C#)

Pricing Views and Actions APIを使用して、購入したSellable商品の数量に基づいて割引を適用する方法である階層化された価格設定を適用できます。たとえば、段階的な価格設定を使用して、Sellableの価格を $5.00に設定し、顧客が同じSellable商品を5つ以上数量購入した場合は価格を $4.00に引き下げることができます。

Pricing Views and Actions APIは、価格スナップショットから価格帯を追加、編集、削除するメソッドを提供します。これらの操作は、ドラフトステータスの価格スナップショットに対してのみ実行できます。

スナップショットへの価格帯の追加 (C#)

スナップショットには、複数の価格帯を同時に追加できます。価格帯を追加するときは、まず通貨を選択し、次に階層の数量と価格を指定する必要があります。

次の例は、数量1と2、価格20と10を使用して、USD通貨で2つの階層を追加する方法を示しています。1つの階層の子ビューのみが返されますが、複数の階層を追加する場合は、さらに子ビューを追加できます。

  1. アクションのビューを取得し、通貨を指定します。たとえば、USD

    DataServiceQuerySingle<EntityView> query = container.GetEntityView($"Entity-PriceCard-{cardFriendlyId}", "PriceRow", "SelectCurrency", snapshotId);
    EntityView view = Proxy.GetValue(query);
    var currencyProperty = view.Properties.FirstOrDefault(p => p.Name.Equals("Currency"));
    var availableCurrenciesPolicy = currencyProperty.Policies.OfType<AvailableSelectionsPolicy>().FirstOrDefault();
    currencyProperty.Value = availableCurrenciesPolicy?.List.FirstOrDefault().Name;
    // == "USD"
    CommerceCommand command = Proxy.DoCommand(container.DoAction(view));
    手記

    レスポンスは、1つの価格帯の子ビューのみを返します。

  2. たとえば、数量と価格を指定するには、ビューのプロパティを設定します。

    手記

    次の例に示すように、"PriceCell" エンティティを追加し、必要なプロパティ値を設定することで、複数の価格帯を追加できます。

    view = command.Models.OfType<EntityView>().FirstOrDefault(v => v.Name.Equals(view.Name));
    EntityView firstPriceCellView = view.ChildViews.OfType<EntityView>().FirstOrDefault(cv => cv.Name.Equals("PriceCell"));
    firstPriceCellView.Properties.FirstOrDefault(p => p.Name.Equals("Quantity")).Value = "1";
    firstPriceCellView.Properties.FirstOrDefault(p => p.Name.Equals("Price")).Value = "20";
    // only one PriceCell child view is returned, if you wish to add more than one tier you can add more PriceCell child views
    EntityView secondPriceCellView = new EntityView { Name = "PriceCell", EntityId = $"Entity-PriceCard-{cardFriendlyId}", ItemId = snapshotId };
    secondPriceCellView.Properties.Add(new ViewProperty { Name = "Quantity", Value = "2" });
    secondPriceCellView.Properties.Add(new ViewProperty { Name = "Price", Value = "10" });
    view.ChildViews.Add(cellView);
  3. アクションを実行します。

    CommerceCommand command = Proxy.DoCommand(container.DoAction(view));

価格帯の編集

スナップショットで価格帯の金額を変更できます。スナップショット内の複数の価格帯の価格を同時に編集できます。価格帯の通貨は変更できません。

価格帯の金額を変更するには:

  1. アクションのエンティティ ビューを取得します。

    DataServiceQuerySingle<EntityView> query = container.GetEntityView($"Entity-PriceCard-{cardFriendlyId}", "PriceRow", "EditCurrency", $"{snapshotId}|USD");
    EntityView view = Proxy.GetValue(query);
    手記

    スナップショットに複数の価格帯が含まれている場合、レスポンスは各層を子ビューとして返します。

  2. PriceCellViewプロパティの値を変更して、目的の金額を指定します。

    EntityView firstPriceCellView = view.ChildViews.OfType<EntityView>().FirstOrDefault(cv => cv.Name.Equals("PriceCell"));
    firstPriceCellView.Properties.FirstOrDefault(p => p.Name.Equals("Price")).Value = "50";
    EntityView secondPriceCellView = view.ChildViews.OfType<EntityView>().LastOrDefault(cv => cv.Name.Equals("PriceCell"));
    secondPriceCellView.Properties.FirstOrDefault(p => p.Name.Equals("Price")).Value = "100";
  3. アクションを実行します。

    CommerceCommand command = Proxy.DoCommand(container.DoAction(view));

価格帯を削除する

スナップショットから価格帯を削除したり、1つのクエリで (同じ通貨の) 複数の価格帯を削除したりできます。

価格帯を削除するには:

  1. アクションのエンティティ ビュー (たとえば、USD通貨を使用した価格帯) を取得します。

    DataServiceQuerySingle<EntityView> query = container.GetEntityView($"Entity-PriceCard-{cardFriendlyId}", "PriceRow",  string.Empty, $"{snapshotId}|USD");
    EntityView view = Proxy.GetValue(query);
  2. アクションを実行します。

    CommerceCommand command = Proxy.DoCommand(container.DoAction(view));

スナップショットの状態の変更 (C#)

価格スナップショットは、承認プロセスの対象となります。価格スナップショットを適用するには、承認済みステータスである必要があります。スナップショットの承認プロセス中に、価格スナップショットは次のように移行します。

  • DraftからReadyForApprovalステータスへ

  • ReadyForApprovalからDraft

  • ReadyForApprovalからApproved

手記

承認済みスナップショットのステータスは変更できません。

スナップショットの状態をドラフトからReadyforApprovalに変更する (C#)

ドラフトスナップショットの承認をリクエストするには、ステータスをReadyForApprovalに変更します。

スナップショットの承認をリクエストするには:

  1. アクションのエンティティ ビューを取得します。たとえば、次のようにします。

    {cardFriendlyId}", "SetSnapshotApprovalStatus", "RequestSnapshotApproval", snapshotId);
    EntityView view = Proxy.GetValue(query);
  2. ビューのプロパティを設定します。

    var commentProperty = view.Properties.FirstOrDefault(p => p.Name.Equals("Comment"));
    commentProperty.Value = "Requesting approval";
  3. アクションを実行します。

    CommerceCommand command = Proxy.DoCommand(container.DoAction(view));

スナップショットの状態をReadyforApprovalから下書きに変更する (C#)

スナップショットのステータスをReadyforApprovalからdraftに変更して、承認のために送信されたスナップショットを却下します。その後、ドラフトスナップショットを変更できます。

スナップショットを拒否するには:

  1. アクションのエンティティ ビューを取得します。

    DataServiceQuerySingle<EntityView> query = container.GetEntityView($"Entity-PriceCard-{cardFriendlyId}", "SetSnapshotApprovalStatus", "RejectSnapshot", snapshotId);
    EntityView view = Proxy.GetValue(query);
  2. 次のように、ビューのプロパティを設定します。

    var commentProperty = view.Properties.FirstOrDefault(p => p.Name.Equals("Comment"));
    commentProperty.Value = "Rejecting approval"
  3. アクションを実行します。

    CommerceCommand command = Proxy.DoCommand(container.DoAction(view));

スナップショットの状態をReadyforApprovalからApprovedに変更する (C#)

価格スナップショットを承認するには、ステータスをReadyforApprovalからApprovedに変更します。承認されたスナップショットは変更できません。

価格スナップショットを承認するには:

  1. アクションのエンティティ ビューを取得します。たとえば、次のようにします。

    DataServiceQuerySingle<EntityView> query = container.GetEntityView($"Entity-PriceCard-{cardFriendlyId}", "SetSnapshotApprovalStatus", "ApproveSnapshot", snapshotId);
    EntityView view = Proxy.GetValue(query);
  2. 次のように、ビューのプロパティを設定します。

    var commentProperty = view.Properties.FirstOrDefault(p => p.Name.Equals("Comment"));
    commentProperty.Value = "Approving";
  3. アクションを実行します。

    CommerceCommand command = Proxy.DoCommand(container.DoAction(view));
この記事を改善するための提案がある場合は、 お知らせください!