Sitecore Commerce Engine は OData サービスの形式でWeb APIを提供しています。今回は、Microsoftが提供するODataODataサービスのメタデータからプロキシを生成する OData Client Code Generator を使用して作成したプロキシクラスを使ってSitecore Commerce Engineが提供するWeb APIにアクセスしてみます。
動作確認環境は次の通りです
- Visual Studio 2015 Community Edition (英語UI)
- Sitecore 8.2 update1, Sitecore Commerce 8.2.1
- サンプルのコマース環境(reference storefront) がセットアップ済み
1. OData Client Code Generator のインストール
Visual Studio を起動してメニューバーの Tools > Extensions and Updates をクリック。 OData Client Code Generator をインストールします。

Visual Studio を再起動して拡張機能のインストール終了です。
2. プロキシの生成
サンプル用のコンソールアプリケーションプロジェクトをセットアップします。プロジェクトを右クリックし、 Add > New Item をクリックします。Codeカテゴリにある OData Client テンプレートからファイルを作成します。

作成したttファイルをダブルクリックし、MetadataDocumentUri の値をOdataサービスのメタデータが公開されているURLに設定します。デフォルトの設定でローカルにインストールされた Sitecore Commerce Engine の場合は、例えば次のURLになります。
http://localhost:5000/api/$metadata

ファイルを保存すると、自動的にプロキシ用のクラスが生成されると思います。
3.サンプルコード
コンソールプログラムでたとえば次の例のようなコードを使って、特定のオーダーやペンディング中のオーダーの一覧にアクセスできます。
class Program
{
static void Main(string[] args)
{
var container = new Container(new Uri("http://localhost:5000/api/"));
container.BuildingRequest += Container_BuildingRequest;
// 例1:IDを指定して Order を取得
string orderId = "{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXXXX}";
var query = new DataServiceQuerySingle<Sitecore.Commerce.Plugin.Orders.Order>(container.Orders.Context, $"Orders('{orderId}')");
var order = query.GetValue();
Console.WriteLine($"order total:{order.Totals.GrandTotal.Amount}");
// 例2:Pending Order の Order を取得
var query2 = new DataServiceQuerySingle<Sitecore.Commerce.Plugin.ManagedLists.ManagedList>(container.ManagedLists.Context, "GetList(id='PendingOrders',type='Sitecore.Commerce.Plugin.Orders.Order, Sitecore.Commerce.Plugin.Orders',skip=0,take=10)").Expand("Items($expand=Components)");
var pendingOrders = query2.GetValue();
foreach(var o in pendingOrders.Items.OfType<Sitecore.Commerce.Plugin.Orders.Order>())
{
Console.WriteLine(o.Totals.GrandTotal.Amount);
}
Console.ReadLine();
}
private static void Container_BuildingRequest(Object sender, BuildingRequestEventArgs e)
{
e.Headers.Add("Environment", "HabitatAuthoring");
e.Headers.Add("ShopName", "storefront");
}
}
Web APIの呼び出し方は Sitecore Commerce SDKに付属する Postman用のサンプルがたくさんあるので、そちらをベースにしてクエリを組み立てると簡単に作成できると思います。
簡単ですが説明は以上となります。
さんのコメント: さんのコメント: