动态CRM FetchXML报告事件插件启动



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

retrievmultiple和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.
        }
    }
}

我有同样的问题,解决方案如下:

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

更多信息请访问:https://crmbusiness.wordpress.com/2014/11/25/fetchxml-reports-do-not-trigger-retrievemultiple-plugins-in-crm-2011/

我也有类似的需求,在报告运行时执行操作,我能找到的最好的[支持的]方式是通过Javascript触发报告运行。

大致流程如下:

  1. 在适用的实体中,创建ribbon按钮以通过Javascript启动报告。(这篇文章给出了如何:从ribbon按钮触发报告)
  2. 作为运行报告的Javascript函数的一部分,更新一个字段(例如:"new_ReportRunOn"),在报告运行代码之前在各自的记录中(这里可以使用标准的REST更新操作)。这里的想法是简单地运行报告将总是导致"new_ReportRunOn"字段首先更新。
  3. 让你的插件通过只对"new_ReportRunOn"字段应用过滤器来监听该字段的变化。(或者,你可以让你的逻辑在Javascript中运行[作为第2步],而不是更新字段来触发插件。)

这也不是没有缺点:

  • 您需要在CRM Reports部分中"隐藏"报告,因此它基本上只能通过实体表单访问。如果用户选择在报告部分中浏览"所有报告",它仍然可以在报告部分中看到。如果一个"精明"的用户以这种方式启动报告,那么它将绕过触发插件的Javascript代码。
  • 如果报告可以跨多个记录运行(例如,用户从实体网格视图中选择适用的记录),则需要做额外的考虑/编码。处理这种情况是可能的,但根据你的问题,这似乎不是用例。

我在2013年的安装中有过类似的过程,它实际上工作得很好。这并不理想,但可以完成工作。

最新更新