public void Execute(IServiceProvider serviceProvider) { ITracingService tracingService = (ITracingService)serviceProvider.GetService(typeof(ITracingService)); IPluginExecutionContext context = (IPluginExecutionContext) serviceProvider.GetService(typeof(IPluginExecutionContext)); tracingService.Trace("Entered in CustomAddress"); if (context != null) { //tracingService.Trace(context) } if (context.Depth > 1) { tracingService.Trace("depth is greter than 1 returned"); return; } //Entity entity = context.PostEntityImages["PostImage"]; if (context.PostEntityImages.Contains("PostImage") && context.PostEntityImages["PostImage"] is Entity) { Entity entity = (Entity)context.PostEntityImages["PostImage"]; IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory)); IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId); try { CrmDataHelper objHelper = new CrmDataHelper(); Guid customerAddressId = Guid.Empty; Guid parentId; int addressNumber; int objectTypeCode; Entity customAddressObject; EntityCollection addresscollection = objHelper.GetCustomerAddress(service, entity.Id); if (entity.LogicalName == "contact") { objectTypeCode = 2; } else { objectTypeCode = 1; } foreach (Entity e in addresscollection.Entities) { addressNumber = (int)e[AddressAttributes.addressnumber]; tracingService.Trace("Object Type code" + objectTypeCode); tracingService.Trace("message" + context.MessageName); parentId = ((EntityReference)e[AddressAttributes.parentid]).Id; customerAddressId = objHelper.GetParentIdCustomerAddress(service, addressNumber, entity.Id, objectTypeCode); if (context.MessageName == "Create" || context.MessageName == "Update") { if (customerAddressId == Guid.Empty) { customAddressObject = CreateCustomerAddressObject(e, objectTypeCode, entity, addressNumber, service, tracingService); service.Create(customAddressObject); } else { customAddressObject = CreateCustomerAddressObject(e, objectTypeCode, entity, addressNumber, service, tracingService); customAddressObject.Id = customerAddressId; service.Update(customAddressObject); } } } tracingService.Trace("check adress"); if (objectTypeCode == 1 && entity.Attributes.Contains(AddressAttributes.gk_shiptoaddresstype) && entity.Attributes[AddressAttributes.gk_shiptoaddresstype] != null) { tracingService.Trace("Address3"); addressNumber = 3; customerAddressId = objHelper.GetParentIdCustomerAddress(service, addressNumber, entity.Id, objectTypeCode); if (customerAddressId == Guid.Empty) { tracingService.Trace("createaddress3"); customAddressObject = CreateCustomerAddressObject(null, objectTypeCode, entity, addressNumber, service, tracingService); service.Create(customAddressObject); } else { tracingService.Trace("updateaddress3"); customAddressObject = CreateCustomerAddressObject(null, objectTypeCode, entity, addressNumber, service, tracingService); customAddressObject.Id = customerAddressId; service.Update(customAddressObject); } } } catch (Exception ex) { tracingService.Trace("HandleCustomAddress: {0}", ex.ToString()); throw; } //catch (FaultException<OrganizationServiceFault> ex) //{ // throw new InvalidPluginExecutionException("An error occurred in HandleCustomAddress.", ex); //} } }