Dynamics CRM Online 2015 Update 1 新機能: Web API 開発者プレビュー その 4
みなさん、こんにちは。
前回に引き続き Dynamics CRM Online 2015 Update 1 で提供される
Web API 開発者プレビューについて紹介します。連載記事になるため
第 1 回からご覧ください。
Web API 開発者プレビュー その 1
Web API 開発者プレビュー その 2
Web API 開発者プレビュー その 3
Web API では Upsert もサポートしています。Upsert の SDK サポート
は以下の記事をご覧ください。
Dynamics CRM Online 2015 Update 1 SDK 新機能: Upsert
Upsert で新規レコードの作成
まず Upsert を利用したレコードの作成を検証します。
プログラムの実装
1 前回利用した Visual Studio ソリューションを開き、Program.cs
ファイルを開きます。新しく以下のメソッドを追加します。
public async Task RunUpsert(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.Run(result.AccessToken)));
変更後)
Task.WaitAll(Task.Run(async () => await app.RunUpsert(result.AccessToken)));
3. Upsert を利用するにはレコードの GUID を指定する必要があります。
まずはまだ存在しないレコードを指定して、レコードが作成されるか
確認しましょう。以下のコードを新しく追加メソッド内に追加します。
// レコードの GUID
Guid newGuid = Guid.NewGuid();
// 取引先企業オブジェクトの作成
Account account = new Account();
account.name = "Upsert デモ";
account.telephone1 = "555-5555";
4. 送信するリクエストを作成します。以下コードを追加します。
HttpMethod には PATCH を利用します。
// 送信リクエストの作成
HttpRequestMessage request = new HttpRequestMessage(new HttpMethod("PATCH"), serviceUrl+ "accounts(" + newGuid + ")");
request.Content = new StringContent(JsonConvert.SerializeObject(account, new JsonSerializerSettings() { DefaultValueHandling = DefaultValueHandling.Ignore }));
request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json");
5. 最後にリクエストを送信します。
// リクエストの送信
await httpClient.SendAsync(request);
6. 以下のコードを追加して、一旦画面を止めるようにします。
Console.WriteLine("レコードを作成しました。");
Console.Read();
動作確認
1. F5 キーを押下してプログラムを実行します。
2. 認証ダイアログが表示されたらログインします。
3. レコード作成のメッセージが表示されたら、レコードを作成されたか
ブラウザで確認します。
Upsert で既存レコードの更新
次に Upsert を利用したレコードの更新を検証します。
プログラムの実装
1 上記に続いて以下のコードを追加します。まずは取引先企業の
オブジェクトを作ります。Guid は作成で利用したものと同じ
ID を指定します。
// 取引先企業オブジェクトの作成
Account account2 = new Account();
account2.name = "Upsert デモ 更新しました";
account2.telephone1 = "555-5555";
account2.accountid = newGuid;
2. 次に送信リクエストを作成します。基本的には上記で作成
したものと同じです。
// 送信リクエストの作成
HttpRequestMessage request2 = new HttpRequestMessage(new HttpMethod("PATCH"), serviceUrl + "accounts(" + newGuid + ")");
request2.Content = new StringContent(JsonConvert.SerializeObject(account2, new JsonSerializerSettings() { DefaultValueHandling = DefaultValueHandling.Ignore }));
request2.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json");
3. 最後にリクエストを送信します。
// リクエストの送信
await httpClient.SendAsync(request2);
4. レコードを更新したメッセージを表示します。
Console.WriteLine("レコードを更新しました。");
動作確認
1. F5 キーを押下してプログラムを実行します。
2. 認証ダイアログが表示されたらログインします。
3. レコードが作成された時点で一旦プログラムが停止します。ブラウザで
レコードをが追加されたことを確認します。
※ 1 行目は先ほど作成したレコードです。
4. プログラムに戻って、画面で Enter キーを押下します。
5. 以下のメッセージが出たタイミングでブラウザでレコードを更新された
ことを確認します。
最後に今回追加したメソッドを以下に示します。
public async Task RunUpsert(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);
// レコードの GUID
Guid newGuid = Guid.NewGuid();
// 取引先企業オブジェクトの作成
Account account = new Account();
account.name = "Upsert デモ";
account.telephone1 = "555-5555";
// 送信リクエストの作成
HttpRequestMessage request = new HttpRequestMessage(new HttpMethod("PATCH"), serviceUrl + "accounts(" + newGuid + ")");
request.Content = new StringContent(JsonConvert.SerializeObject(account, new JsonSerializerSettings() { DefaultValueHandling = DefaultValueHandling.Ignore }));
request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json");
// リクエストの送信
await httpClient.SendAsync(request);
Console.WriteLine("レコードを作成しました。");
Console.Read();
// 取引先企業オブジェクトの作成
Account account2 = new Account();
account2.name = "Upsert デモ 更新";
account2.telephone1 = "555-5555";
account2.accountid = newGuid;
// 送信リクエストの作成
HttpRequestMessage request2 = new HttpRequestMessage(new HttpMethod("PATCH"), serviceUrl + "accounts(" + newGuid + ")");
request2.Content = new StringContent(JsonConvert.SerializeObject(account2, new JsonSerializerSettings() { DefaultValueHandling = DefaultValueHandling.Ignore }));
request2.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json");
// リクエストの送信
await httpClient.SendAsync(request2);
Console.WriteLine("レコードを更新しました。");
}
}
まとめ
Web API でも SDK 同様 Upsert が利用できるのは便利です。
是非お試しください!
- 中村 憲一郎