[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」です。



