用于发布和发布所有消息的 CRM 插件
CRM Plugin for Publish and Publish All messages
我想知道我们是否可以在 Dynamics CRM(任何版本)中编写针对 "publish" 和 "publish all" 等消息执行的插件。如果可以,您能否分享相同或代码片段的任何示例参考。
有关有效 Dynamics CRM 消息的列表,请参阅此处。 Publish 和 PublishAll 都被列出。它们在 2011 年以后的所有 CRM 版本中也有效。
https://msdn.microsoft.com/en-us/library/gg328576.aspx
只需像其他任何插件一样注册您的插件,但对消息使用 Publish 或 PublishAll,并将实体留空。
就 Publish 而言,通过查看文档似乎无法缩小要发布的实体的范围。如果需要,您必须查看输入参数为您提供的内容,看看是否可以计算出您正在处理的实体。
这是一个适用于 Publish 和 PublishAll 消息的插件,它将使用我为此目的创建的实体记录事件(您可以更改以执行任何您想要的操作)。
当事件为 Publish 时,插件使用 ParameterXml 参数 (MSDN) 记录正在发布的组件。对于 PublishAll 消息,此参数不存在,因此没有详细信息(这是有道理的,因为您正在发布 all)。
public class PublishPlugin : IPlugin
{
public void Execute(IServiceProvider serviceProvider)
{
IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);
if (context.MessageName != "Publish" && context.MessageName != "PublishAll")
return;
string parameterXml = string.Empty;
if (context.MessageName == "Publish")
{
if (context.InputParameters.Contains("ParameterXml"))
{
parameterXml = (string)context.InputParameters["ParameterXml"];
}
}
CreatePublishAuditRecord(service, context.MessageName, context.InitiatingUserId, parameterXml);
}
private void CreatePublishAuditRecord(IOrganizationService service, string messageName, Guid userId, string parameterXml)
{
Entity auditRecord = new Entity("fjo_publishaudit");
auditRecord["fjo_message"] = messageName;
auditRecord["fjo_publishbyid"] = new EntityReference("systemuser", userId);
auditRecord["fjo_publishon"] = DateTime.Now;
auditRecord["fjo_parameterxml"] = parameterXml;
service.Create(auditRecord);
}
}
这是它在 CRM 中的样子:
您可以从我的 GitHub 下载插件项目和 CRM 解决方案。
我想知道我们是否可以在 Dynamics CRM(任何版本)中编写针对 "publish" 和 "publish all" 等消息执行的插件。如果可以,您能否分享相同或代码片段的任何示例参考。
有关有效 Dynamics CRM 消息的列表,请参阅此处。 Publish 和 PublishAll 都被列出。它们在 2011 年以后的所有 CRM 版本中也有效。
https://msdn.microsoft.com/en-us/library/gg328576.aspx
只需像其他任何插件一样注册您的插件,但对消息使用 Publish 或 PublishAll,并将实体留空。
就 Publish 而言,通过查看文档似乎无法缩小要发布的实体的范围。如果需要,您必须查看输入参数为您提供的内容,看看是否可以计算出您正在处理的实体。
这是一个适用于 Publish 和 PublishAll 消息的插件,它将使用我为此目的创建的实体记录事件(您可以更改以执行任何您想要的操作)。
当事件为 Publish 时,插件使用 ParameterXml 参数 (MSDN) 记录正在发布的组件。对于 PublishAll 消息,此参数不存在,因此没有详细信息(这是有道理的,因为您正在发布 all)。
public class PublishPlugin : IPlugin
{
public void Execute(IServiceProvider serviceProvider)
{
IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);
if (context.MessageName != "Publish" && context.MessageName != "PublishAll")
return;
string parameterXml = string.Empty;
if (context.MessageName == "Publish")
{
if (context.InputParameters.Contains("ParameterXml"))
{
parameterXml = (string)context.InputParameters["ParameterXml"];
}
}
CreatePublishAuditRecord(service, context.MessageName, context.InitiatingUserId, parameterXml);
}
private void CreatePublishAuditRecord(IOrganizationService service, string messageName, Guid userId, string parameterXml)
{
Entity auditRecord = new Entity("fjo_publishaudit");
auditRecord["fjo_message"] = messageName;
auditRecord["fjo_publishbyid"] = new EntityReference("systemuser", userId);
auditRecord["fjo_publishon"] = DateTime.Now;
auditRecord["fjo_parameterxml"] = parameterXml;
service.Create(auditRecord);
}
}
这是它在 CRM 中的样子:
您可以从我的 GitHub 下载插件项目和 CRM 解决方案。