2016-10-14 16 views
1

フォーム検証を適用してnotes (with file upload)フィールドを必須にしようとしました。NotesエンティティフィールドでREALIRED FIELD検証を適用する方法は?

私が使用しようとしたオプションはclient side javascriptingです。

Event Handlers tab

Notesエンティティが管理項目

Notes entity is not listed amongst the Control items

ひいては間でリストされていない。これまでのところ、とても良い...

問題は、イベントハンドラ]タブの下にあることです明らかに、Notesエンティティのクライアントサイドイベントはありません。

Notesエンティティフィールドの必須フィールド検証の適用方法?

答えて

2

にメモを関連付ける必要がありますあなたがしたい妥当性検査は親レコードでは実行できません。ノートの形で検証する必要がありますが、ノートエンティティは完全にカスタマイズ可能ではなく、ソーシャルペインとその特殊性も念頭に置いておく必要があります。

これは、作成中のメモに必須フィールドが完了しているかどうかを確認するために、ノート(作成前の検証段階)の作成イベントでプラグインを作成するための最良の方法だと思います。

クイック例(私はそれをテストしていません):

public class ValidateNote : IPlugin 
{ 
    public void Execute(IServiceProvider serviceProvider) 
    { 
     IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext)); 
     IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory)); 
     IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId); 

     if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity) { 

      Entity note = (Entity)context.InputParameters["Target"]; 

      // you can also use "subject" instead of "description" 
      if (string.IsNullOrEmpty(note.GetAttributeValue<string>("description")) || string.IsNullOrEmpty(note.GetAttributeValue<string>("filename"))) 
      { 
       throw new InvalidPluginExecutionException("Please add an attachment and description"); 
      } 

     } 

    } 
} 
+0

私はプラグインの 'Create'メッセージを提案しましたが、2つの有効なIDなしでエンティティを関連付けることはできないので、プラグインをポスト操作として実行しない限りメモを付けずにレコードを作成することはできませんとにかくしたがって、プラグインが 'Pre-Validation'または' Pre-Operation'メッセージとして 'Update'に対して実行された場合、そのエンティティインスタンスに対して1つ以上の注釈が存在しない限り、更新をブロックすることができます。私たちのアプローチの違いは、あなたがすべてのノートのために実行され、私のものがノート要件を持つエンティティに対してのみ実行されることです。 –

+0

実際には、ノートが他のレコードと関連しているかどうかは関係ありません。次のようにします。「ノートには常にテキストと添付ファイルが必要です。だからこそ私はこのプラグインを作成し、必要なフィールドがない場合はノートの作成を妨げると思います。 –

1

ノーツの関係は1:Nの関係です。デフォルトでは、最低限の0音符を関連付けることができます。

JavaScriptの検証を有効にするには、有効な検索フィールドが必要です。メモのフィールドを作成できないので、プラグインを使用してこの検証を実施することができます。

プラグイン・ロジック:例外がスローされると

 var pluginContext = localContext.PluginExecutionContext; 
     if (!pluginContext.InputParameters.Contains("Target") || 
      !(pluginContext.InputParameters["Target"] is Entity)) return; 

     var target = pluginContext["Target"] as Entity; 

     var annotationQuery = new QueryExpression 
     { 
      EntityName = "annotation", 
      ColumnSet = new ColumnSet(true), 
      Criteria = 
      { 
       Conditions = 
       { 
        new ConditionExpression("objectid", ConditionOperator.Equal, target.Id) 
       } 
      } 
     }; 

     var response = localContext.OrganizationService.RetrieveMultiple(annotationQuery); 
     if (!response.Entities.Any()) 
      throw new InvalidPluginExecutionException("No Notes were found for the entity"); 
     //Further checks against content... 

プラグインのメッセージがPre-ValidationPre-Operationであれば、これは動作を中断し、ユーザがエンティティ

+0

はそれがノートエンティティが編集可能にする必要があることを要求していますか?はいの場合は、[編集可能](https://msdn.microsoft.com/en-us/library/gg334739.aspx#customizable_entity_properies)ではないようです。そのルックアップフィールドはどのようにして行うことができますか? – xameeramir

+1

ダイナミクスでノートルックアップフィールドを作成することはできません。エンティティレコードまたは更新プログラムの作成時にこれを強制しようとしていますか? –

+0

必要な最終結果 - ノートには常にテキストと添付ファイルが必要です。 – xameeramir

関連する問題