Plugins 在CRM 2015中区分页面加载和导出到Excel

Plugins 在CRM 2015中区分页面加载和导出到Excel,plugins,dynamics-crm,Plugins,Dynamics Crm,我正在写一个插件,当用户按下“导出到Excel”按钮时会被触发。我现在正在连接到“RetrieveMultiple”消息。但是,加载页面时也会触发相同的消息。我是否可以区分页面加载消息和“导出到Excel”消息 不幸的是,SDK中没有一条导出到Excel的特殊消息,您可以根据它注册插件。我可以想出两个选择: 覆盖应用程序功能区中的“导出到Excel”按钮以调用自定义JavaScript函数。您的函数将执行您想执行的任何操作,然后有选择地将请求传递给正常的导出到Excel函数 找到一些方法来区分R

我正在写一个插件,当用户按下“导出到Excel”按钮时会被触发。我现在正在连接到“RetrieveMultiple”消息。但是,加载页面时也会触发相同的消息。我是否可以区分页面加载消息和“导出到Excel”消息

不幸的是,SDK中没有一条导出到Excel的特殊消息,您可以根据它注册插件。我可以想出两个选择:

  • 覆盖应用程序功能区中的“导出到Excel”按钮以调用自定义JavaScript函数。您的函数将执行您想执行的任何操作,然后有选择地将请求传递给正常的导出到Excel函数
  • 找到一些方法来区分RetrieveMultiple消息(正如您正在尝试的那样)。
    • 下载并安装到您的组织中,针对实体的RetrieveMultiple注册它,打开它,然后触发导出到excel。这将使查看RetrieveMultiple请求和检查其所有属性变得非常容易。四处看看,看看是否有什么东西突然向你袭来,让你能够将其作为excel的导出加以区分。我不怀疑你会找到什么,但绝对值得一试
    • 顺便说一句,我有点惊讶CRM没有像导出报表和图表那样绕过插件执行管道导出到excel

  • 不幸的是,SDK中没有一条导出到Excel的特殊消息,您可以根据它注册插件。我可以想出两个选择:

  • 覆盖应用程序功能区中的“导出到Excel”按钮以调用自定义JavaScript函数。您的函数将执行您想执行的任何操作,然后有选择地将请求传递给正常的导出到Excel函数
  • 找到一些方法来区分RetrieveMultiple消息(正如您正在尝试的那样)。
    • 下载并安装到您的组织中,针对实体的RetrieveMultiple注册它,打开它,然后触发导出到excel。这将使查看RetrieveMultiple请求和检查其所有属性变得非常容易。四处看看,看看是否有什么东西突然向你袭来,让你能够将其作为excel的导出加以区分。我不怀疑你会找到什么,但绝对值得一试
    • 顺便说一句,我有点惊讶CRM没有像导出报表和图表那样绕过插件执行管道导出到excel

  • 按照Polshgiant的建议,我安装了CRM Snoop,发现页面加载和导出到excel之间有3个区别

    • 页面加载时,上下文深度为1,而导出到excel时,上下文深度为2
    • 页面加载时,ParentContext为null,而导出到excel时,ParentContext不为null,并包含以下参数:“视图”、“FetchXml”、“LayoutXml”、“QueryApi”、“QueryParameters”
    • 导出到excel时,ParentContext的消息清楚地标记为“ExportToExcel”

    利用这些差异,我能够在导出到excel事件时触发我的插件。

    按照Polshgiant的建议,我安装了CRM Snoop,发现页面加载和导出到excel之间有3个差异

    • 页面加载时,上下文深度为1,而导出到excel时,上下文深度为2
    • 页面加载时,ParentContext为null,而导出到excel时,ParentContext不为null,并包含以下参数:“视图”、“FetchXml”、“LayoutXml”、“QueryApi”、“QueryParameters”
    • 导出到excel时,ParentContext的消息清楚地标记为“ExportToExcel”

    利用这些差异,我能够在导出到excel事件时触发插件。

    您可以在注册用于检索的插件中使用ExportToExcel和ExportDynamicToExcel“虚拟”消息多次:

    public void Execute(IServiceProvider serviceProvider)
    {
        var executionContext = serviceProvider.GetService<IPluginExecutionContext>();
        var parentContext = executionContext.ParentContext;
        if (parentContext != null &&
            (parentContext.MessageName == "ExportToExcel" ||
             parentContext.MessageName == "ExportDynamicToExcel"))
        {
            // Place your logic here
        }
    }
    
    public void Execute(IServiceProvider服务提供者)
    {
    var executionContext=serviceProvider.GetService();
    var parentContext=executionContext.parentContext;
    if(parentContext!=null&&
    (parentContext.MessageName==“ExportToExcel”||
    parentContext.MessageName==“ExportDynamicToExcel”))
    {
    //把你的逻辑放在这里
    }
    }
    
    您可以在注册用于检索的插件中使用ExportToExcel和ExportDynamicToExcel“虚拟”消息多次:

    public void Execute(IServiceProvider serviceProvider)
    {
        var executionContext = serviceProvider.GetService<IPluginExecutionContext>();
        var parentContext = executionContext.ParentContext;
        if (parentContext != null &&
            (parentContext.MessageName == "ExportToExcel" ||
             parentContext.MessageName == "ExportDynamicToExcel"))
        {
            // Place your logic here
        }
    }
    
    public void Execute(IServiceProvider服务提供者)
    {
    var executionContext=serviceProvider.GetService();
    var parentContext=executionContext.parentContext;
    if(parentContext!=null&&
    (parentContext.MessageName==“ExportToExcel”||
    parentContext.MessageName==“ExportDynamicToExcel”))
    {
    //把你的逻辑放在这里
    }
    }
    
    如果我无法区分这些检索消息和多条消息,我会选择您的第一个选项,但我希望将其作为最后手段。我将尝试CRM Snoop并在找到任何内容后进行更新。我确实发现页面加载和导出到excel之间存在一些差异。我已经发布了我的发现作为答案。非常感谢您的建议,很抱歉,我没有足够的代表投票支持您。如果我无法区分那些检索到的多条消息,我会选择您的第一个选项,但我想保留它作为最后手段。我将尝试CRM Snoop并在找到任何内容后进行更新。我确实发现页面加载和导出到excel之间存在一些差异。我已经发布了我的发现作为答案。非常感谢您的建议,很抱歉我没有足够的代表投票给您。非常欢迎您,很高兴您能够取得进展!需要注意的一点是,系统中的许多其他消息或事件可能会导致某些相同的参数。让你的插件在插件跟踪日志中写消息(谷歌搜索信息),并定期查看日志,确保它不会在你不希望它运行的时候运行。祝你好运事实上,我发现