plugin on “Associate” Message


using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace new.AssignCompaniesToAccount.Plugin
{
public class AssignCompaniesToAccount : IPlugin
{
public void Execute(IServiceProvider serviceProvider)
{
IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
IOrganizationServiceFactory factory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
IOrganizationService service = factory.CreateOrganizationService(context.UserId);
ITracingService tracingservice = (ITracingService)serviceProvider.GetService(typeof(ITracingService));
if (context.Depth > 1)
return;
// tracingservice.Trace(“context :”,context.Depth);
EntityReference orderPrimary = (EntityReference)context.InputParameters[“Target”];
Relationship relationship = (Relationship)context.InputParameters[“Relationship”];
if (orderPrimary != null && relationship != null)
{
// tracingservice.Trace(“Entity Name :”+ orderPrimary.LogicalName, orderPrimary.LogicalName);
// tracingservice.Trace(“Schema Name :”+ relationship.SchemaName, relationship.SchemaName);

if (orderPrimary.LogicalName == “new_company” && relationship.SchemaName == “new_new_company_salesorder”)
{

if (context.MessageName == “Associate”)
{
tracingservice.Trace(“MessageName :”, context.MessageName);
EntityReferenceCollection CGRelatedEntity = (EntityReferenceCollection)context.InputParameters[“RelatedEntities”];
Entity pa = service.Retrieve(CGRelatedEntity[0].LogicalName, CGRelatedEntity[0].Id, new ColumnSet(new string[] { “customerid” }));
if (pa != null)
{

Guid accountId = pa.Attributes.Contains(“customerid”) ? pa.GetAttributeValue(“customerid”).Id : Guid.Empty;
if (accountId != Guid.Empty)
{

EntityCollection results = GetManytoManyRelationshipRecords(service, “new_company”, “salesorder”, “new_new_company_salesorder”);

if (results != null && results.Entities.Count > 0)
{

foreach (Entity ent in results.Entities)
{
// tracingservice.Trace(“Entity Id :” + ent.Id, ent.Id);
//throw new Exception(“hi :” + relationship.SchemaName);
AssociateAccounttoComapany(service, accountId, ent.Id);

}

}
}
}
}
}
}
}
public EntityCollection GetManytoManyRelationshipRecords(IOrganizationService service, string entity1, string entity2, string relationshipEntityName)
{
EntityCollection results = null;
QueryExpression query = new QueryExpression(entity1);
query.ColumnSet = new ColumnSet(true);
LinkEntity link1 = new LinkEntity(entity1, relationshipEntityName, “new_companyid”, “new_companyid”, JoinOperator.Inner);
LinkEntity link2 = new LinkEntity(relationshipEntityName, entity2, “salesorderid”, “salesorderid”, JoinOperator.Inner);
link1.LinkEntities.Add(link2);
query.LinkEntities.Add(link1);
link2.LinkCriteria = new FilterExpression();
link2.LinkCriteria.AddCondition(new ConditionExpression(“salesorderid”, ConditionOperator.Equal, new Guid(“84789DF7-4C71-E711-9CE2-000D3A100681”)));
results = service.RetrieveMultiple(query);
return results;
}
public static void AssociateAccounttoComapany(IOrganizationService service, Guid accountId, Guid companyId)
{
try
{
EntityReferenceCollection relatedEntities = new EntityReferenceCollection();
relatedEntities.Add(new EntityReference(“new_company”, companyId));
Relationship relationship = new Relationship(“new_new_company_account”);
service.Associate(“account”, accountId, relationship, relatedEntities);
}
catch
{
// Console.WriteLine(ex.Message);
}
}
}
}

Leave a comment