Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
みなさん、こんにちは。
前回に引き続き、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 からもキーを利用できるため他システム連携が
よりスムーズに行えます。是非お試しください。
- 中村 憲一郎
※本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります