Plugins 在CRM 2015中区分页面加载和导出到Excel
我正在写一个插件,当用户按下“导出到Excel”按钮时会被触发。我现在正在连接到“RetrieveMultiple”消息。但是,加载页面时也会触发相同的消息。我是否可以区分页面加载消息和“导出到Excel”消息 不幸的是,SDK中没有一条导出到Excel的特殊消息,您可以根据它注册插件。我可以想出两个选择:Plugins 在CRM 2015中区分页面加载和导出到Excel,plugins,dynamics-crm,Plugins,Dynamics Crm,我正在写一个插件,当用户按下“导出到Excel”按钮时会被触发。我现在正在连接到“RetrieveMultiple”消息。但是,加载页面时也会触发相同的消息。我是否可以区分页面加载消息和“导出到Excel”消息 不幸的是,SDK中没有一条导出到Excel的特殊消息,您可以根据它注册插件。我可以想出两个选择: 覆盖应用程序功能区中的“导出到Excel”按钮以调用自定义JavaScript函数。您的函数将执行您想执行的任何操作,然后有选择地将请求传递给正常的导出到Excel函数 找到一些方法来区分R
- 下载并安装到您的组织中,针对实体的RetrieveMultiple注册它,打开它,然后触发导出到excel。这将使查看RetrieveMultiple请求和检查其所有属性变得非常容易。四处看看,看看是否有什么东西突然向你袭来,让你能够将其作为excel的导出加以区分。我不怀疑你会找到什么,但绝对值得一试
- 顺便说一句,我有点惊讶CRM没有像导出报表和图表那样绕过插件执行管道导出到excel
不幸的是,SDK中没有一条导出到Excel的特殊消息,您可以根据它注册插件。我可以想出两个选择:
- 下载并安装到您的组织中,针对实体的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之间存在一些差异。我已经发布了我的发现作为答案。非常感谢您的建议,很抱歉我没有足够的代表投票给您。非常欢迎您,很高兴您能够取得进展!需要注意的一点是,系统中的许多其他消息或事件可能会导致某些相同的参数。让你的插件在插件跟踪日志中写消息(谷歌搜索信息),并定期查看日志,确保它不会在你不希望它运行的时候运行。祝你好运事实上,我发现