Dynamics CRM 2011 SDK を利用したソリューションインポートの自動化

みなさん、こんにちは。

梅雨目前で暑い日が続きますが、いかがお過ごしでしょうか。
暑い中少しでも楽に開発が進められるよう、今回は SDK サンプルを
利用した、ソリューションの自動インポート方法の紹介をします。

概要

リボンやサイトマップのカスタマイズをはじめ、いくつかのカスタマイズは、
一旦エクスポートしたソリューションの中身を変更した後、再度インポート
することでカスタマイズが反映できますが、思ったとおりに変更されない場合
再度カスタマイズを変更後、またソリューションをインポートする必要があります。

このソリューションのインポート作業が数回から数十回になると、だんだんと
作業効率の悪さを感じるようになるものです。そこで SDK を使用して作業を
自動化してみましょう。また組織サービスの生成には CrmConnection クラスを
利用してみます。

サンプルと手順

1. Visual Studio 2010 で新しくコンソールアプリケーションを作成します。
ここでは AutoImportSolution と名前をつけました。

2. プロジェクトのプロパティより、対象のフレームワークを .NET Framework
4.0 に変更します。
image

3. 参照の追加より以下の参照を追加します。
Microsoft.Crm.Sdk.Proxy
Microsoft.Xrm.Sdk
Microsoft.Xrm.Client
System.ServiceModel
System.Runtime.Serialization

4. Program.cs ファイルの Main メソッドに、以下のコードを追加します。

// Uri や認証情報は適切なものに変更してください。
CrmConnection connection = CrmConnection.Parse("Url=https://crm2011:5555/CRM; Domain=CONTOSO; Username=administrator; Password=Password1;");
OrganizationService service = new OrganizationService(connection);

// インポートしたいマネージドソリューションを指定します。
string ManagedSolutionLocation = @"C:\Users\Administrator\Desktop\sdk\walkthroughs\ribbon\addacustombuttontoanexistinggroupforallentities.zip";
byte[] fileBytes = File.ReadAllBytes(ManagedSolutionLocation);

// ソリューションのインポートリクエスト
ImportSolutionRequest impSolReq = new ImportSolutionRequest()
{
    CustomizationFile = fileBytes
};
service.Execute(impSolReq);

5. 以下の using ステートメントを追加します。
using System.IO;
using Microsoft.Crm.Sdk.Messages;
using Microsoft.Xrm.Client;
using Microsoft.Xrm.Client.Services;

6. プログラムを実行して、指定したソリューションがインポートされるか
確認します。
image

検討事項

上記サンプルで、いくつか追加の検討事項があります。

アンマネージソリューションをインポートする場合
マネージドソリューションと異なり、アンマネージドソリューションは
インポートするだけではカスタマイズが公開されません。その場合
一番最後に以下のコードを追加すると公開も自動化できます。

service.Execute(new PublishAllXmlRequest());

オンライン環境に接続する場合

CrmConnection の接続文字列は、オンラインに対しても指定できます。
接続文字列の詳細は SDK をご覧ください。

Microsoft Dynamics CRM への簡略化された接続
https://msdn.microsoft.com/ja-jp/library/gg695810.aspx

まとめ

今回はとてもシンプルなサンプルの活用方法をお届けしましたが、SDK を
利用することで、煩雑な反復作業を自動化することが可能です。他にも
自動化したい作業のシナリオなどがあれば、教えてくださいね。

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