Dynamics CRM Online 2015 Update 1 新機能: Web API 開発者プレビュー その 7
みなさん、こんにちは。
前回に引き続き 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 開発者プレビュー その 6
今回は Web API を利用した Action と Function の機能を紹介します。
概要
Web API と REST エンドポイントの最大の違いは Action と Function
をサポートしていることです。これによりレコードの単純な作成、
読み取り、更新、削除だけでなく各種組織サービスも実行できます。
今回のバージョンではまだ全て組織サービスがサポートされては
いませんが、以下にいくつか紹介します。
Action の利用
普段よく使われる組織メッセージとして WhoAmI 要求を試します。
プログラムの実装
1 前回利用した Visual Studio ソリューションを開き、Program.cs
ファイルを開きます。新しく以下のメソッドを追加します。
public async Task RunActions(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.RunViewQueries(result.AccessToken)));
変更後)
Task.WaitAll(Task.Run(async () => await app.RunActions(result.AccessToken)));
3. 新しく追加した RunActions メソッド内に以下のコードを追加
して、WhoAmI を実行します。
// WhoAmI Action アドレスの作成と実行
HttpResponseMessage whoAmIRes = await httpClient.GetAsync(serviceUrl + "WhoAmI");
4. 以下のコードを追加して結果を表示します。
// 結果の表示
JToken jToken = JObject.Parse(whoAmIRes.Content.ReadAsStringAsync().Result);
Console.WriteLine("UserId: {0}", jToken["UserId"]);
Console.WriteLine("BusinessUnitId: {0}", jToken["BusinessUnitId"]);
Console.WriteLine("OrganizationId: {0}", jToken["OrganizationId"]);
動作確認
1. F5 キーを押下してプログラムを実行します。
2. 認証ダイアログが表示されたらログインします。
3. WhoAmI の結果が表示されることを確認します。
Function の利用
次に Function として、上記で取得した UserId をそのまま利用できる
RetrieveUserPrivileges を試します。
プログラムの実装
1. 上記に続いて、以下のコードを追加します。まず UserId を変数に
取得します。
// ユーザーID の取得
string userId = jToken["UserId"].ToString();
2. 次に Function を実行する要求を実行します。
// Function の実行
HttpResponseMessage retrieveUserPrivilegesRes = await httpClient.GetAsync(serviceUrl + "RetrieveUserPrivileges(UserId=" + userId + ")");
3. 最後の結果を表示するコードを追加します。
// 結果の表示
JToken privileges = JObject.Parse(retrieveUserPrivilegesRes.Content.ReadAsStringAsync().Result)["value"];
foreach (JToken privilege in privileges)
{
Console.WriteLine("レベル: {0}, PrivilegeId: {1}", privilege["Depth"], privilege["PrivilegeId"]);
}
動作確認
1. F5 キーを押下してプログラムを実行します。
2. 認証ダイアログが表示されたらログインします。
3. RetrieveUserPrivileges の結果が表示されることを確認します。
以下に今回追加したメソッドを示します。
public async Task RunActions(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);
// WhoAmI Action アドレスの作成と実行
HttpResponseMessage whoAmIRes = await httpClient.GetAsync(serviceUrl + "WhoAmI");
// 結果の表示
JToken jToken = JObject.Parse(whoAmIRes.Content.ReadAsStringAsync().Result);
Console.WriteLine("UserId: {0}", jToken["UserId"]);
Console.WriteLine("BusinessUnitId: {0}", jToken["BusinessUnitId"]);
Console.WriteLine("OrganizationId: {0}", jToken["OrganizationId"]);
// ユーザーID の取得
string userId = jToken["UserId"].ToString();
// Function の実行
HttpResponseMessage retrieveUserPrivilegesRes = await httpClient.GetAsync(serviceUrl + "RetrieveUserPrivileges(UserId=" + userId + ")");
// 結果の表示
JToken privileges = JObject.Parse(retrieveUserPrivilegesRes.Content.ReadAsStringAsync().Result)["value"];
foreach (JToken privilege in privileges)
{
Console.WriteLine("レベル: {0}, PrivilegeId: {1}", privilege["Depth"], privilege["PrivilegeId"]);
}
}
}
まとめ
Web API が Action と Function をサポートすることで、開発に
必要なすべての操作を行うことが出来るようになります。まだ
プレビューですが、基本的なコンセプトは変わりませんので、
是非お試しください!
- 中村 憲一郎