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); }
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); } }