Dynamics CRM 2011 Developer Extensions 紹介 - CrmSvcUtil ツールで生成できるファイルの種類

みなさん、こんにちは。

いよいよ 7 月になり夏直前ですがいかがお過ごしでしょうか。暑くなりそうですね。
そこで、少しでも開発効率が向上するよう、数回にわたり Microsoft Dynamics CRM
2011 SDK の Developer Extensions を紹介していきたいと思います。

Developer Extensions とは

Microsoft Dynamics CRM 2011 を利用した開発を行うために、ソフトウェア開発キット
が提供されていますが、それに加えて、Microsoft Dynamics CRM 2011 および
Microsoft Dynamics CRM オンラインと対話するアプリケーションの開発を簡素化
および迅速化するためのツールと情報が提供されます。

CrmSvcUtil.exe ツール
Visual Studio で利用できる、厳密な型のコードおよびサービスが生成できます。

CrmConnection クラス 
Microsoft Dynamics CRM サーバーへの接続を簡略化します。

CrmConfigurationManager クラス
カスタム拡張機能を有効にするための App.config および Web.config の構成
で利用できます。

CachedOrganizationService クラス
サービス結果のキャッシュ機能を提供します。

今回は CrmSvcUtil.exe ツールの詳細を紹介します。

CrmSvcUtil.exe ツール

CrmSvcUtil.exe ツールは以下の機能があります。

- 事前バインドで利用できる、組織内のエンティティ (ユーザー定義のエンティティと
属性を含む) を表す、厳密に型指定されたクラスの生成。IntelliSense を提供。

- サービス コンテキストの生成。 OrganizationServiceContext および、拡張
された CrmOrganizationServiceContext を生成可能。

型指定されたクラスの生成

既に多くの開発者の方がこの機能を利用されていますので、ここでは簡単に
利用方法を紹介します。まず既定のエンティティだけでなく、ユーザー定義
エンティティ情報も出力できることを確認するため、組織にカスタムエンティティ
を作成します。

1. Internet Explorer を開き、Microsoft Dynamics CRM 2011 に接続します。

2. 設定 | カスタマイズ | システムのカスタマイズをクリックします。

3. エンティティ | 取引先企業 | フィールドをクリックし、新規ボタンをクリックします。

4. 表示名に “My Account Field” と入力し、最大長を 200 に変更します。

5. 保存して閉じるボタンをクリックします。

6. 次にカスタムエンティティを作成します。
エンティティをクリックしてから、新規ボタンをクリックします。

7. 表示名と複数名に “My Custom Entity” と入力し、表示領域からワークプレースに
チェックをいれて、保存ボタンをクリックします

8. 1:N の関連付けをクリックして、新しい一対多関連付けボタンをクリックします。

9. 関連エンティティより取引先企業を選択し、表示名に “Parent Custom Entity”
と入力してから、保存して閉じるボタンをクリックします。

image

10. カスタムエンティティの画面で再度保存して閉じるボタンをクリックします。

既定のソリューション画面で、すべてのカスタマイズを公開ボタンをクリックします。

次に CrmSvcUtil.exe ツールを利用して、ファイルを生成します。

1. コマンドプロンプトを起動して、SDK フォルダ配下の bin に移動します。

2. 以下のコマンドを実行します。組織の情報は必要に応じて変更します。
※実際のコマンドは 1 行で入力してください。

crmsvcutil.exe /url:https://<CRM サーバー>:<ポート>/<組織>/XRMServices/2011/Organization.svc
/domain:<ドメイン名> /username:<ユーザー名> /password:<パスワード> /out:GeneratedCode.cs

3. Visual Studio 2010 を開きます。

4. Ctrl + O キーを押下し、sdk\bin フォルダに生成されたGeneratedCode.cs
ファイルを開きます。

5. ファイルには名前空間がなく、OrganizationSeviceContext クラスやこの
コンテキストで利用する AccountSet クラス等もないことを確認します。
その一方で、追加したカスタムエンティティやカスタムフィールドの情報が
含まれることを確認します。

[取引先企業のカスタムフィールド]
image

[カスタムエンティティ]
image

OrganizationServiceContext の生成

次にサービスコンテキストおよび関連するクラスの生成を行います。

1. 以下のコマンドを実行します。いくつかパラメーターが増えています。
※実際のコマンドは 1 行で入力してください。

crmsvcutil.exe /url:https://<CRM サーバー>:<ポート>/<組織>/XRMServices/2011/Organization.svc
/domain:<ドメイン名> /username:<ユーザー名> /password:<パスワード>
/out:GeneratedCodeforServiceContext.cs
/servicecontextname:XrmContext /namespace:MyConsoleApplication

2. GeneratedCodeforServiceContext.cs ファイルを開きます。

3. 名前空間があることや、OrganizationSeviceContext を継承した
XrmContext と AccountSet のような関連クラスがあることを確認します。

CrmOrganizationServiceContext の生成

最後に CrmOrganizationServiceContext を利用する場合です。

1. 以下のコマンドを実行します。codeCustomization パラメーターを
指定しています。これにより生成されるファイルのサービスコンテキストが
CrmOrganizationServiceContext を継承します。
※実際のコマンドは 1 行で入力してください。

crmsvcutil.exe /codeCustomization:"Microsoft.Xrm.Client.CodeGeneration.CodeCustomization, Microsoft.Xrm.Client.CodeGeneration"
/url:https://<CRM サーバー>:<ポート>/<組織>/XRMServices/2011/Organization.svc
/domain:<ドメイン名> /username:<ユーザー名> /password:<パスワード>
/out:GeneratedCodeforCrmOrganizationServiceContext.cs /servicecontextname:XrmContext
/namespace:MyConsoleApplication

2. GeneratedCodeforCrmOrganizationServiceContext.cs ファイルを
開きます。

3. CrmOrganizationSeviceContext を継承した XrmContext を確認します。

それぞれ生成されたファイルは Visual Studio のソリューションで利用可能です。

CrmSvcUtil.exe の動作変更

既定では、CrmSvcUtil.exe ツールは、組織内にあるすべてのエンティティの
情報を出力しますが、状況によってはこれは無駄です。そこでツールの動作を
変更する方法も提供しています。詳細は以下の記事を参照してください。

Dynamics CRM 2011 CrmSvcUtil ツールとその拡張方法 (フィルタリング)
https://blogs.msdn.com/b/crmjapan/archive/2011/08/03/dynamics-crm-2011-crmsvcutil-exe-extension.aspx

Dynamics CRM 2011 CrmSvcUtil ツールとその拡張方法 (オプションセット追加)
https://blogs.msdn.com/b/crmjapan/archive/2011/08/05/dynamics-crm-2011-crmsvcutil-exe-extension-optionset.aspx

まとめ

CrmSvcUtil.exe は実は様々な利用方法があることを、今回紹介できたと
思います。次回は CrmConnection クラスの紹介と、今回生成したクラスを
実際に利用したプログラムのサンプルを紹介します。

- Dynamics CRM サポート 中村 憲一郎