To remove a contact from a marketing list in Dynamics 365 using a plugin
- Create a plugin: First, you need to create a plugin that will execute when a contact is removed from a marketing list. This plugin should be registered on the Remove Member List Request message.
- Register the plugin: Register your plugin in Dynamics 365. You can do this through the Plugin Registration Tool or directly within the Dynamics 365 interface.
- Implement the logic: In your plugin code, implement the logic to handle the removal of the contact from the marketing list. This logic would involve retrieving the contact and the marketing list record and then removing the contact from the marketing list.
- Deploy and test: Deploy your plugin to your Dynamics 365 environment and test it to ensure that it correctly removes contacts from marketing lists when triggered.
Step 1. Create a marketing list entity
Step 2. Create a contact record
Step 3. Add contact to the marketing list
Step 4. Plugin registration for removal
Register a plugin with Message Remove Member
Step 5. Contact removal process
Select Contact and Click on Remove Associated Contact from the Marketing List
Step 6. Post removal actions
After a Contact is removed Associated Contact from the Marketing List Plugin will trigger
Step 7. Plugin logic
The Record got updated the with Boolean field as True
Plugin code
using Microsoft.Xrm.Sdk;
using System;
namespace Plugins
{
public class ManageContact : IPlugin
{
public void Execute(IServiceProvider serviceProvider)
{
ITracingService tracer = (ITracingService)serviceProvider.GetService(typeof(ITracingService));
IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
IOrganizationServiceFactory factory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
IOrganizationService service = factory.CreateOrganizationService(null);
if (context.MessageName == "RemoveMember")
{
if (context.PrimaryEntityName == "list")
{
var contactId = (Guid)context.InputParameters["EntityId"];
var marketingListId = (Guid)context.InputParameters["ListId"];
Entity record = new Entity();
var contact = new Contact(record, service);
contact.UpdateBoolFields(contactId);
}
}
}
private void UpdateBoolFields(Guid contactId)
{
var updateContact = new Entity("contact");
updateContact.Id = contactId;
updateContact.Attributes.Add("apy_bool", true);
Service.Update(updateContact);
}
}
}
Unit test code
[TestMethod]
public void ContactRemovedFromMarketingList_DiassocateOfMarketingFormList()
{
Entity contact = new Entity("contact", Guid.NewGuid());
Entity diqSubscriptionList = new Entity("list", Guid.NewGuid());
Entity reminderSubscriptionList = new Entity("list", Guid.NewGuid());
Entity SubscriptionList_Path = new Entity("list", Guid.NewGuid());
SubscriptionList_Path.Attributes.Add("listname", "SubscriptionList_Path");
Entity listMember = new Entity("listmember", Guid.NewGuid());
listMember.Attributes.Add("listid", SubscriptionList_Path.ToEntityReference());
listMember.Attributes.Add("entityid", contact.ToEntityReference());
List<Entity> data = new List<Entity> { contact, diqSubscriptionList, SubscriptionList_Path, listMember };
XrmFakedContext context = new XrmFakedContext();
context.Initialize(data);
XrmFakedPluginExecutionContext ctx = context.GetDefaultPluginContext();
ctx.MessageName = "RemoveMember";
ctx.PrimaryEntityName = "list";
ctx.InputParameters.Add("EntityId", contact.Id);
ctx.InputParameters.Add("ListId", diqSubscriptionList.Id);
context.ExecutePluginWith<Plugins.ManageContact>(ctx);
Entity actualContact = context.CreateQuery("contact").Where(x => x.Id == contact.Id).First();
Assert.AreEqual(actualContact.GetAttributeValue<bool>("apy_bool"), true);
}