在 CRM 2015 中区分页面加载和导出到 Excel
Distinguish page load and Export to Excel in CRM 2015
我正在编写一个插件,当用户按下 "Export to Excel" 按钮时将被触发。我目前正在将它连接到 "RetrieveMultiple" 消息。但是,加载页面时也会触发相同的消息。无论如何,我可以区分页面加载消息和 "Export to Excel" 消息吗?
遗憾的是,SDK 中没有用于导出到 Excel 的特殊消息,您可以根据该消息注册您的插件。我可以想到两个选项:
- 覆盖应用程序功能区中的导出到 Excel 按钮以调用自定义 JavaScript 函数。您的函数将做您想做的任何事情,然后可选择将请求传递给正常的 Export to Excel 函数。
- 找到一些方法来区分 RetrieveMultiple 消息(正如您正在尝试做的那样)。
- 下载 CRM Snoop, install it in your org, register it against RetrieveMultiple for your entity, turn it on (basic usage),然后触发导出到 excel。这将使查看 RetrieveMultiple 请求并检查其所有属性变得非常容易。四处寻找,看看是否有任何东西让您跳出来,可以让您将其区分为 excel 的导出。我不怀疑你会找到任何东西,但绝对值得一试。
- 旁注,我有点惊讶 CRM 没有像导出报告和图表那样绕过插件执行管道以导出到 excel。
按照 Polshgiant 的建议,我安装了 CRM Snoop,发现页面加载和导出到 excel 之间存在 3 个差异。
- 在页面加载时,上下文深度为 1,而在导出到 excel 时,上下文深度为 2。
- 在页面加载时,ParentContext 为空,而在导出到 excel 时,ParentContext 不为空并且包含以下参数:"View"、"FetchXml"、"LayoutXml" , "QueryApi", "QueryParameters".
- 导出到excel时,ParentContext的消息明确标注为"ExportToExcel"。
利用这些差异,我已经能够在并且仅在导出到 excel 事件时触发我的插件。
您可以在为 RetrieveMultiple 注册的插件中使用 ExportToExcel 和 ExportDynamicToExcel "virtual" 消息:
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
}
}
我正在编写一个插件,当用户按下 "Export to Excel" 按钮时将被触发。我目前正在将它连接到 "RetrieveMultiple" 消息。但是,加载页面时也会触发相同的消息。无论如何,我可以区分页面加载消息和 "Export to Excel" 消息吗?
遗憾的是,SDK 中没有用于导出到 Excel 的特殊消息,您可以根据该消息注册您的插件。我可以想到两个选项:
- 覆盖应用程序功能区中的导出到 Excel 按钮以调用自定义 JavaScript 函数。您的函数将做您想做的任何事情,然后可选择将请求传递给正常的 Export to Excel 函数。
- 找到一些方法来区分 RetrieveMultiple 消息(正如您正在尝试做的那样)。
- 下载 CRM Snoop, install it in your org, register it against RetrieveMultiple for your entity, turn it on (basic usage),然后触发导出到 excel。这将使查看 RetrieveMultiple 请求并检查其所有属性变得非常容易。四处寻找,看看是否有任何东西让您跳出来,可以让您将其区分为 excel 的导出。我不怀疑你会找到任何东西,但绝对值得一试。
- 旁注,我有点惊讶 CRM 没有像导出报告和图表那样绕过插件执行管道以导出到 excel。
按照 Polshgiant 的建议,我安装了 CRM Snoop,发现页面加载和导出到 excel 之间存在 3 个差异。
- 在页面加载时,上下文深度为 1,而在导出到 excel 时,上下文深度为 2。
- 在页面加载时,ParentContext 为空,而在导出到 excel 时,ParentContext 不为空并且包含以下参数:"View"、"FetchXml"、"LayoutXml" , "QueryApi", "QueryParameters".
- 导出到excel时,ParentContext的消息明确标注为"ExportToExcel"。
利用这些差异,我已经能够在并且仅在导出到 excel 事件时触发我的插件。
您可以在为 RetrieveMultiple 注册的插件中使用 ExportToExcel 和 ExportDynamicToExcel "virtual" 消息:
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
}
}