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. キーをクリックします。右側の画面で「新規」ボタンをクリックします。

image

4. キーとなる列を選択します。今回は取引先企業番号をキーとして
指定しました。任意の表示名と名前を付けます。 尚、ここで選択
したキーは全てのレコードで一意である必要があります。

image

5. 「保存して閉じる」をクリックします。状態が保留となります。

image

6. しばらく待ってから画面を更新します。状態が保留中からアクティブに
なると準備完了です。

image

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. 認証ダイアログが表示されたらログインします。

image

3. 同じレコードが取得できていることを確認します。

image

以下に今回追加したメソッドを示します。

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 からもキーを利用できるため他システム連携が
よりスムーズに行えます。是非お試しください。

- 中村 憲一郎

※本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります