I have a requirement where in associating a contact to office (OOB account entity) based on a office registration number. Basically my plugin will take this office registration number on contact entity and checks if there is an existing office (OOB account). If there is a match found, it will get details like office address,office guid and populates on contact Entity fields Else it will create a new office with that registration number and gets the guid and populates on contact entity.
This plugin works perfectly fine when associating contact to office (by manually updating office registration number). But we recently started loading contact data via SSIS as batch of 1000 records at a time and i'm seeing duplicate offices being created when there is no existing office registration number.
My Question :
1) Do you think multiple plugins are triggered and causing this issue? I mean before the 1st plugin completes execution, the 2nd one is running and creating it??
Here is my code. Please let me know if there is an issue in the code :
private static void SyncAddress(Entity entity, IOrganizationService _svc, ITracingService tracingService) { if (entity.Attributes.Contains("ssa_officeregistrationnumber")) { QueryExpression query = new QueryExpression { EntityName = "account", ColumnSet = new ColumnSet("name", "address1_line1", "address1_line2", "address1_city", "address1_stateorprovince", "address1_postalcode", "address1_country", "telephone1") }; query.Criteria.AddCondition("ssa_officeregistrationnumber", ConditionOperator.Equal, entity.Attributes["ssa_officeregistrationnumber"]); EntityCollection result = _svc.RetrieveMultiple(query); tracingService.Trace("result count : {0}", result.Entities.Count.ToString()); if (result.Entities.Count == 1) { tracingService.Trace("matching office found"); entity["parentcustomerid"] = new EntityReference("account", result.Entities[0].Id); if (result.Entities[0].Attributes.Contains("address1_line1")) { entity["address2_line1"] = result.Entities[0].Attributes["address1_line1"]; } if (result.Entities[0].Attributes.Contains("address1_line2")) { entity["address2_line2"] = result.Entities[0].Attributes["address1_line2"]; } if (result.Entities[0].Attributes.Contains("address1_city")) { entity["address2_city"] = result.Entities[0].Attributes["address1_city"]; } if (result.Entities[0].Attributes.Contains("address1_stateorprovince")) { entity["address2_stateorprovince"] = result.Entities[0].Attributes["address1_stateorprovince"]; } if (result.Entities[0].Attributes.Contains("address1_postalcode")) { entity["address2_postalcode"] = result.Entities[0].Attributes["address1_postalcode"]; } if (result.Entities[0].Attributes.Contains("address1_country")) { entity["address2_country"] = result.Entities[0].Attributes["address1_country"]; } if (result.Entities[0].Attributes.Contains("telephone1")) { entity["address2_telephone1"] = result.Entities[0].Attributes["telephone1"]; } } else if (result.Entities.Count == 0) { tracingService.Trace("matching office not found"); Entity Office = new Entity("account"); Office["ssa_officeregistrationnumber"] = entity.Attributes["ssa_officeregistrationnumber"].ToString(); Guid Officeid = _svc.Create(Office); entity["parentcustomerid"] = new EntityReference("account", Officeid); entity["address2_line1"] = null; entity["address2_line2"] = null; entity["address2_city"] = null; entity["address2_stateorprovince"] = null; entity["address2_postalcode"] = null; entity["address2_country"] = null; entity["address2_telephone1"] = null; } } _svc.Update(entity); tracingService.Trace("Update Complete"); } }