Dynamics CRM モバイルアプリケーション開発 その 7

みなさん、こんにちは。

前回に引き続き、モバイルアプリケーション開発の紹介をします。
シリーズものですので、是非初回からご覧ください。

今回は事前バインドを利用した開発について紹介します。

CRM Service Utility for Mobile Development

事前バインドを利用するためには、通常 CrmSvcUtil.exe を利用
してファイルを生成しますが、既定では Microsoft.Xrm.Sdk.dll に
依存した形式で作成されるため、モバイル開発では利用ができない
問題があります。

CrmSvcUtil.exe はエクステンションを開発することで生成する
ファイルを制御することが可能です。SDK チームが以下のリンクで
モバイル開発用のエクステンションを公開しています。

CRM Service Utility for Mobile Development
https://code.msdn.microsoft.com/CRM-Service-Utility-for-4ca0c93b

利用方法

事前に最新の SDK をダウンロードしていることを前提とします。

エクステンションのビルド

1. 上記リンクよりソリューションをダウンロードします。
image

2. ダウンロードした zip ファイルを解凍します。

3. 解凍した C# フォルダにある CrmSvcMobileUtil.sln を開きます。

4. 参照設定を右クリックして参照の追加をクリックします。

image

5. 参照ボタンをクリックします。

6. SDK の bin フォルダ内 CrmSvcUtil.exe と Microsoft.Xrm.Sdk.dll
を参照として追加します。

image

7. FilteringService.cs を開きます。

8. GenerateEntity メソッド内を編集して、事前バインドで利用したい
エンティティを指定します。既定では account と task が生成される
ように設定されています。ここでは contact を生成するようにしました。

image

9. ビルドメニューよりソリューションをビルドします。

エクステンションの利用

ビルドしたエクステンションは以下の手順で利用します。

1. コマンドプロンプトを開き、ビルドしたフォルダに移動します。

2. 以下のコマンドを実行して事前バインド用のファイルを生成します。
コマンドは一行で入力してください。今回名前空間は CrmTypes としました。

>CrmSvcUtil.exe /codecustomization:"Microsoft.Crm.Sdk.Samples.CodeCustomizationService,CrmSvcMobileUtil"
/codewriterfilter:"Microsoft.Crm.Sdk.Samples.FilteringService,CrmSvcMobileUtil"
/url:<組織サービスエンドポイント 例:https://contoso.api.crm.dynamics.com/XRMServices/2011/Organization.svc>
/username:<ユーザー名>
/password:<パスワード>
/out:XrmData.cs
/namespace:<名前空間>

事前バインドの利用

1. 生成された XrmData.cs ファイルを CRMContact ソリューション
にある DataModel にコピーします。

image

2. MainPage.xaml.cs ファイル 64 行目に以下コードを追加します。
EnableProxyTypes メソッドは事前バインドを利用するために
必須のメソッドです。

image

3. btnSearch_Click メソッド内の foreach 部分を以下の様に
書き換えます。

foreach(CrmTypes.Contact result in results.Entities)
{
    Contact contact = new Contact()
    {
        Id = result.Id,
        FullName = result.FullName,
        EMailAddress1 = result.EMailAddress1
        //Id = (Guid)result["contactid"],
        //FullName = result["fullname"].ToString(),
        //EMailAddress1 = result["emailaddress1"].ToString()
    };

    contacts.Add(contact);
}

まとめ

事前バインドは開発効率を上げるためにも有効な手段です。
モバイル開発においても是非事前バインドを活用してください。

- 中村 憲一郎