「Macユーザだってプラグイン開発がしたい!」第2弾。
Visual Studioのインストールが完了し、今回はいよいよDynamicsのプラグインを作成していきます。
ソリューションを新規で作成してプラグイン作成
Visual Studio for Macのインストールが完了したので、実際に動かしてみます。
まずは、Visual Studio for Macを起動。
ここは普通にソリューションをイチから作成したいので、新規を選択。
プロジェクト用テンプレートには「クラスライブラリ」を選択。
プロジェクト名とソリューション名を入力。
名前は特に意味はないけと、こーいう名前にしました。
別にソリューションとプロジェクト名は同じにしてもOKです。
このように、ソリューションが作成されました。
パッケージの追加
Dynamicsのプラグインには、以下のDLLを要します。
- Microsoft.Xrm.Sdk.Proxy.dll
- Microsoft.Xrm.Sdk.dll
これらのDLLを取り込むために、パッケージの追加を行います。
ソリューション作成後、パッケージの所をcontrolクリックして、「NuGetパッケージの追加」を選択。
上記DLLが含まれているのが、「MicrosoftDynamicsCrm2013Plugin」というパッケージになります。
そのため、パッケージの追加で、「MicrosoftDynamicsCrm2013Plugin」を検索して、選択。
パッケージを追加しましょう。
ちょっと、2013と名前がついているのが気になっているのですが、他に適切なパッケージがありましたら教えてください。
プロジェクトのパッケージのところがこのようになっていればOK。
これでプラグインの実装ができるはずです。
試しに、クラスにIPluginインタフェースを含ませてみます(ついでにクラス名も変更)。
この通り、パッケージ追加で取り込んだDLLが支えていることが分かります。
※この画面はエラーが出ていますが、Executeメソッドが実装されていないエラーのため、IPluginインタフェース自体は読み込まれています
あとは、従来通りプラグインを実装します。
今回、Accountに対し、作成時に取引先番号(accountnumber)が未入力の時にエラーを出すという簡単なコードを作成。
AccountNameCheck.cs
using System; using Microsoft.Xrm.Sdk; namespace AccountCheck { public class AccountNameCheck : IPlugin { // コンストラクタ public AccountNameCheck() { } public void Execute(IServiceProvider serviceProvider) { // コンテキストを取得 IPluginExecutionContext context = serviceProvider.GetService(typeof(IPluginExecutionContext)) as IPluginExecutionContext; // トレース情報を取得 ITracingService trace = serviceProvider.GetService(typeof(ITracingService)) as ITracingService; if (context.MessageName.Equals("Create", StringComparison.InvariantCultureIgnoreCase)) { // ターゲットを取得 Entity entity = context.InputParameters["Target"] as Entity; // フィールドの取引先番号を取得 string accountnumber = entity.GetAttributeValue("accountnumber"); if (string.IsNullOrEmpty(accountnumber)) { trace.Trace("取引先企業番号未入力"); throw new InvalidPluginExecutionException("取引先企業番号未入力エラー"); } } } } }
アセンブリの署名
コードが出来上がったら、あとはビルドしたいところですが、プラグインにはアセンブリの署名が必要になるので、署名をします。
プロジェクトを選択してcontrolクリックして、「オプション」を選択。
ここ、ちょっとハマりました。
署名にはsnkファイルが必要なので、snkファイルを作成する必要があります。
Visual Studio 2017とかだと、署名の欄に新規作成があるのですが、Visual Studio for Macではありません。
なので、ターミナルから作成します。
ターミナルを開いて以下コマンドを打ち込みます。
sn -k {ファイル名.snk}
snkファイルの場所はどこでもいいと思いますが、僕はソリューションフォルダに移動してこのコマンドを打ち込みました。
あとは、作成したsnkファイルを、アセンブリ署名の厳密な名前ファイルに読み込ませてあげればOKです。
最後にビルドすれば、
DLLが作成されます。
コメント