コード例 #1
0
ファイル: WorkflowRuntime.cs プロジェクト: jiguixin/WF
        private void FillParameters(ProcessInstance instance, ExecutionResponseParametersComplete newParameters)
        {
            foreach (var parameter in newParameters.ParameterContainer)
            {
                var parameterDefinition = instance.ProcessScheme.GetNullableParameterDefinition(parameter.Name);
                if (parameterDefinition != null)
                {
                    var parameterDefinitionWithValue = ParameterDefinition.Create(parameterDefinition, parameter.Value);

                    instance.AddParameter(parameterDefinitionWithValue);
                }
            }
        }
コード例 #2
0
ファイル: WorkflowRuntime.cs プロジェクト: kanpinar/WFCore
 private List<ExecutionRequestParameters> FillExecutionRequestParameters(Guid processId, ProcessInstance processInstance, List<TransitionDefinition> transitions, WorkflowRuntime.PreExecutionContext preExecutionContext, List<TransitionDefinition> transitionsForAdditional = null)
 {
     List<ExecutionRequestParameters> executionRequestParameters = new List<ExecutionRequestParameters>();
     if (transitions == null || transitions.Count == 0)
     {
         return executionRequestParameters;
     }
     List<string> strs = new List<string>();
     List<string> strs1 = new List<string>();
     foreach (TransitionDefinition transition in transitions)
     {
         bool flag = false;
         ExecutionRequestParameters executionRequestParameter = ExecutionRequestParameters.Create(processInstance, transition, true);
         if (transition.Trigger.Type != TriggerType.Auto || transition.Restrictions.Any<RestrictionDefinition>())
         {
             preExecutionContext.TransitionForActors = transition;
             flag = true;
         }
         if (transition.To.HavePreExecutionImplementation && preExecutionContext.HaveTransitionForActors)
         {
             IEnumerable<string> actors = this.GetActors(processInstance, preExecutionContext.TransitionForActors);
             strs.AddRange(actors);
             if (flag)
             {
                 strs1.AddRange(actors);
             }
         }
         if (transition.Trigger.Type == TriggerType.Command)
         {
             processInstance.AddParameter(ParameterDefinition.Create(DefaultDefinitions.ParameterCurrentCommand, transition.Trigger.Command.Name));
         }
         executionRequestParameters.Add(executionRequestParameter);
     }
     if (transitionsForAdditional != null)
     {
         foreach (TransitionDefinition transitionDefinition in transitionsForAdditional)
         {
             if (!transitionDefinition.Restrictions.Any<RestrictionDefinition>())
             {
                 continue;
             }
             strs1.AddRange(this.GetActors(processInstance, transitionDefinition));
         }
     }
     processInstance.AddParameter(ParameterDefinition.Create(DefaultDefinitions.ParameterIdentityIds, strs));
     processInstance.AddParameter(ParameterDefinition.Create(DefaultDefinitions.ParameterIdentityIdsForCurrentActivity, strs1));
     return executionRequestParameters;
 }
コード例 #3
0
ファイル: WorkflowRuntime.cs プロジェクト: jiguixin/WF
        /// <summary>
        /// 执行流程起始节点出的初始化活动
        /// </summary>
        /// <param name="processInstance"></param>
        private void ExecuteRootActivity(ProcessInstance processInstance)
        {
            PersistenceProvider.FillProcessParameters(processInstance);
            processInstance.AddParameter(ParameterDefinition.Create(DefaultDefinitions.ParameterSchemeId, processInstance.SchemeId));

            //TODO Убрать после обработки команд
            try
            {
                Bus.QueueExecution(ExecutionRequestParameters.Create(processInstance.ProcessId,
                                                                processInstance.ProcessParameters,
                                                                processInstance.ProcessScheme.InitialActivity,
                                                                ConditionDefinition.Always));
            }
            catch (Exception ex)
            {
                Logger.Log.Error(string.Format("Error Execute Root Workflow Id={0}", processInstance.ProcessId),ex);
                SetProcessNewStatus(processInstance, ProcessStatus.Idled);
                throw;
            }
        }
コード例 #4
0
ファイル: WorkflowRuntime.cs プロジェクト: kanpinar/WFCore
 private void PreExecute(Guid processId, string fromActivityName, bool ignoreCurrentStateCheck, ProcessInstance processInstance)
 {
     this.PersistenceProvider.FillPersistedProcessParameters(processInstance);
     ActivityDefinition activityDefinition = processInstance.ProcessScheme.FindActivity(processInstance.CurrentActivityName);
     ActivityDefinition to = processInstance.ProcessScheme.FindActivity(fromActivityName);
     if (!ignoreCurrentStateCheck && activityDefinition.State != to.State)
     {
         return;
     }
     ActivityExecutor activityExecutor = new ActivityExecutor(this, true);
     processInstance.AddParameter(ParameterDefinition.Create(DefaultDefinitions.ParameterProcessId, processId));
     processInstance.AddParameter(ParameterDefinition.Create(DefaultDefinitions.ParameterSchemeId, processInstance.SchemeId));
     processInstance.AddParameter(ParameterDefinition.Create(DefaultDefinitions.ParameterIsPreExecution, true));
     WorkflowRuntime.PreExecutionContext preExecutionContext = new WorkflowRuntime.PreExecutionContext();
     do
     {
         if (!string.IsNullOrEmpty(to.State))
         {
             processInstance.AddParameter(ParameterDefinition.Create(DefaultDefinitions.ParameterCurrentState, to.State));
         }
         IEnumerable<TransitionDefinition> transitionDefinitions = processInstance.ProcessScheme.GetPossibleTransitionsForActivity(to, ForkTransitionSearchType.NotFork).Where<TransitionDefinition>((TransitionDefinition t) =>
         {
             if (t.Classifier != TransitionClassifier.Direct)
             {
                 return false;
             }
             return t.Trigger.Type != TriggerType.Timer;
         });
         to = null;
         List<TransitionDefinition> list = (
             from t in transitionDefinitions
             where t.Trigger.Type == TriggerType.Auto
             select t).ToList<TransitionDefinition>();
         List<TransitionDefinition> list1 = (
             from t in transitionDefinitions
             where t.Trigger.Type == TriggerType.Command
             select t).ToList<TransitionDefinition>();
         List<ExecutionRequestParameters> executionRequestParameters = this.FillExecutionRequestParameters(processId, processInstance, list, preExecutionContext, list1);
         if (executionRequestParameters.Count > 0)
         {
             ExecutionResponseParameters executionResponseParameter = activityExecutor.Execute(executionRequestParameters);
             if (!this.PreExecuteProcessResponse(executionResponseParameter))
             {
                 to = processInstance.ProcessScheme.FindTransition(executionResponseParameter.ExecutedTransitionName).To;
             }
         }
         if (to != null)
         {
             continue;
         }
         if (list1.Count<TransitionDefinition>((TransitionDefinition t) =>
         {
             if (!t.IsAlwaysTransition)
             {
                 return false;
             }
             return !t.Conditions.First<ConditionDefinition>().ResultOnPreExecution.HasValue;
         }) >= 2)
         {
             continue;
         }
         executionRequestParameters = this.FillExecutionRequestParameters(processId, processInstance, list1, preExecutionContext, null);
         if (executionRequestParameters.Count <= 0)
         {
             continue;
         }
         ExecutionResponseParameters executionResponseParameter1 = activityExecutor.Execute(executionRequestParameters);
         if (this.PreExecuteProcessResponse(executionResponseParameter1))
         {
             continue;
         }
         to = processInstance.ProcessScheme.FindTransition(executionResponseParameter1.ExecutedTransitionName).To;
     }
     while (to != null && !to.IsFinal);
 }