예제 #1
0
        private OrganizationResponse ExecuteRequest(OrganizationRequest request, EntityReference userRef, PluginContext parentPluginContext)
        {
#if !(XRM_MOCKUP_2011 || XRM_MOCKUP_2013 || XRM_MOCKUP_2015)
            if (request is AssignRequest assignRequest)
            {
                var targetEntity = dataMethods.GetEntityOrNull(assignRequest.Target);
                if (targetEntity.GetAttributeValue <EntityReference>("ownerid") != assignRequest.Assignee)
                {
                    var req = new UpdateRequest();
                    req.Target = new Entity(assignRequest.Target.LogicalName, assignRequest.Target.Id);
                    req.Target.Attributes["ownerid"] = assignRequest.Assignee;
                    Execute(req, userRef, parentPluginContext);
                }
                return(new AssignResponse());
            }

            if (request is SetStateRequest setstateRequest)
            {
                var targetEntity = dataMethods.GetEntityOrNull(setstateRequest.EntityMoniker);
                if (targetEntity.GetAttributeValue <OptionSetValue>("statecode") != setstateRequest.State ||
                    targetEntity.GetAttributeValue <OptionSetValue>("statuscode") != setstateRequest.Status)
                {
                    var req = new UpdateRequest();
                    req.Target = new Entity(setstateRequest.EntityMoniker.LogicalName, setstateRequest.EntityMoniker.Id);
                    req.Target.Attributes["statecode"]  = setstateRequest.State;
                    req.Target.Attributes["statuscode"] = setstateRequest.Status;
                    Execute(req, userRef, parentPluginContext);
                }
                return(new SetStateResponse());
            }
#endif
            if (workflowManager.GetActionDefaultNull(request.RequestName) != null)
            {
                return(ExecuteAction(request));
            }

            // Execute matching handler function
            if (RequestHandlerMap.TryGetValue(request.RequestName, out Func <OrganizationRequest, EntityReference, OrganizationResponse> executeFunc))
            {
                return(executeFunc(request, userRef));
            }

            if (settings.ExceptionFreeRequests.Contains(request.RequestName))
            {
                return(new OrganizationResponse());
            }

            throw new NotImplementedException("Execute for the given request has not been implemented yet.");
        }