public void Execute(IServiceProvider serviceProvider)
        {
            tracingService = (ITracingService)serviceProvider.GetService(typeof(ITracingService));
            IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));

            if (context.InputParameters.Contains("Target") &&
                context.InputParameters["Target"] is Entity)
            {
                Entity target = (Entity)context.InputParameters["Target"];
                if (target.LogicalName != "adv_project")
                {
                    return;
                }
                try
                {
                    tracingService.Trace("UpdateProjectAccountsHierarchy.");
                    // Only run if ace_typeofpartnership attribute was changed...
                    if (!target.Attributes.Contains(LookupField))
                    {
                        return;
                    }

                    // Obtain the organization service reference.
                    IOrganizationServiceFactory serviceFactory =
                        (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
                    service = serviceFactory.CreateOrganizationService(context.UserId);

                    var applicant = target.Attributes[LookupField] as EntityReference;
                    if (applicant is null)
                    {
                        return;
                    }
                    if (applicant.LogicalName != "account")
                    {
                        return;
                    }

                    var relationshipManager = new ProjectAccountRelationshipManager(service, tracingService);
                    relationshipManager.UpdateRelationships(target.Id, applicant.Id);

                    // Remove all accounts from account-projects relationship

                    // add all previously retrieved accounts

                    tracingService.Trace("Done!");
                }
                catch (FaultException <OrganizationServiceFault> ex)
                {
                    tracingService.Trace("Fault: {0} {1}", ex.Message, ex.StackTrace);
                    throw new InvalidPluginExecutionException("An error occurred in the UpdateTypeOfPartnership plug-in", ex);
                }
                catch (Exception ex)
                {
                    tracingService.Trace("UpdateTypeOfPartnershipPlugin: {0}", ex.ToString());
                    throw;
                }
            }
        }
示例#2
0
        public void Execute(IServiceProvider serviceProvider)
        {
            tracingService = (ITracingService)serviceProvider.GetService(typeof(ITracingService));
            try
            {
                IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
                if (context.InputParameters.Contains("Target") &&
                    context.InputParameters["Target"] is Entity)
                {
                    Entity target = (Entity)context.InputParameters["Target"];
                    if (target.LogicalName != "account")
                    {
                        return;
                    }
                    tracingService.Trace(nameof(UpdateAccountProjects));
                    // Only run if parentaccountid attribute was changed...
                    if (!target.Attributes.Contains("parentaccountid"))
                    {
                        return;
                    }

                    IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
                    service = serviceFactory.CreateOrganizationService(context.UserId);

                    var relationshipManager = new ProjectAccountRelationshipManager(service, tracingService);

                    foreach (var project in GetProjectIds(target.Id))
                    {
                        relationshipManager.UpdateRelationships(project.ProjectId, project.AccountId);
                    }
                    tracingService.Trace("Done!");
                }
            }
            catch (FaultException <OrganizationServiceFault> ex)
            {
                tracingService.Trace("Fault: {0} {1}", ex.Message, ex.StackTrace);
                throw new InvalidPluginExecutionException("An error occurred in the UpdateTypeOfPartnership plug-in", ex);
            }
            catch (Exception ex)
            {
                tracingService.Trace("UpdateTypeOfPartnershipPlugin: {0}", ex.ToString());
                throw;
            }
        }