---
title: "プライシングAPIを活用しましょう"
slug: "work-with-the-pricing-api"
abstract: "Sitecore XCプライシングAPIを使って、C#プログラミングを用いて他のビジネスシステムと価格設定関連業務を統合する方法。"
---
# プライシングAPIを活用しましょう

このトピックでは、Sitecore XCプライシングAPIを用いて、C#プログラミングを用いて他のビジネスシステムと価格設定関連業務を統合する方法についての情報と例を提供します。

コンテナコール内にはCommerce Engineの操作やコマンド(C#を使用)を含める必要があります(この [例](https://doc.sitecore.com/xp/ja/developers/100/sitecore-experience-commerce/build-a-container--c--.html "Build a container (C#)")参照)。

Sitecore Experience Commerce(XC)システムでいかなる操作を実行するには、発信者はまずSitecore Identity Serverから [有効なベアラー認証トークンを取得し](https://doc.sitecore.com/xp/ja/developers/100/sitecore-experience-commerce/obtain-an-authentication-token--c--.html "Obtain an authentication token (C#)") なければなりません。

プライシングAPIは、価格帳に関連するカタログを追加、取得、編集、管理する方法を提供します。

## プライシングAPI(C#)を使って価格帳を扱う

価格帳は価格情報のセットを格納する容器です。

プライシングAPIは、価格帳に関連するカタログを追加、取得、編集、管理するための以下の方法を提供します。

-   [価格帳を追加(C#)](https://doc.sitecore.com/xp/ja/developers/100/sitecore-experience-commerce/work-with-the-pricing-api.html#UUID-5baf96f2-f010-b25d-2326-fa1b1a87f283_section-5c814850becf4-idm45984630715872 "Add price book (C#)")
-   [プライスブック(C#)を入手してください](https://doc.sitecore.com/xp/ja/developers/100/sitecore-experience-commerce/work-with-the-pricing-api.html#UUID-5baf96f2-f010-b25d-2326-fa1b1a87f283_section-5c814ce9e423c-idm46092391030704 "Get price book (C#)")
-   [価格帳(C#)を編集する](https://doc.sitecore.com/xp/ja/developers/100/sitecore-experience-commerce/work-with-the-pricing-api.html#UUID-5baf96f2-f010-b25d-2326-fa1b1a87f283_section-5c8159868a644-idm46092391057808 "Edit a price book (C#)")
-   [関連カタログ(C#)を入手](https://doc.sitecore.com/xp/ja/developers/100/sitecore-experience-commerce/work-with-the-pricing-api.html#UUID-5baf96f2-f010-b25d-2326-fa1b1a87f283_section-5c816126031da-idm45984630695552 "Get associated catalogs (C#)")
-   [カタログを価格帳(C#)に関連付ける](https://doc.sitecore.com/xp/ja/developers/100/sitecore-experience-commerce/work-with-the-pricing-api.html#UUID-5baf96f2-f010-b25d-2326-fa1b1a87f283_section-5c8165f7751fb-idm45681590046528 "Associate a catalog to a price book (C#)")
-   [カタログを価格帳(C#)から切り離す](https://doc.sitecore.com/xp/ja/developers/100/sitecore-experience-commerce/work-with-the-pricing-api.html#UUID-5baf96f2-f010-b25d-2326-fa1b1a87f283_section-5c816ae85a630-idm45984630541648 "Disassociate a catalog from a price book (C#)")

### 価格帳を追加(C#)

価格帳を追加するには、クエリで一意の価格帳名を指定する必要があります。オプションで、表示名や説明を含めることも可能です。

価格帳を追加するには、例えば内部名(MyPriceBook)、表示名(Book Display Name)、帳簿説明(Book Description)を指定します。

DataServiceActionQuerySingle<CommerceCommand> actionQuery = container.AddPriceBook("MyPriceBook", "Book Display Name", "Book Description", "{0F65742E-317F-44B0-A4DE-EBF06209E8EE}");
CommerceCommand command = Proxy.DoCommand(actionQuery);

クエリ応答はPriceCardAddedモデルを用いて価格表に配慮したIDを返します。例えば:

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

### プライスブック(C#)を入手してください

クエリにフレンドリーなIDを含めることで、既存の価格帳をプログラム的に取得できます。オプションで、[ODataの拡張オプション](https://www.odata.org/getting-started/basic-tutorial/#expand) を使ってOdataクエリを価格帳のコンポーネントを含めて拡張することもできます。

例えば、価格帳とその構成要素を取得するには:

DataServiceQuerySingle<PriceBook> query = container.PriceBooks.ByKey(bookFriendlyId).Expand("Components");
PriceBook book = Proxy.GetValue(query);

### 価格帳(C#)を編集する

プライシングAPIを使って、プライスブックをプログラム的に編集できます。プライスブックを編集する際、内部名を変更することはできません。プライスブックの表示名、説明、通貨セットのプロパティは変更できます。

> !注通貨を変更するには、Sitecoreコンテンツエディター内のCommerce Control Panelをご利用ください。

価格帳の編集方法:

-   価格帳の説明や表示名を変更するには:
    
    DataServiceActionQuerySingle<CommerceCommand> actionQuery = container.EditPriceBook(bookFriendlyId, "edited book description", "edited book display name", "{0F65742E-317F-44B0-A4DE-EBF06209E8EE}");
    CommerceCommand command = Proxy.DoCommand(actionQuery);
    
-   例えば、表示名を変えずに価格帳の説明を変更する方法:
    
    actionQuery = container.EditPriceBook(bookFriendlyId, string.Empty, "edited book display name only", "{0F65742E-317F-44B0-A4DE-EBF06209E8EE}");
    command = Proxy.DoCommand(actionQuery);
    CommerceCommand command = Proxy.DoCommand(actionQuery);
    

### 関連カタログ(C#)を入手

プライシングAPIを使って、プライスブックに関連付けられたカタログのリストを取得します。

例えば、関連するカタログを取得するには、AventureWorksPriceBookに関連付けられたカタログのリストを以下に示します:

DataServiceQuery<AssociatedCatalogModel> query = container.GetPriceBookAssociatedCatalogs("AdventureWorksPriceBook");
List<AssociatedCatalogModel> catalogs = Proxy.Execute(query).ToList();

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

1つまたは複数のカタログをプライスブックにプログラム的に関連付けることができます。カタログは1つのプライスブックにしか関連付けられません。

> !注カタログは一度に単一の価格帳にしか関連付けられません。もしカタログがすでに価格簿に関連付けられている場合、そのカタログを別の価格帳に関連付けることができますが、最初のカタログとの関連付けは失われます。残るのは最新の関連のみです。

例えば、カタログを価格帳に関連付け、MyPriceBookをMyCatalogに関連付ける場合:

DataServiceActionQuerySingle<CommerceCommand> actionQuery = container.AssociateCatalogToPriceBook("MyPriceBook", "MyCatalog");
CommerceCommand command = Proxy.DoCommand(actionQuery);

### カタログを価格帳(C#)から切り離す

関連する価格帳からカタログをプログラム的に作成できます。

カタログを価格帳から切り離す、例えばMyCatalog" をMyPriceBookから切り離す:

DataServiceActionQuerySingle<CommerceCommand> actionQuery = container.DisassociateCatalogFromPriceBook("MyPriceBook", "MyCatalog");
CommerceCommand command = Proxy.DoCommand(actionQuery);
## プライシングAPI(C#)を使ってプライスカードを扱う

プライシングAPIは、価格カードの追加、取得、編集、複製、削除を行うための以下の方法を提供します:

-   [プライスカード(C#)を追加してください](https://doc.sitecore.com/xp/ja/developers/100/sitecore-experience-commerce/work-with-the-pricing-api.html#UUID-5baf96f2-f010-b25d-2326-fa1b1a87f283_section-5c816f9f95cb4-idm45091643973904 "Add a price card (C#)")
-   [価格表(C#)を編集する](https://doc.sitecore.com/xp/ja/developers/100/sitecore-experience-commerce/work-with-the-pricing-api.html#UUID-5baf96f2-f010-b25d-2326-fa1b1a87f283_section-5c8172cab8ea0-idm46092390584416 "Edit a price card (C#)")
-   [プライスカードの複製(C#)](https://doc.sitecore.com/xp/ja/developers/100/sitecore-experience-commerce/work-with-the-pricing-api.html#UUID-5baf96f2-f010-b25d-2326-fa1b1a87f283_section-5c82a33651380-idm44855509990384 "Duplicate a price card (C#)")
-   [プライスカードを削除してください](https://doc.sitecore.com/xp/ja/developers/100/sitecore-experience-commerce/work-with-the-pricing-api.html#UUID-5baf96f2-f010-b25d-2326-fa1b1a87f283_section-5c82a34574f74-idm45681589072944 "Delete a price card")

### プライスカード(C#)を追加してください

プライスカードをプライスブックに追加するには、クエリでプライスカードの内部名とカードを追加するプライスブック名を指定する必要があります。

プライスカードの名前はプライスブック内で一意でなければなりません。プライスカードを作成した後に内部名を変更することはできません。オプションで、プライスカードの表示名や説明を含めることも可能です。

例えば、価格簿に価格表を付けるには、MyPriceBookにMyPriceCardを追加するには:

DataServiceActionQuerySingle<CommerceCommand> actionQuery = container.AddPriceCard("MyPriceBook", "MyPriceCard", "Card Display Name", "Card Description");
CommerceCommand command = Proxy.DoCommand(actionQuery);

// the price card friendly id is returned in the PriceCardAdded model
PriceCardAdded priceCardAddedModel = command.Models.OfType<PriceCardAdded>().FirstOrDefault();
string cardFriendlyId = priceCardAddedModel?.PriceCardFriendlyId;

クエリはPriceCardAddedモデルを用いた価格カードのフレンドリーIDを返します。以下の例に示されます。

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

### 価格表(C#)を編集する

プライスカードの詳細はプログラム的に変更できます。プライスカードの内部名は変更できません。変更できるのはプライスカードの表示名と説明だけです。クエリで物件の新しい値を指定しなければ、既存の値は変更されません。

価格表を編集するには、クエリに新しい名前や新しい説明、またはその両方を含めてください。例えば:

DataServiceActionQuerySingle<CommerceCommand> actionQuery = container.EditPriceCard(cardFriendlyId, "edited card display name", "edited card description");
CommerceCommand command = Proxy.DoCommand(actionQuery);

### プライスカードの複製(C#)

同じ価格帳内で新しい価格カードを作成したい場合、すべての価格スナップショットを *ドラフト* 状態に設定した価格表を複製してください。

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

DataServiceActionQuerySingle<CommerceCommand> actionQuery = container.DuplicatePriceCard(CardFriendlyId, "MyDuplicatePriceCard");
CommerceCommand command = Proxy.DoCommand(actionQuery);

クエリはPriceCardAdded モデルにおける新しい価格カードのフレンドリーなIDを返します。例えば:

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

### プライスカードを削除してください

プライスカードは *承認* されたスナップショットが含まれていない場合にのみ削除できます。

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

DataServiceActionQuerySingle<CommerceCommand> actionQuery = container.DeletePriceCard(cardFriendlyId);
CommerceCommand command = Proxy.DoCommand(actionQuery);
## プライシングAPI(C#)を使って価格スナップショットを扱う

スナップショットは、指定された日時にプライスカードに適用されるように定義された価格を含みます。プライシングAPIは、価格スナップショットの追加、編集、削除、タグ追加、削除タグの実行および承認ステータス設定を行う以下の方法を提供します。

-   [価格スナップショットを追加(C#)](https://doc.sitecore.com/xp/ja/developers/100/sitecore-experience-commerce/work-with-the-pricing-api.html#UUID-5baf96f2-f010-b25d-2326-fa1b1a87f283_section-5c8178832a75a-idm45681589363040 "Add a price snapshot (C#)")
-   [スナップショットを編集する(C#)](https://doc.sitecore.com/xp/ja/developers/100/sitecore-experience-commerce/work-with-the-pricing-api.html#UUID-5baf96f2-f010-b25d-2326-fa1b1a87f283_section-5c8187244fc88-idm45091644033504 "Edit a snapshot (C#)")
-   [スナップショット価格(C#)を削除する](https://doc.sitecore.com/xp/ja/developers/100/sitecore-experience-commerce/work-with-the-pricing-api.html#UUID-5baf96f2-f010-b25d-2326-fa1b1a87f283_section-5c819399968f0-idm45681589875232 "Remove a snapshot price (C#)")
-   [価格スナップショットにタグを追加する(C#)](https://doc.sitecore.com/xp/ja/developers/100/sitecore-experience-commerce/work-with-the-pricing-api.html#UUID-5baf96f2-f010-b25d-2326-fa1b1a87f283_section-5c819428224a0-idm45091643620032 "Add a tag to a price snapshot (C#)")
-   [スナップショットからタグを削除する方法(C#)](https://doc.sitecore.com/xp/ja/developers/100/sitecore-experience-commerce/work-with-the-pricing-api.html#UUID-5baf96f2-f010-b25d-2326-fa1b1a87f283_section-5c81969f952e7-idm45681589828624 "Removing a tag from a snapshot (C#)")

> !注プライスカードの状態によって、どの操作が実行可能かが決まります。
> 
> 編集、削除、タグ追加、削除の操作は *、ドラフト* 状態のスナップショットに対してのみ可能です。

### 価格スナップショットを追加(C#)

プライシングAPIを使って、プライスカードにプログラム的にスナップショットを追加できます。

クエリでは、価格カードに配慮したID(cardFriendlyId、およびsnapshotDate)を指定してください。

価格カードにスナップショットを追加するには、価格情報を*即座*に適用するためにsnapshotBeginDate = DateTimeOffset.UtcNowを使うことができます(または、将来の日付を指定することもできます):

var snapshotBeginDate = DateTimeOffset.UtcNow;
DataServiceActionQuerySingle<CommerceCommand> actionQuery = container.AddPriceSnapshot(cardFriendlyId, snapshotDate);
CommerceCommand command = Proxy.DoCommand();

応答はPriceCardAddedモデルを用いて価格スナップショットIDを返します。

string snapshotId = command.Models.OfType<PriceSnapshotAdded>;().FirstOrDefault()?.PriceSnapshotId;

### スナップショットを編集する(C#)

プライシングサービスAPIを使って、プライスカードの適用日を変更するなど、プログラム的にスナップショットを編集できます。

*ドラフト*ステータスにある価格スナップショットに変更はできません。

例えば、ドラフトスナップショットを変更するには、DateTimeOffset.UtcNow.AddDays(5) メソッドを用いてください:

var snapshotNewBeginDate = DateTimeOffset.UtcNow.AddDays(5);
DataServiceActionQuerySingle<CommerceCommand> actionQuery = container.AddPriceSnapshot(cardFriendlyId, snapshotNewBeginDate);
CommerceCommand command = Proxy.DoCommand(actionQuery);

### スナップショット価格(C#)を削除する

プライシングAPIを使って、プライスカードからスナップショット価格を削除できます。

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

DataServiceActionQuerySingle<CommerceCommand> actionQuery = container.RemovePriceSnapshot(cardFriendlyId, snapshotId);
CommerceCommand command = Proxy.DoCommand(actionQuery);

### 価格スナップショットにタグを追加する(C#)

タグは販売可能な商品をまとめる方法です。Pricing APIを使って価格スナップショットにタグを追加できます。そのタグを使って、同じタグに割り当てられたすべての販売可能な商品にスナップショットを適用できます。

例えば価格スナップショットにタグを追加するには、MyTag:

DataServiceActionQuerySingle<CommerceCommand> actionQuery = container.AddPriceSnapshotTag(cardFriendlyId, snapshotId, "MyTag");
CommerceCommand command = Proxy.DoCommand(actionQuery);

### スナップショットからタグを削除する方法(C#)

同じタグが割り当てられた販売可能なアイテム群にスナップショット価格を適用したくない場合は、スナップショットからタグを削除できます。

例えば、スナップショットからタグを削除するには、指定されたスナップショットからタグMyTagをID:

DataServiceActionQuerySingle<CommerceCommand> actionQuery = container.RemovePriceSnapshotTag(cardFriendlyId, snapshotId, "MyTag");
CommerceCommand command = Proxy.DoCommand(actionQuery);
## Pricing API(C#)を使って階層価格設定に取り組む

Pricing APIを使って、販売可能な商品の数量ごとに階層的な価格レベルを定義できます。例えば、1つの販売可能な商品は5ドル、同じ販売可能な商品を5つ以上購入した場合は価格を4ドルに下げるなどです。

プライシングAPIは、価格スナップショットから価格層を追加、編集、削除する方法を提供します:

-   [価格帯(C#)を追加](https://doc.sitecore.com/xp/ja/developers/100/sitecore-experience-commerce/work-with-the-pricing-api.html#UUID-5baf96f2-f010-b25d-2326-fa1b1a87f283_section-5c818f68c1ee5-idm46092390840976 "Add a price tier (C#)")
-   [価格帯(C#)を編集します](https://doc.sitecore.com/xp/ja/developers/100/sitecore-experience-commerce/work-with-the-pricing-api.html#UUID-5baf96f2-f010-b25d-2326-fa1b1a87f283_section-5c819203b9346-idm46092390736624 "Edit a price tier (C#)")
-   [価格帯(C#)を削除する](https://doc.sitecore.com/xp/ja/developers/100/sitecore-experience-commerce/work-with-the-pricing-api.html#UUID-5baf96f2-f010-b25d-2326-fa1b1a87f283_section-5c8192f1c5b47-idm45681589740304 "Remove a price tier (C#)")

> !注これらの操作は *ドラフト* ステータスの価格スナップショットに対してのみ行えます。

### 価格帯(C#)を追加

プライシングAPIを使って、価格カードに階層別価格を追加できます。

例えば、価格カードに階層価格を追加するには、USD通貨を指定する階層、1の数量と20の価格を追加してください:

DataServiceActionQuerySingle<CommerceCommand> actionQuery = container.AddPriceTier(cardFriendlyId, snapshotId, "USD", 1, 20);
CommerceCommand command = Proxy.DoCommand(actionQuery);

価格帯IDはPriceTierAddedモデルで返されます。例えば:

string priceTierId = command.Models.OfType<PriceTierAdded>().FirstOrDefault()?.PriceTierId;

### 価格帯(C#)を編集します

ティア価格の価格特性は変更できます。数量や通貨は変更できません。

階層価格の価値を変更するには、カード対応のID、スナップショットID、価格帯のID、そしてその価格帯の新しい金額の値をリクエストで指定してください。例えば:

DataServiceActionQuerySingle<CommerceCommand> actionQuery = container.EditPriceTier(cardFriendlyId, snapshotId, priceTierId,30);
CommerceCommand command = Proxy.DoCommand(actionQuery);

### 価格帯(C#)を削除する

価格カードから段階的な価格を削除することができます。

価格帯を削除するには、カード対応のID、スナップショットID、価格帯のIDをリクエストで指定してください。例えば:

DataServiceActionQuerySingle<CommerceCommand> actionQuery = container.RemovePriceTier(cardFriendlyId, snapshotId, priceTierId);
CommerceCommand command = Proxy.DoCommand(actionQuery);
## Pricing API(C#)を使って価格スナップショットの状態を変更する

価格スナップショットの状態を変更するために、Pricing APIを使用できます。価格スナップショットは価格承認プロセスの対象となります。承認フロー中は、以下のことができます:

-   [スナップショットの状態を *ドラフト* から*ReadyForApproval*に変更する(C#)](https://doc.sitecore.com/xp/ja/developers/100/sitecore-experience-commerce/work-with-the-pricing-api.html#UUID-5baf96f2-f010-b25d-2326-fa1b1a87f283_section-5c82983e57575-idm44855511390032 "Change a snapshot status from draft to ReadyForApproval (C#)")
-   [スナップショットの状態を*ReadyForApproval*から *ドラフト* (C#)に変更する](https://doc.sitecore.com/xp/ja/developers/100/sitecore-experience-commerce/work-with-the-pricing-api.html#UUID-5baf96f2-f010-b25d-2326-fa1b1a87f283_section-5c829a95d833f-idm45681589053440 "Change a snapshot status from ReadyForApproval to draft (C#)")
-   [スナップショットの状態を*Approved* (C#)に変更する](https://doc.sitecore.com/xp/ja/developers/100/sitecore-experience-commerce/work-with-the-pricing-api.html#UUID-5baf96f2-f010-b25d-2326-fa1b1a87f283_section-5c82a1c427c64-idm44855511265600 "Change a snapshot status to Approved (C#)")

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

スナップショットステータスを *ドラフト* から*ReadyForApproval*に変更して承認をリクエストできます。オプションで、リクエストにコメントを含めることもできます。

例えば、コメント文字列を含むドラフトスナップショットの承認を要求する場合(*このスナップショットは承認準備完了*です):

// requesting approval
DataServiceActionQuerySingle<CommerceCommand> actionQuery = container.SetPriceSnapshotsApprovalStatus(cardFriendlyId, new List<string> { snapshotId }, "ReadyForApproval", "This snapshot is ready to be approved");
CommerceCommand command = Proxy.DoCommand(actionQuery);

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

スナップショットのステータスを*ReadyForApproval*から*draft*に変更してスナップショットを拒否できます。オプションで、クエリにコメント文字列を含めることも可能です。

例えば、スナップショットのステータスを*ReadyForApproval*から*Draft*に変更するには、オプションのコメント文字列を含めてください。 *このスナップショットは拒否されました*:

// rejecting approval of a snapshot
DataServiceActionQuerySingle<CommerceCommand> actionQuery = container.SetPriceSnapshotsApprovalStatus(cardFriendlyId, new List<string> { snapshotId }, "Draft", "This snapshot has been rejected");
CommerceCommand command = Proxy.DoCommand(actionQuery);

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

スナップショットのステータスを*ReadyForApproval*から*Approved*に変更して承認します。オプションで、クエリにコメント文字列を含めることもできます。

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

// approving a snapshot
DataServiceActionQuerySingle<CommerceCommand> actionQuery = container.SetPriceSnapshotsApprovalStatus(cardFriendlyId, new List<string> { snapshotId }, "Approved", "This snapshot is now approved");
CommerceCommand command = Proxy.DoCommand(actionQuery);