Sample Code –
public class MyPlugin: IPlugin { public void Execute(IServiceProvider serviceProvider) { ITracingService tracingService = (ITracingService)serviceProvider.GetService(typeof(ITracingService)); IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext)); IOrganizationServiceFactory factory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory)); IOrganizationService orgService = factory.CreateOrganizationService(context.UserId); try { tracingService.Trace("start plugin execution: {0}", this.GetType().FullName); if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is EntityReference && context.ParentContext == null) { tracingService.Trace("Parent Context is null"); if (context.MessageName == "Associate") { if(context.InputParameters.Contains("Relationship") && ((Relationship)context.InputParameters["Relationship"]).SchemaName.Equals("schemaname")) { tracingService.Trace("Relationship Found"); if (context.InputParameters.Contains("RelatedEntities") && context.InputParameters["RelatedEntities"] is EntityReferenceCollection) { var primaryEntity= (EntityReference)context.InputParameters["Target"]; var relatedEntities= context.InputParameters["RelatedEntities"] as EntityReferenceCollection; } } } } tracingService.Trace("end plugin execution: {0}", this.GetType().FullName); } catch(InvalidPluginExecutionException) { throw; } catch (System.ServiceModel.FaultException<OrganizationServiceFault> ex) { tracingService.Trace(ex.Detail.Message); throw; } catch (Exception ex) { tracingService.Trace(ex.ToString()); throw; } } }
Rajeev Pentyala – Technical Blog on Power Platform, Azure and AI
In CRM, the Associate or Disassociate event happens
- If you have a N:N relationship between two entities and when you try to associate or disassociate records either from Associated view or Sub grid.
In Plugins, the Associate & Disassociate messages behave little different than other messages.
- When you register a plugin on Associate message, you have to leave “Primary and Secondary” entities as ‘none’.
- Since we don’t provide entity names, the registered Plug-in step triggers on all “Associate” operations, so we have to check few conditions to let the “Association” trigger happen only between intended entities.
You can use the below code template for Associate or Disassociate plugins
EntityReference targetEntity = null;
string relationshipName = string.Empty;
EntityReferenceCollection relatedEntities = null;
EntityReference relatedEntity = null;
if (context.MessageName == “Associate”) {
// Get the “Relationship” Key from context
if…
View original post 93 more words
Discover more from Nishant Rana's Weblog
Subscribe to get the latest posts sent to your email.



Hello.
Is it possible to only trigger the plugin only when adding single record in the subgrid (N:N) and don’t run when multiple record is selected?
LikeLike