[Dynamics 365]簡単なプラグインサンプル PreValidation
2017/5/15 OH
今回は「簡単なプラグインサンプル PreValidation」ということで、
営業案件でシンプルに、入力チェックエラーを返却する
プラグインを作成する手順を記載します。
[Dynamics 365] プラグインの概要にも記載がありましたが、
PreValidationは、実際にエンティティにデータが登録される前の一番最初にイベント発生します。
PreValidationに必須チェック等の入力チェック処理を記載します。
1.プラグインの作成
1.1.ソリューションの作成
Visual Studioのファイル→新規作成→プロジェクトをクリックし、
新規C#クラスライブラリプロジェクトを作成します。
今回は Myplugin という名前で作成しました。
(↑クリックすると拡大表示されます)
次に、DynamicsCRMの拡張用のDLLをプロジェクトに追加します。
利用するDynamicsのバージョンに併せてSDK(ソフトウェア開発キット)をダウンロードしておきます。
今回は、Dynamics365 SDKをダウンロードしました。
Dynamics 365 SDKダウンロード
右のソリューションエクスプローラーの「参照」を右クリックし、「参照の追加」をクリックします。
(↑クリックすると拡大表示されます)
参照マネージャーの参照ボタンを押下し、ダウンロードしたSDKのBinフォルダから
・Microsoft.Crm.Sdk.Proxy.dll
・Microsoft.Xrm.Sdk.dll
を追加します。
(↑クリックすると拡大表示されます)
また、参照マネージャーのアセンブリから
・System.Runtime.Serialization
を追加します。
(↑クリックすると拡大表示されます)
1.2.プラグインの実装
Class1.csというクラスファイルがデフォルト自動生成されていますが、今回は削除し、
ソリューションエクスプローラーのプロジェクト右クリック、「新しい項目の追加」または「クラス」を選択し、
新規クラスファイルを作成します。
対象エンティティ名でフォルダを作成しておき、その下にファイルを作成しておくと後々良いと思います。
クラスファイル名は「OpportunityPreValidation.cs」という名前で作成します。
(↑クリックすると拡大表示されます)
プラグインを以下のように実装しました。
今回の拡張内容は、営業案件のトピックフィールドに「AAA」が設定された場合、
エラーメッセージを出力し、保存できないようにします。
[code]using System; using Microsoft.Xrm.Sdk; namespace MyPlugin { /// <summary> /// 営業案件PreValidation /// </summary> public class OpportunityPreValidation : IPlugin { /// <summary> /// プラグイン実行時ハンドラー(IPluginの抽象メソッド) /// </summary> /// <param name="serviceProvider">サービスプロバイダ</param> public void Execute(IServiceProvider serviceProvider) { // IPluginExecutionContext を取得 // プラグインの実行コンテキスト情報を取得します。 IPluginExecutionContext context = serviceProvider.GetService(typeof(IPluginExecutionContext)) as IPluginExecutionContext; // 営業案件登録時にトピックフィールドが空欄でない、かつ、 // トピックフィールドに「AAA」が入力された場合、エラーを出力する CheckTopicname(context); } /// <summary> /// トピックの入力値チェック /// </summary> /// <param name="context">入力パラメタ</param> private void CheckTopicname(IPluginExecutionContext context) { try { // エンティティ情報がない場合は処理を抜ける if (!context.InputParameters.Contains("Target") || !(context.InputParameters["Target"] is Entity)) { return; } // エンティティを取得 Entity inputEntity = (Entity)context.InputParameters["Target"]; // トピックフィールドが空欄でない、かつ、トピックフィールドに「AAA」が入力された場合、エラーを出力 if (inputEntity.Attributes.Contains("name") && inputEntity.Attributes["name"].ToString() == "AAA") { throw new Exception("入力された値は不正です。値 : " + inputEntity.Attributes["name"].ToString()); } } catch (Exception ex) { // プラグイン専用の例外スロークラスに値を渡す throw new InvalidPluginExecutionException("Plugin ERROR : " + ex.Message.ToString(), ex); } } } } [/code]
1.3.署名の設定
ソリューションエクスプローラーのプロジェクト右クリック、「プロパティ」を選択します。
左の署名タブをクリックし、「アセンブリに署名する」にチェックを入れます。
「厳密な名前のキーファイルを選択してください」のリストから”<新規作成…>”を選択し、
キーファイル名とパスワードを入力します。
(↑クリックすると拡大表示されます)
OKボタンをクリックし、ソリューションをビルドします。
ビルドエラーが発生する場合は、プロジェクトの「プロパティ」、
左のアプリケーションタブをクリックし、対象フレームワークを変更してください。
Dynamics365 SDK dllは、.NET Framework 4.5.2以上にする必要があります。
2.プラグインのデプロイ
営業案件新規登録時に、プラグインが実行されるように、
PluginRegistrationToolを使用して、プラグインを登録します。
[Dynamics 365]プラグインの登録を
参考に登録を進めてください。
3.動作確認
営業案件の新規ボタンを押下します。
下図のようにトピックフィールドに「AAA」と入力し、上書き保存を押下します。
(↑クリックすると拡大表示されます)
上書き保存ボタンを押下後、エラーメッセージが出力され、
保存されていないことを確認します。
OKボタンをクリックをクリックします。
(↑クリックすると拡大表示されます)
営業案件が登録されていないことを確認します。
(↑クリックすると拡大表示されます)
以上が「簡単なプラグインサンプル PreValidation」です。