public void RemoveWebroleWhenConnectionDeleted(Entity image)
{
tracingService.Trace("Entering RemoveWebroleWhenConnectionDeleted()");
Connection c = image.ToEntity<Connection>();
tracingService.Trace($"c = {JsonConvert.SerializeObject(c, Formatting.Indented)}");
if ((bool)c.IsMaster)
{
tracingService.Trace("This is the Master connection");
string thisRole = c.Record2RoleId.Name;
tracingService.Trace($"ConnectionRole: {thisRole}");
if(new List<string> { "Accounts - Data Approver", "Accounts - Data Provider",
"Accounts - Documents Only", "Accounts - Read Only",
"Audit - Data Approver", "Audit - Data Provider", "Audit - Documents Only", "Audit - Primary Contact", "Audit - Read Only", "Business Advisory - Basic User",
"Business Advisory - Data Approver", "Business Advisory - Data Provider", "Business Advisory - Documents Only",
"Business Advisory - Primary Contact", "Business Advisory - Read Only", "Business Tax - Data Approver",
"Business Tax - Data Provider", "Business Tax - Documents Only", "Business Tax - Read Only", "Calendar - Data Approver", "Calendar - Data Provider",
"Calendar - Read Only", "Champion", "Child", "Colleague", "Component", "Connected IoT Device", "Corporate Finance - Basic User", "Corporate Finance - Corporate Contact",
"Corporate Finance - Data Approver", "Corporate Finance - Data Provider", "Corporate Finance - Documents Only", "Corporate Finance - Primary Contact",
"Corporate Finance - Read Only", "Dashboard - Corporates", "Dashboard - Corporation", "Dashboard - Employer Solutions", "Dashboard - R&D", "Data Approver", "Data Provider",
"Digital - Data Approver", "Digital - Data Provider",
"Digital - Documents Only", "Digital - Primary Contact", "Digital - Read Only", "Employment Tax - Data Approver",
"Employment Tax - Data Provider", "Employment Tax - Documents Only", "Employment Tax - Read Only",
"Funds Tax - Data Approver", "Funds Tax - Data Provider",
"Funds Tax - Documents Only", "Funds Tax - Read Only",
"Ireland Business Tax - Data Approver", "Ireland Business Tax - Data Provider", "Ireland Business Tax - Documents Only",
"Ireland Business Tax - Primary Contact", "Ireland Business Tax - Read Only", "Ireland Tax - Basic User", "Ireland Tax - Data Approver", "Ireland Tax - Data Provider",
"Ireland Tax - Documents Only", "Ireland Tax - Read Only", "Organisation - Data Approver",
"Organisation - Data Provider", "Organisation - Documents Only", "Organisation - Primary Contact", "Organisation - Read Only",
"Partnership - Basic User", "Partnership - Data Approver", "Partnership - Data Provider", "Partnership - Documents Only",
"Partnership - Primary Contact", "Partnership - Read Only", "Payroll - Basic User", "Payroll - Data Approver", "Payroll - Data Provider", "Payroll - Documents Only",
"Payroll - Primary Contact", "Payroll - Read Only", "RandD - Data Approver",
"RandD - Data Provider", "RandD - Documents Only", "RandD - Primary Contact", "RandD - Read Only", "Risk And Assurance - Basic User", "Risk And Assurance - Corporate Contact", "Risk And Assurance - Data Approver", "Risk And Assurance - Data Provider",
"Risk And Assurance - Documents Only", "Risk And Assurance - Primary Contact", "Risk And Assurance - Read Only",
"Trust - Data Approver", "Trust - Data Provider", "Trust - Documents Only", "Trust - Lead Trustee", "Trust - Read Only",
"US Tax - Data Approver", "US Tax - Data Provider", "US Tax - US Tax Contact",
"Virtual Finance Office - Data Approver", "Virtual Finance Office - Data Provider", "Virtual Finance Office - Documents Only",
"Virtual Finance Office - Read Only"}.Contains(thisRole))
{
QueryExpression qryConnection = new QueryExpression("connection");
qryConnection.Criteria.AddCondition("record1id", ConditionOperator.Equal, c.Record1Id.Id);
qryConnection.Criteria.AddCondition("record2roleid", ConditionOperator.Equal, c.Record2RoleId.Id);
if(crmService.RetrieveMultiple(qryConnection).Entities.Count == 0)
{
tracingService.Trace($"No other connections found from {c.Record1Id.Name} as role {c.Record2RoleId.Name}. Ok to Disassociate.");
QueryExpression qryWebrole = new QueryExpression("adx_webrole");
qryWebrole.Criteria.AddCondition("adx_name", ConditionOperator.Equal, thisRole);
EntityCollection ec = crmService.RetrieveMultiple(qryWebrole);
if (ec.Entities.Count != 1)
{
tracingService.Trace($"Found {ec.Entities.Count} matching webroles - can't Disassociate");
return;
}
tracingService.Trace($"Found webrole to Disassociate: contactid = {c.Record1Id.Id}, adx_webroleid = {ec.Entities[0].Id}");
EntityReferenceCollection relatedEntities = new EntityReferenceCollection();
relatedEntities.Add(new EntityReference("adx_webrole", ec.Entities[0].Id));
crmService.Disassociate("contact", c.Record1Id.Id,
new Relationship("adx_webrole_contact"),
relatedEntities);
tracingService.Trace("Disassociate complete");
}
}
}
}