Dynamics CRM Online 2015 Update 1 新機能: Web API 開発者プレビュー その 8

みなさん、こんにちは。

前回に引き続き 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 開発者プレビュー その 7

今回は Web API を利用した FormattedValue の取得を紹介します。

概要

Dynamics CRM はユーザーにレコードを返す際、FormattedValue と
いうユーザーの設定によってフォーマットされた値が一部の型で
返ります。Web API を利用した場合もこの FormattedValue を取得
出来るようになっています。

事前準備

今回はステータス型、金額型と日付型で検証を行います。事前に複数の
取引先企業レコードの利用限度額列に値を入れておいてください。

プログラムの実装

1 前回利用した Visual Studio ソリューションを開き、Program.cs
ファイルを開きます。新しく以下のメソッドを追加します。

public async Task RunFormattedValue(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.RunActions(result.AccessToken)));

変更後)
Task.WaitAll(Task.Run(async () => await app.RunFormattedValue(result.AccessToken)));

3. 新しく追加した RunFormattedValue メソッド内に以下のコードを追加
して、取引先企業の取得を実行します。ヘッダーとして include-anntation
を指定する点がポイントです。

// 取引先企業の取得
HttpRequestMessage retrieveReq = new HttpRequestMessage(HttpMethod.Get, serviceUrl + "accounts?$select=name,statecode,statuscode,creditlimit,createdon");
retrieveReq.Headers.Add("Prefer", "odata.include-annotations=\"*\"");

4. 要求を実行して結果を表示します。以下のコードを追加します。

// 要求の送信
HttpResponseMessage retrieveRes = await httpClient.SendAsync(retrieveReq);

// 結果の表示
JToken records = JObject.Parse(retrieveRes.Content.ReadAsStringAsync().Result)["value"];

foreach (JToken record in records)
{
    JObject fields = JsonConvert.DeserializeObject(record.ToString()) as JObject;

    foreach(var field in fields)
    {
        Console.WriteLine(field);
    }
}

動作確認

1. F5 キーを押下してプログラムを実行します。

2. 認証ダイアログが表示されたらログインします。

image

3. FormattedValue が表示されることを確認します。
列名に @mscrm.formattedvalue とついているものが
該当します。

image

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

public async Task RunFormattedValue(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);
               
        // 取引先企業の取得
        HttpRequestMessage retrieveReq = new HttpRequestMessage(HttpMethod.Get, serviceUrl + "accounts?$select=name,statecode,statuscode,creditlimit,createdon");
        retrieveReq.Headers.Add("Prefer", "odata.include-annotations=\"*\"");
               
        // 要求の送信
        HttpResponseMessage retrieveRes = await httpClient.SendAsync(retrieveReq);

        // 結果の表示
        JToken records = JObject.Parse(retrieveRes.Content.ReadAsStringAsync().Result)["value"];

        foreach (JToken record in records)
        {
            JObject fields = JsonConvert.DeserializeObject(record.ToString()) as JObject;

            foreach(var field in fields)
            {
                Console.WriteLine(field);
            }
        } 
    }
}

まとめ

FormattedValue はアプリケーションなどでユーザーに値を
表示する際に必要です。Web API はこのようにユーザーが
利用するアプリケーションも想定していますので、是非
開発に取り入れてみてください!

次回で HttpClient を利用した Web API の利用シリーズは
最終回です。最後はサポートするクエリを紹介します。

- 中村 憲一郎