CRM Plugin for Publish and Publish All messages

I was wondering if we can write plugins that get executed for messages like "publish" and "publish all" in Dynamics CRM (any version). if so can you share any sample references for the same or code snippets.

Answers


This is a plugin that works for Publish and PublishAll messages and it will log the event using an entity that I created for this purpose (you can change to do whatever you want).

When the event is Publish, the plugin uses the ParameterXml parameter (MSDN) to log which components are being published. In the case of the PublishAll message, this parameter is not present so there's no detail (which makes sense because you're publishing 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);
    }
}

This is how it looks in CRM:

You can download the plugin project and CRM solution from my GitHub.


See here for a list of valid Dynamics CRM messages. Publish and PublishAll are both listed. They're also valid in all version of CRM from 2011 onward.

https://msdn.microsoft.com/en-us/library/gg328576.aspx

Just register your plugin like any other but use Publish or PublishAll for the message and leave the Entity as blank.

In the case of Publish, it seems by looking at the documentation that you can't narrow down which entity is being published. You'll have to take a look at what the Input Parameters give you to see if you can work out which entity you're dealing with, if you need it.


Need Your Help

Identifying exact arraylist causing error in Java

java runtime-error

I am working with a relatively large program, and I recently came across the following error:

Sticky footer overflow issue?

html css css3 footer sticky-footer

I am having some trouble with my sticky footer. First of all, my content does not reach the entire bottom of the screen (even underneath the footer .. check on larger monitor). Also, when the windo...