Dynamics CRM 2016 SDK 新機能: Web API その 6: 代替えキー の利用
みなさん、こんにちは。
前回に引き続き、Dynamics CRM 2016 SDK の新機能として、正式版と
なった Web API について紹介します。
今回は代替えキーの利用について紹介します。
概要
レコードを特定する際に、既定ではレコードの GUID を利用しますが、
他システム連携時などレコード ID が不明な場合は代替えキーを利用
できます。代替えキーについては以下の記事を参照してください。
Dynamics CRM Online 2015 Update 1 SDK 新機能: 代替えキー
代替えキーの作成
まず代替えキーの設定を行います。
1. ブラウザで Dynamics CRM に接続します。
2. 設定 | カスタマイズ | システムのカスタマイズより、代替えキーを
設定するエンティティを開きます。今回は取引先企業を使います。
3. キーをクリックします。右側の画面で「新規」ボタンをクリックします。
4. キーとなる列を選択します。今回は取引先企業番号をキーとして
指定しました。任意の表示名と名前を付けます。 尚、ここで選択
したキーは全てのレコードで一意である必要があります。
5. 「保存して閉じる」をクリックします。状態が保留となります。
6. しばらく待ってから画面を更新します。状態が保留中からアクティブに
なると準備完了です。
7. 少なくとも 1 件の取引先企業レコードが取引先企業番号を持っている
ことを確認し、存在しない場合には作成してください。
プログラムの実装
1. 前回利用した Visual Studio ソリューションを開き、Program.cs
ファイルを開きます。新しく以下のメソッドを追加します。
public async Task RunAlternativeKey (string accessToken)
{
// HttpClient の作成
using (HttpClient httpClient = new HttpClient())
{
// Web API アドレスの作成
string serviceUrl = serverUrl + "/api/data/v8.0/";
// ヘッダーの設定
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
}
}
2. Main メソッドの以下のコードを書き換えて、新しいメソッドを
呼ぶように変更します。
元)
Task.WaitAll(Task.Run(async () => await app.RunUnboundAction (result.AccessToken)));
変更後)
Task.WaitAll(Task.Run(async () => await app.RunAlternativeKey(result.AccessToken)));
3. 新しく追加した RunAlternativeKey メソッド内に以下のコードを追加
して、取引先企業番号が存在する取引先企業レコードを取得します。
// 取引先企業番号が存在する取引先企業の取得
HttpResponseMessage accountsRes = await httpClient.GetAsync(serviceUrl + "accounts?$select=name,accountnumber&$filter=accountnumber ne null&$top=1");
JToken accounts = JObject.Parse(accountsRes.Content.ReadAsStringAsync().Result)["value"];
4. 1 件目のレコードの名前を画面に表示します。
// 取引先企業名の表示
Console.WriteLine("取引先企業名: {0}", accounts[0]["name"]);
5. 次は取引先企業番号で同じレコードを取得してみます。以下の
コードを追加します。
// 取引先企業番号が存在する取引先企業の取得
HttpResponseMessage accountWithNumberRes = await httpClient.GetAsync(serviceUrl + "accounts(accountnumber=" + accounts[0]["accountnumber"] + ")");
JToken account = JObject.Parse(accountsRes.Content.ReadAsStringAsync().Result)["value"];
// 取引先企業名の表示
Console.WriteLine("取引先企業名: {0}", account[0]["name"]);
動作確認
1. F5 キーを押下してプログラムを実行します。
2. 認証ダイアログが表示されたらログインします。
3. 同じレコードが取得できていることを確認します。
以下に今回追加したメソッドを示します。
public async Task RunAlternativeKey(string accessToken)
{
// HttpClient の作成
using (HttpClient httpClient = new HttpClient())
{
// Web API アドレスの作成
string serviceUrl = serverUrl + "/api/data/v8.0/";
// ヘッダーの設定
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
// 取引先企業番号が存在する取引先企業の取得
HttpResponseMessage accountsRes = await httpClient.GetAsync(serviceUrl + "accounts?$select=name,accountnumber&$filter=accountnumber ne null&$top=1");
JToken accounts = JObject.Parse(accountsRes.Content.ReadAsStringAsync().Result)["value"];
// 取引先企業名の表示
Console.WriteLine("取引先企業名: {0}", accounts[0]["name"]);
// 取引先企業番号が存在する取引先企業の取得
HttpResponseMessage accountWithNumberRes = await httpClient.GetAsync(serviceUrl + "accounts(accountnumber=" + accounts[0]["accountnumber"] + ")");
JToken account = JObject.Parse(accountsRes.Content.ReadAsStringAsync().Result)["value"];
// 取引先企業名の表示
Console.WriteLine("取引先企業名: {0}", account[0]["name"]);
}
}
まとめ
代替えキーはレコード ID 以外を利用してレコードを特定する場合に非常に
有効な手段です。Web API からもキーを利用できるため他システム連携が
よりスムーズに行えます。是非お試しください。
- 中村 憲一郎
※本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります