MacユーザがDynamicsプラグインを作成する[プラグイン作成編]

「Macユーザだってプラグイン開発がしたい!」第2弾。
Visual Studioのインストールが完了し、今回はいよいよDynamicsのプラグインを作成していきます。

スポンサーリンク

ソリューションを新規で作成してプラグイン作成

Visual Studio for Macのインストールが完了したので、実際に動かしてみます。

まずは、Visual Studio for Macを起動。

ここは普通にソリューションをイチから作成したいので、新規を選択。
Visual Studio for Mac起動

プロジェクト用テンプレートには「クラスライブラリ」を選択。
プロジェクトテンプレート選択にはクラスライブラリを選択

プロジェクト名とソリューション名を入力。
名前は特に意味はないけと、こーいう名前にしました。
別にソリューションとプロジェクト名は同じにしてもOKです。
ソリューション名とプロジェクト名の入力

このように、ソリューションが作成されました。

パッケージの追加

Dynamicsのプラグインには、以下のDLLを要します。

  • Microsoft.Xrm.Sdk.Proxy.dll
  • Microsoft.Xrm.Sdk.dll

これらのDLLを取り込むために、パッケージの追加を行います。

ソリューション作成後、パッケージの所をcontrolクリックして、「NuGetパッケージの追加」を選択。
初期作成ソリューションからパッケージの部分のNugetパッケージを追加

上記DLLが含まれているのが、「MicrosoftDynamicsCrm2013Plugin」というパッケージになります。
そのため、パッケージの追加で、「MicrosoftDynamicsCrm2013Plugin」を検索して、選択。
パッケージを追加しましょう。
パケージにDynamicsプラグインのDLLを指定する

ちょっと、2013と名前がついているのが気になっているのですが、他に適切なパッケージがありましたら教えてください。

プロジェクトのパッケージのところがこのようになっていればOK。
これでプラグインの実装ができるはずです。
パッケージ追加後の表示

試しに、クラスにIPluginインタフェースを含ませてみます(ついでにクラス名も変更)。
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("取引先企業番号未入力エラー");
                }
            }
        }
    }
}

IPluginインタフェースを実装しコード記入

アセンブリの署名

コードが出来上がったら、あとはビルドしたいところですが、プラグインにはアセンブリの署名が必要になるので、署名をします。
プロジェクトを選択してcontrolクリックして、「オプション」を選択。
プロジェクトからオプションを選択

ここ、ちょっとハマりました。
署名にはsnkファイルが必要なので、snkファイルを作成する必要があります。
Visual Studio 2017とかだと、署名の欄に新規作成があるのですが、Visual Studio for Macではありません。

なので、ターミナルから作成します。
ターミナルを開いて以下コマンドを打ち込みます。
ターミナルからsnkファイルを作成

sn -k {ファイル名.snk}

snkファイルの場所はどこでもいいと思いますが、僕はソリューションフォルダに移動してこのコマンドを打ち込みました。

あとは、作成したsnkファイルを、アセンブリ署名の厳密な名前ファイルに読み込ませてあげればOKです。
アセンブリ署名の厳密な名前ファイル

最後にビルドすれば、
ソリューションのビルド完了

DLLが作成されます。
ビルド完了後にDLLが作成される

Dynamics
スポンサーリンク

コメント