我想知道我们是否可以为Dynamics CRM(任何版本)中的“发布”和“全部发布”等消息编写执行的插件。如果是这样,您可以共享相同或代码片段的任何样本引用。
答案 0 :(得分:4)
这是一个适用于Publish和PublishAll消息的插件,它将使用我为此目的创建的实体记录事件(您可以更改为执行任何操作)。
当事件为Publish时,插件使用ParameterXml参数(MSDN)来记录正在发布的组件。对于PublishAll消息,此参数不存在,因此没有详细信息(这是有道理的,因为您要发布所有)。
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解决方案。
答案 1 :(得分:1)
请在此处查看有效的Dynamics CRM消息列表。 Publish和PublishAll都列出了。从2011年开始,它们在所有版本的CRM中都有效。
https://msdn.microsoft.com/en-us/library/gg328576.aspx
只需注册您的插件,只需使用Publish或PublishAll作为邮件,并将实体留空。
在Publish的情况下,通过查看文档似乎无法缩小正在发布的实体。你需要看看输入参数给你什么,看看你是否可以找出你正在处理的实体,如果你需要它。