我在C#中编写了一个插件,该插件在调用特定视图“我的活动”时运行。如何指定我的插件仅在调用此视图时运行,而不是在“已关闭的活动”,“所有活动”等时都运行?动态CRM - 用于特定视图的C#插件
当我将更新Dynamics或1年或2年后,我正在编写的插件仍会工作吗?
我在C#中编写了一个插件,该插件在调用特定视图“我的活动”时运行。如何指定我的插件仅在调用此视图时运行,而不是在“已关闭的活动”,“所有活动”等时都运行?动态CRM - 用于特定视图的C#插件
当我将更新Dynamics或1年或2年后,我正在编写的插件仍会工作吗?
在插件中,不可能确定用户完全选择了哪个视图。但是,您可以访问视图所基于的查询。
注册您的插件,用于适当实体的同步帖子RetrieveMultiple
消息。 IPluginExecutionContext
对象的Inputparameters集合将包含一个名为“Query”的属性,其中包含原始QueryExpression
。您可以检查此查询(例如,所选的列)并调整Outputparameters集合中查询返回的实体。
几年前,我成功地使用这种方法来提供多语言系统上数据的实时翻译。
只需搭载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
这无法做到的。插件做什么?我很好奇(并且积极这是一个XY的例子) – Alex
我想在列中显示我的活动的相关对象的类型(例如,它是联系人还是社会活动?)。为了做到这一点,我在社会上增加了一个名为“regard_object_type”的领域。我使用此字段在我的视图中创建一个列,然后使用我的插件填写该列。 – Gabriel
这应该是更新填充该字段的correobjectid属性的插件。像这样构建的动态域使得CRM慢得足以使其不可用。 – Alex