首页 文章

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

提问于
浏览
1

是否存在可以在运行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

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

    报告不会触发插件 . SQL报告完全绕过CRM,而Fetch报告也绕过了插件管道

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

  • 1

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

    粗糙的过程是这样的:

    • 在适用的实体中,创建功能区按钮以通过Javascript启动报告 . (这篇文章给出了一个方法:Trigger a report from a ribbon button

    • 作为运行报告的Javascript函数的一部分,在报告运行代码之前更新相应记录中的字段(例如"new_ReportRunOn")(标准REST更新操作在此处可用) . 这里的想法只是运行报告将始终导致"new_ReportRunOn"字段首先更新 .

    • 通过仅应用过滤器"new_ReportRunOn"字段,让您的插件监听此字段的更改 . (或者,您可以让您的逻辑在Javascript中运行[作为第2步],而不是更新字段只是为了触发插件 . )

    但这并非没有缺点:

    • 您需要"hide" CRM报告部分中的报告,因此它基本上只能通过实体表单访问 . 如果用户选择在报告部分中浏览"All Reports",它仍会在“报告”部分中显示 . 如果"savy"用户以这种方式启动报告,那么它将绕过激活插件的Javascript代码 .

    • 如果报告可以跨多个记录运行(例如,用户从实体网格视图中选择适用的记录),则需要进行其他考虑/编码 . 可以处理这种情况,但根据您的问题,它似乎不是用例 .

    在2013年的安装中,我已经有类似的工作了一段时间,它实际上运行得很好 . 这不是理想的,但完成工作 .

相关问题