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用のサンプルがたくさんあるので、そちらをベースにしてクエリを組み立てると簡単に作成できると思います。
簡単ですが説明は以上となります。
さんのコメント: さんのコメント: