Dynamics CRM Online 2015 Update 1 新機能: Web API 開発者プレビュー その 6
みなさん、こんにちは。
前回に引き続き Dynamics CRM Online 2015 Update 1 で提供される
Web API 開発者プレビューについて紹介します。連載記事になるため
第 1 回からご覧ください。
Web API 開発者プレビュー その 1
Web API 開発者プレビュー その 2
Web API 開発者プレビュー その 3
Web API 開発者プレビュー その 4
Web API 開発者プレビュー その 5
今回は Web API 固有の機能である、ビューを利用したレコードをの
取得を紹介します。
概要
ビューを利用したレコードの取得は以下の流れでレコードを取得します。
1. 特定エンティティのビュー一覧を取得します。
2. 取得したビューの情報を利用してレコードの一覧を取得します。
では早速実装していきましょう。
特定エンティティのビュー一覧取得
まず取引先企業エンティティ用のビュー一覧を取得します。
プログラムの実装
1 前回利用した Visual Studio ソリューションを開き、Program.cs
ファイルを開きます。新しく以下のメソッドを追加します。
public async Task RunViewQueries(string accessToken)
{
// HttpClient の作成
using (HttpClient httpClient = new HttpClient())
{
// Web API アドレスの作成
string serviceUrl = serverUrl + "/api/data/";
// ヘッダーの設定
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
}
}
2. Main メソッドの以下のコードを書き換えて、新しいメソッドを
呼ぶように変更します。
元)
Task.WaitAll(Task.Run(async () => await app.RunOptimisticConcurrency(result.AccessToken)));
変更後)
Task.WaitAll(Task.Run(async () => await app.RunViewQueries(result.AccessToken)));
3. 新しく追加した RunViewQueries メソッド内に以下のコードを追加
して、取引先企業用のビュー一覧を取得します。
// 取引先企業ビューの一覧取得
HttpResponseMessage retrieveRes = await httpClient.GetAsync(serviceUrl + "accounts/mscrm.GetSavedQueries");
JToken results = JObject.Parse(retrieveRes.Content.ReadAsStringAsync().Result)["value"];
// ビュー名の漂位j
foreach (JToken result in results)
{
Console.WriteLine("ビュー名: {0}", result["name"]);
}
動作確認
1. F5 キーを押下してプログラムを実行します。
2. 認証ダイアログが表示されたらログインします。
3. ビューの一覧が表示されることを確認します。
4. Enter キーを押下してプログラムを終了します。
ビューを利用したレコードを一覧の取得
次に取得したビューを利用してレコードの一覧を取得します。
プログラムの実装
1. 上記に続いて、以下のコードを追加します。api/data/accounts
アドレスに savedQuery=<savedQueryId> を渡すことで、該当の
ビュー定義を利用したレコードを取得出来ます。
// 取引先企業レコードの取得
retrieveRes = await httpClient.GetAsync(serviceUrl + "accounts?savedQuery=" + results[0]["savedqueryid"]);
JToken accounts = JObject.Parse(retrieveRes.Content.ReadAsStringAsync().Result)["value"];
2. 取得した結果を表示します。以下のコードを追加します。
// 取引先企業名の表示
foreach (JToken account in accounts)
{
Console.WriteLine("取引先企業名: {0}", account["name"]);
}
動作確認
1. F5 キーを押下してプログラムを実行します。
2. 認証ダイアログが表示されたらログインします。
3. ビューの一覧と 1 つめのビュー定義を利用して取得された
取引先企業一覧が表示されることを確認します。
個人ビューの利用
上記の例ではシステムビューを取得して利用しましたが、個人ビューを
利用したい場合は GetSavedQueries を GetUserQueries に、savedQuery を
userQuery に書き換えることで対応できます。
今回追加したメソッドを以下に示します。
public async Task RunViewQueries(string accessToken)
{
// HttpClient の作成
using (HttpClient httpClient = new HttpClient())
{
// Web API アドレスの作成
string serviceUrl = serverUrl + "/api/data/";
// ヘッダーの設定
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
// 取引先企業ビューの一覧取得
HttpResponseMessage retrieveRes = await httpClient.GetAsync(serviceUrl + "accounts/mscrm.GetSavedQueries");
JToken results = JObject.Parse(retrieveRes.Content.ReadAsStringAsync().Result)["value"];
// ビュー名の漂位j
foreach (JToken result in results)
{
Console.WriteLine("ビュー名: {0}", result["name"]);
}
// 取引先企業レコードの取得
retrieveRes = await httpClient.GetAsync(serviceUrl + "accounts?savedQuery=" + results[0]["savedqueryid"]);
JToken accounts = JObject.Parse(retrieveRes.Content.ReadAsStringAsync().Result)["value"];
// 取引先企業名の表示
foreach (JToken account in accounts)
{
Console.WriteLine("取引先企業名: {0}", account["name"]);
}
}
}
まとめ
今回は Web API 固有の機能としてエンティティビューを利用したレコード
取得を紹介しました。クエリを別途作らなくても、保存されているビューを
使用してクエリ出来る点が便利だと思います。
是非お試しください!
- 中村 憲一郎