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

 

Dynamics CRM

生花店向け販売管理ソフトウェア FlowerA

生花店専用ソフトの最安値に挑戦しました!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です