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