插件启动时的Dynamics CRM FetchXML报告事件

时间:2014-07-21 13:20:56

标签: dynamics-crm-2011 dynamics-crm dynamics-crm-2013

运行FetchXML(甚至是SQL)报告时是否有可以注册插件的事件?

RetrieveMultiple和Retrieve不会被解雇!

public void Execute(IServiceProvider serviceProvider)
{
    IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
    // The FetchXML report does not fire the plugin on RetrieveMultiple
    if (context.InputParameters["Query"] is FetchExpression)
    {
        IOrganizationServiceFactory factory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
        IOrganizationService service = factory.CreateOrganizationService(context.UserId);
        using (Context linq = new Context(service))
        {
            // Do the work.
        }
    }
}

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,解决方案如下:

  

报告不会触发插件。 SQL报告完全绕过CRM,并且   获取报告也绕过了插件管道

有关此内容的更多信息:https://crmbusiness.wordpress.com/2014/11/25/fetchxml-reports-do-not-trigger-retrievemultiple-plugins-in-crm-2011/

答案 1 :(得分:0)

我有类似的需求,在运行报告时执行操作,并且通过触发报告通过Javascript运行,我可以找到最好的[支持]方式来实现此目的。

粗糙的过程就是:

  1. 在适用的实体中,创建功能区按钮以通过Javascript启动报告。 (这篇文章给出了一个方法:Trigger a report from a ribbon button
  2. 作为运行报告的Javascript函数的一部分,在报告运行代码之前更新相应记录中的字段(例如" new_ReportRunOn")(标准REST更新操作在此处可用)。这里的想法只是运行报告将始终导致" new_ReportRunOn"字段要先更新。
  3. 让您的插件通过仅应用过滤器" new_ReportRunOn"来监听此字段的更改。领域。 (或者,您可以让您的逻辑在Javascript中运行[作为第2步],而不是更新字段只是为了触发插件。)
  4. 但这并非没有缺点:

    • 你需要"隐藏" CRM报告部分中的报告因此基本上只能通过实体表单访问。如果用户选择浏览"所有报告"它仍会在报告部分中显示。在报告部分。如果一个" savy"用户以这种方式启动报告,然后它将绕过启动插件的Javascript代码。
    • 如果报告可以跨多个记录运行(例如,用户从实体网格视图中选择适用的记录),则需要进行其他考虑/编码。可以处理这种情况,但根据您的问题,它不会出现这是用例。

    我们在2013年的安装上已经有一段时间与此相似,但实际上效果非常好。这不是理想的,但可以完成工作。