[Dynamics 365]簡単なプラグインサンプル PostOperation
2017/5/24 TTN
今回は「簡単なプラグインサンプル PostOperation」という事で
営業案件で、シンプルに登録後、活動エンティティの電子メールエンティティ作成を自動で行う
プラグインの作成手順を記載します。
[Dynamics 365] プラグインの概要にも記載がありましたが、
PostOperationのプラグインは、実際にエンティティにデータが登録された後にイベント発生します。
PostOperationには、特に別エンティティデータの自動設定等を記載します。
1 プラグインの作成
1.1 クラスの追加
[Dynamics 365]簡単なプラグインサンプル PreValidationで作成した「Myplugin」プロジェクトを
VisualStudioで開きます。
ソリューションエクスプローラーのOpportunityフォルダを右クリック、
「新しい項目の追加」または「クラス」を選択して新規クラスファイルを作成します。
クラスファイル名はOpportunityPostOperationという名前で作成します。
新規プロジェクトから作成する場合は
[Dynamics 365]簡単なプラグインサンプル PreValidationの「1.1 ソリューションの作成」をご参照ください。
1.2 プラグインの実装
追加したクラスファイルを開き、下記のコードを書き込みます。
営業案件登録後に、登録データを基にした電子メールレコードを自動生成します。
[code]using System; using System.Text; using Microsoft.Xrm.Sdk; namespace Myplugin { /// <summary> /// 営業案件PostOperation /// </summary> public class OpportunityPostOperation : IPlugin { /// <summary> /// プラグイン実行時ハンドラー(IPluginの抽象メソッド) /// </summary> public void Execute(IServiceProvider serviceProvider) { // 入力パラメタ情報を取得します。 IPluginExecutionContext context = serviceProvider.GetService(typeof(IPluginExecutionContext)) as IPluginExecutionContext; // IOrganizationService作成用のインスタンスを取得します。 IOrganizationServiceFactory serviceFactory = serviceProvider.GetService(typeof(IOrganizationServiceFactory)) as IOrganizationServiceFactory; // IOrganizationServiceFactoryから // 組織インスタンスを取得します。 IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId); // 営業案件登録後、社内向け電子メールのレコードを自動生成する。 CreateMail(context, service); } /// <summary> /// 社内向け電子メールレコードの自動生成 /// </summary> /// <param name="context">入力パラメタ</param> /// <param name="service">組織インスタンス</param> private void CreateMail(IPluginExecutionContext context, IOrganizationService service) { // エンティティ情報がない場合は処理を抜ける if (!context.InputParameters.Contains("Target") || !(context.InputParameters["Target"] is Entity)) { return; } try { // 入力パラメタからEntityを取得 Entity oppoturnity = context.InputParameters["Target"] as Entity; // 電子メールエンティティのインスタンスを生成 Entity email = new Entity("email"); // メール本文用StringBuilderを生成 StringBuilder description = new StringBuilder(); // 1.メールエンティティのインスタンス作成。 // インプット情報から電子メールのフィールドの値を設定 // (1)件名 if (oppoturnity.Attributes.Contains("name")) { email["subject"] = "案件情報:" + oppoturnity.Attributes["name"].ToString(); } // (2)本文 // ・営業案件名 if (oppoturnity.Attributes.Contains("name")) { description.Append("■案件名<BR> "); description.Append(oppoturnity.Attributes["name"].ToString()); description.Append("<BR><BR><BR>"); } // ・取引先企業 if (oppoturnity.Attributes.Contains("parentaccountid")) { Guid id = new Guid( ((EntityReference)(oppoturnity.Attributes["parentaccountid"])).Id.ToString()); Entity parentaccount = service.Retrieve ("account", id, new Microsoft.Xrm.Sdk.Query.ColumnSet("name")); description.Append("■取引先企業<BR> "); description.Append(parentaccount.Attributes["name"].ToString()); description.Append("<BR><BR>"); } // ・確率 if (oppoturnity.Attributes.Contains("closeprobability")) { description.Append("■確率<BR> "); description.Append((oppoturnity.Attributes["closeprobability"]).ToString()); description.Append("%<BR><BR>"); } // ・現在の状況 if (oppoturnity.Attributes.Contains("currentsituation")) { description.Append("■現在の状況<BR> "); description.Append(oppoturnity.Attributes["currentsituation"].ToString()); description.Append("<BR><BR>"); } // ・顧客ニーズ if (oppoturnity.Attributes.Contains("customerneed")) { description.Append("■顧客ニーズ<BR> "); description.Append(oppoturnity.Attributes["customerneed"].ToString()); description.Append("<BR><BR>"); } email["description"] = description.ToString(); // 2.作成したインスタンスを // メールエンティティの新規レコードとして登録 service.Create(email); } //例外発生時 catch (Exception ex) { // プラグイン専用の例外スロークラスに値を渡す throw new InvalidPluginExecutionException ("An error occurred in the FollowupPlugin plug-in.", ex); } } } } [/code]
1.3.署名の設定
署名は1プロジェクトに1つで問題ありませんので、
PreValidationで作成した署名ファイルが既にあれば再設定は必要はありません。
プロジェクトにMypluginKey.pfxが無い方は、
[Dynamics 365]簡単なプラグインサンプル PreValidationの「1.3.署名の設定」をご参照ください。
ビルド時にキーファイルのエラーとなる場合は、
ソリューションエクスプローラーのプロジェクト右クリック、「プロパティ」を選択します。
左の署名タブをクリックし、「パスワードの変更」から
前回設定したパスワードを設定し直してください。
2.プラグインのデプロイ
営業案件新規登録時に、プラグインが実行されるように、
PluginRegistrationToolを使用して、プラグインを登録します。
[Dynamics 365]プラグインの登録を
参考に登録を進めてください。
3.動作確認
営業案件の新規ボタンを押下します。
下記の通り各フィールドの値を設定し、上書き保存を押下します。
トピック : TEST案件 取引先企業 : テスト用データ 確率 : 50 現在の状況 : 要件伺い段階 顧客ニーズ : 顧客管理システム構築
作成した営業案件を基に、活動エンティティの電子メールデータが自動作成されます。
(↑クリックすると拡大表示されます)
以上がDynamics365向けの簡単なPostOperationプラグインの作成手順になります。