2017-03-09 24 views
2

我在C#中编写了一个插件,该插件在调用特定视图“我的活动”时运行。如何指定我的插件仅在调用此视图时运行,而不是在“已关闭的活动”,“所有活动”等时都运行?动态CRM - 用于特定视图的C#插件

当我将更新Dynamics或1年或2年后,我正在编写的插件仍会工作吗?

+1

这无法做到的。插件做什么?我很好奇(并且积极这是一个XY的例子) – Alex

+0

我想在列中显示我的活动的相关对象的类型(例如,它是联系人还是社会活动?)。为了做到这一点,我在社会上增加了一个名为“regard_object_type”的领域。我使用此字段在我的视图中创建一个列,然后使用我的插件填写该列。 – Gabriel

+0

这应该是更新填充该字段的correobjectid属性的插件。像这样构建的动态域使得CRM慢得足以使其不可用。 – Alex

回答

2

在插件中,不可能确定用户完全选择了哪个视图。但是,您可以访问视图所基于的查询。

注册您的插件,用于适当实体的同步帖子RetrieveMultiple消息。 IPluginExecutionContext对象的Inputparameters集合将包含一个名为“Query”的属性,其中包含原始QueryExpression。您可以检查此查询(例如,所选的列)并调整Outputparameters集合中查询返回的实体。

几年前,我成功地使用这种方法来提供多语言系统上数据的实时翻译。

0

只需搭载Henk的答案,您不希望限制插件仅在特定视图被请求时运行。如果此列在数据库中始终为“空”,那么您确实只是想要检查已提交的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