【Dataverse】Visual StudioによるDataverse Plugin(Pre Validation)

accountテーブルのtelephone1の入力チェックを作成する場合の手順は以下の通りです。
入力チェックは正規表現で「^[0-9]+$」とします。

クラスファイルはプロジェクト内に2つあっても問題ありません。
1つのAssembly(dllファイル)に2つのPluginが出来上がる形になります。
クラスファイルの中身以外は以前の手順踏襲となります。

  • クラスファイルの編集
    クラス名を変更し、開発を行います。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.ServiceModel;
    using Microsoft.Xrm.Sdk;
    using System.Text.RegularExpressions;
    
    namespace MyDataversePluginVS462
    {
        public class FollowupPlugin2 : IPlugin
        {
            public void Execute(IServiceProvider serviceProvider)
            {
                // プラグイン実行コンテキストの取得
                IPluginExecutionContext context = serviceProvider.GetService(typeof(IPluginExecutionContext)) as IPluginExecutionContext;
                if (context == null)
                {
                    throw new InvalidPluginExecutionException("プラグイン実行コンテキストが取得できませんでした。");
                }
    
                // 組織サービスファクトリの取得
                IOrganizationServiceFactory serviceFactory = serviceProvider.GetService(typeof(IOrganizationServiceFactory)) as IOrganizationServiceFactory;
                if (serviceFactory == null)
                {
                    throw new InvalidOperationException("IOrganizationServiceFactory が取得できませんでした。");
                }
    
                // トレーシングサービスの取得
                ITracingService tracingService = serviceProvider.GetService(typeof(ITracingService)) as ITracingService;
                if (tracingService == null)
                {
                    throw new InvalidPluginExecutionException("トレーシングサービスが取得できませんでした。");
                }
    
                // ターゲットエンティティがAccountであるか
                if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity account && account.LogicalName == "account")
                {
                    tracingService.Trace("PhoneCheckプラグインが実行されました。");
    
                    // ターゲットエンティティのCreateかどうか
                    if (context.MessageName == "Create")
                    {
                        // 電話番号フィールドが存在するか
                        if (account.Attributes.Contains("telephone1"))
                        {
                            string phoneNumber = account.Attributes["telephone1"] as string;
                            if (!string.IsNullOrEmpty(phoneNumber) && Regex.IsMatch(phoneNumber, "^[0-9]+$"))
                            {
                                tracingService.Trace("電話番号の書式は問題ありません。");
                            }
                            else
                            {
                                throw new InvalidPluginExecutionException("新規登録時は電話番号の書式は数値のみで入力してください。");
                            }
                        }
                        else
                        {
                            throw new InvalidPluginExecutionException("電話番号(telephone1)フィールドが存在しません。");
                        }
                    }
                    else
                    {
                        throw new InvalidPluginExecutionException("プラグインが実行できませんでした。(メッセージ違い)");
                    }
                }
                else
                {
                    throw new InvalidPluginExecutionException("プラグインが実行できませんでした。(テーブル違い)");
                }
    
                // 処理全体をtry-catchで囲って、catchでInvalidPluginExecutionExceptionするのもあり。
            }
        }
    }
    

コメントを残す

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