2017-03-09 3 views
2

たとえば、特定のビュー "My activities"が呼び出されたときに実行されるプラグインをC#で作成しました。このビューが呼び出されたときにのみプラグインを指定するにはどうしたらいいですか?「クローズドアクティビティ」、「すべてのアクティビティ」などはありませんか?ダイナミックCRM - 特定のビュー用のC#プラグイン

ダイナミクスが更新されるか、1年または2年後に私が書いているプラ​​グインはまだ動作しますか?

+1

行うことはできません。プラグインは何をしますか?私は好奇心が強いです(そして、これはポジティブですが、これはXYのケースです) – Alex

+0

私は、私の活動の対象のタイプ(例えば、コンタクトや社会の活動ですか?)を列に表示したいと思います。私はそれをするために、 "about_object_type"という社会の分野を追加しました。私はこのフィールドを使用して私のビューに列を作成し、次に私のプラグインでその列を埋めたいと思っています。 – Gabriel

+0

これは、フィールドに充てんするinvolobjectid属性の更新時のプラグインでなければなりません。このように構築された動的フィールドは、CRMを使用できないほど遅くします。 – Alex

答えて

2

プラグイン内では、ユーザーがどのビューを正確に選択したかを判別することはできません。ただし、ビューの基になっているクエリにアクセスすることはできます。

適切なエンティティの同期ポストRetrieveMultipleメッセージのプラグインを登録します。 IPluginExecutionContextオブジェクトのInputparametersコレクションには、元のQueryExpressionを保持する「クエリ」という名前のプロパティが含まれます。このクエリ(たとえば、選択されている列)を調べて、Outputparametersコレクション内のクエリによって返されたエンティティを調整することができます。

何年も前、このアプローチを使用して、多言語システム上のデータのリアルタイム翻訳を提供することに成功しました。

0

ちょうどヘンクの答えを取り除くだけで、特定のビューがとにかく要求されたときにのみプラグインが実行されるように制限したくありません。この列がデータベース内で常に「空」の場合、実際に送信されたQueryExpressionのColumnSetを検査したい場合は、の計算列が要求された時間を操作してください。& クエリからColumnSetを得れば:

Query q = context.InputParameters.TryGetValue("Query") as QueryExpression; // could also be QueryByAttribute or FetchExpression, 
if (q != null) 
{ 
    ColumnSet cols = q.ColumnSet; 
    if (cols.AllColumns == true || cols.Columns.Contains("regarding_object_type")) 
    {  
     executionContext.OutputParameters["BusinessEntityCollection"] = GetResultValuesInWhateverWayYouAreGoingTo(); 
    } 
} 

https://msdn.microsoft.com/en-us/library/microsoft.xrm.sdk.query.queryexpression.columnset.aspx

関連する問題