private Activity ValidateWorkflow(JobInvocationInfo invocationInfo, Activity activity, ref bool?isSuspendable)
        {
            PSWorkflowRuntime     runtime               = PSWorkflowRuntime.Instance;
            JobDefinition         definition            = invocationInfo.Definition;
            WorkflowJobDefinition workflowJobDefinition = WorkflowJobDefinition.AsWorkflowJobDefinition(definition);

            bool externalActivity = true;

            if (activity == null)
            {
                bool windowsWorkflow;
                activity = DefinitionCache.Instance.GetActivityFromCache(workflowJobDefinition, out windowsWorkflow);
                // Debug.Assert(activity != null, "WorkflowManager failed validation for a null activity");
                if (activity == null)
                {
                    throw new InvalidOperationException();
                }

                externalActivity = false;

                // skip validation if it is a windows workflow
                if (windowsWorkflow)
                {
                    return(activity);
                }
            }

            // If validation is disabled, just return the activity as is...
            if (!runtime.Configuration.EnableValidation)
            {
                return(activity);
            }

            if (externalActivity && !DefinitionCache.Instance.AllowExternalActivity)
            {
                // If there is a custom validator activity, then call it. If it returns true
                // then just return the activity.
                if (Validation.CustomHandler == null)
                {
                    throw new InvalidOperationException();
                }

                if (Validation.CustomHandler.Invoke(activity))
                {
                    return(activity);
                }

                string displayName = activity.DisplayName;

                if (string.IsNullOrEmpty(displayName))
                {
                    displayName = this.GetType().Name;
                }

                string message = string.Format(CultureInfo.CurrentCulture, Resources.InvalidActivity, displayName);
                throw new ValidationException(message);
            }
            PSWorkflowValidationResults validationResults = GetWorkflowValidator().ValidateWorkflow(
                definition.InstanceId, activity,
                DefinitionCache.Instance.GetRuntimeAssemblyName(workflowJobDefinition));

            if (validationResults.Results != null)
            {
                GetWorkflowValidator().ProcessValidationResults(validationResults.Results);
            }

            isSuspendable = validationResults.IsWorkflowSuspendable;

            return(activity);
        }
Beispiel #2
0
        private Activity ValidateWorkflow(JobInvocationInfo invocationInfo, Activity activity, ref bool?isSuspendable)
        {
            bool flag = false;
            PSWorkflowRuntime     instance              = PSWorkflowRuntime.Instance;
            JobDefinition         definition            = invocationInfo.Definition;
            WorkflowJobDefinition workflowJobDefinition = WorkflowJobDefinition.AsWorkflowJobDefinition(definition);
            bool flag1 = true;

            if (activity == null)
            {
                activity = DefinitionCache.Instance.GetActivityFromCache(workflowJobDefinition, out flag);
                if (activity != null)
                {
                    flag1 = false;
                    if (flag)
                    {
                        return(activity);
                    }
                }
                else
                {
                    throw new InvalidOperationException();
                }
            }
            if (instance.Configuration.EnableValidation)
            {
                if (!flag1 || DefinitionCache.Instance.AllowExternalActivity)
                {
                    PSWorkflowValidationResults pSWorkflowValidationResult = this.GetWorkflowValidator().ValidateWorkflow(definition.InstanceId, activity, DefinitionCache.Instance.GetRuntimeAssemblyName(workflowJobDefinition));
                    if (pSWorkflowValidationResult.Results != null)
                    {
                        this.GetWorkflowValidator().ProcessValidationResults(pSWorkflowValidationResult.Results);
                    }
                    isSuspendable = new bool?(pSWorkflowValidationResult.IsWorkflowSuspendable);
                    return(activity);
                }
                else
                {
                    if (Validation.CustomHandler != null)
                    {
                        if (!Validation.CustomHandler(activity))
                        {
                            string displayName = activity.DisplayName;
                            if (string.IsNullOrEmpty(displayName))
                            {
                                displayName = base.GetType().Name;
                            }
                            object[] objArray = new object[1];
                            objArray[0] = displayName;
                            string str = string.Format(CultureInfo.CurrentCulture, Resources.InvalidActivity, objArray);
                            throw new ValidationException(str);
                        }
                        else
                        {
                            return(activity);
                        }
                    }
                    else
                    {
                        throw new InvalidOperationException();
                    }
                }
            }
            else
            {
                return(activity);
            }
        }