【问题标题】:Dynamics CRM - C# Plug-in for specific viewDynamics CRM - 用于特定视图的 C# 插件
【发布时间】:2017-03-09 16:15:21
【问题描述】:

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

当 Dynamics 更新或 1 年或 2 年后,我正在编写的插件是否仍然有效?

【问题讨论】:

  • 那做不到。插件有什么作用?我很好奇(肯定这是 XY 的情况)
  • 我想在列中显示我的活动的相关对象的类型(例如,它是关于联系人的活动还是关于社团的活动?)。为了做到这一点,我在社会中添加了一个名为“regarding_object_type”的字段。我使用此字段在我的视图中创建一个列,然后使用我的插件填充该列。
  • 这应该是一个关于填充该字段的有关objectid属性的更新插件。像这样构建的动态字段会使 CRM 速度慢到无法使用。

标签: c# plugins dynamics-crm microsoft-dynamics


【解决方案1】:

在插件中无法确定用户究竟选择了哪个视图。但是,您可以访问视图所基于的查询。

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

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

【讨论】:

    【解决方案2】:

    只是捎带 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多