Exemple #1
0
        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);
                //}
            }
        }