Ejemplo n.º 1
0
        public void SetActivityWithExecution(string identityId, string impersonatedIdentityId, IDictionary<string, object> parameters, ActivityDefinition activityToSet, ProcessInstance processInstance, bool doNotSetRunningStatus = false)
        {
            if (!doNotSetRunningStatus)
            {
                this.SetProcessNewStatus(processInstance, ProcessStatus.Running);
            }
            try
            {
                this.PersistenceProvider.FillSystemProcessParameters(processInstance);
                this.PersistenceProvider.FillPersistedProcessParameters(processInstance);
                foreach (KeyValuePair<string, object> parameter in parameters)
                {
                    processInstance.SetParameter<object>(parameter.Key, parameter.Value, ParameterPurpose.Temporary);
                }
                if (string.IsNullOrEmpty(processInstance.CurrentCommand))
                {
                    processInstance.CurrentCommand = DefaultDefinitions.CommandSetState.Name;
                }
                processInstance.IdentityId = identityId;
                processInstance.ImpersonatedIdentityId = impersonatedIdentityId;
            }
            catch (Exception exception)
            {
                if (!doNotSetRunningStatus)
                {
                    this.SetProcessNewStatus(processInstance, ProcessStatus.Idled);
                }
                throw;
            }
            try
            {
                processInstance.SetStartTransitionalProcessActivity();
                IWorkflowBus bus = this.Bus;
                List<ConditionDefinition> conditionDefinitions = new List<ConditionDefinition>()
				{
					ConditionDefinition.Always
				};
                bus.QueueExecution(ExecutionRequestParameters.Create(processInstance, activityToSet, conditionDefinitions));
            }
            catch (Exception exception2)
            {
                Exception exception1 = exception2;
                if (!doNotSetRunningStatus)
                {
                    this.SetProcessNewStatus(processInstance, ProcessStatus.Idled);
                }
                throw new Exception(string.Format("Workflow Id={0}", processInstance.ProcessId), exception1);
            }
        }
Ejemplo n.º 2
0
 private void InitCreatedProcess(string identityId, string impersonatedIdentityId, ProcessInstance processInstance, ProcessInstancesTree processInstancesTree = null)
 {
     this.PersistenceProvider.InitializeProcess(processInstance);
     this.SetProcessNewStatus(processInstance, ProcessStatus.Initialized);
     bool haveImplementation = processInstance.ProcessScheme.InitialActivity.HaveImplementation;
     List<TransitionDefinition> list = processInstance.ProcessScheme.GetAutoTransitionForActivity(processInstance.ProcessScheme.InitialActivity, ForkTransitionSearchType.NotFork).ToList<TransitionDefinition>();
     bool flag = list.Any<TransitionDefinition>();
     List<TransitionDefinition> transitionDefinitions = processInstance.ProcessScheme.GetAutoTransitionForActivity(processInstance.ProcessScheme.InitialActivity, ForkTransitionSearchType.Fork).ToList<TransitionDefinition>();
     bool flag1 = transitionDefinitions.Any<TransitionDefinition>();
     processInstance.CurrentActivityName = processInstance.ProcessScheme.InitialActivity.Name;
     processInstance.CurrentState = processInstance.ProcessScheme.InitialActivity.State;
     processInstance.IdentityId = identityId;
     processInstance.ImpersonatedIdentityId = impersonatedIdentityId;
     try
     {
         try
         {
             if (haveImplementation || flag || flag1)
             {
                 this.SetProcessNewStatus(processInstance, ProcessStatus.Running);
                 if (haveImplementation)
                 {
                     this.ExecuteRootActivity(processInstance);
                 }
                 if (flag1)
                 {
                     this.CreateSubprocesses(processInstance, transitionDefinitions, processInstancesTree);
                 }
                 if (!flag)
                 {
                     this.SetProcessNewStatus(processInstance, ProcessStatus.Idled);
                     if (this.TimerManager != null)
                     {
                         this.TimerManager.ClearAndRegisterTimers(processInstance);
                     }
                 }
                 else
                 {
                     processInstance.SetStartTransitionalProcessActivity();
                     List<ExecutionRequestParameters> executionRequestParameters = new List<ExecutionRequestParameters>();
                     executionRequestParameters.AddRange(
                         from at in list
                         select ExecutionRequestParameters.Create(processInstance, at));
                     this.Bus.QueueExecution(executionRequestParameters);
                 }
             }
             else
             {
                 this.SetProcessNewStatus(processInstance, ProcessStatus.Idled);
                 if (this.TimerManager != null)
                 {
                     this.TimerManager.ClearAndRegisterTimers(processInstance);
                 }
             }
         }
         catch (Exception exception1)
         {
             Exception exception = exception1;
             throw new Exception(string.Format("Create instace of process Id={0}", processInstance.ProcessId), exception);
         }
     }
     finally
     {
         this.SetProcessNewStatus(processInstance, ProcessStatus.Idled);
     }
 }