protected override void Initialize(IServiceProvider provider) { base.Initialize(provider); ActivityExecutionContext context = (ActivityExecutionContext)provider; StateActivity rootState = StateMachineHelpers.GetRootState(this); if (!StateMachineHelpers.IsStateMachine(rootState)) { throw new InvalidOperationException(SR.GetError_StateActivityMustBeContainedInAStateMachine()); } string initialStateName = StateMachineHelpers.GetInitialStateName(this); if (String.IsNullOrEmpty(initialStateName)) { throw new InvalidOperationException(SR.GetError_CannotExecuteStateMachineWithoutInitialState()); } // if (this.QualifiedName != initialStateName) { StateMachineSubscriptionManager.DisableStateWorkflowQueues(context, this); } }
private static void ValidateInitialState(StateActivity state, ValidationErrorCollection validationErrors) { string initialStateName = StateMachineHelpers.GetInitialStateName(state); if (string.IsNullOrEmpty(initialStateName)) { if (state.Activities.Count > 0) { validationErrors.Add(new ValidationError(SR.GetString("Error_PropertyNotSet", new object[] { "InitialStateName" }), 0x116, false, "InitialStateName")); } } else { StateActivity activity = StateMachineHelpers.FindStateByName(state, initialStateName); if (activity == null) { validationErrors.Add(new ValidationError(SR.GetError_InitialStateMustPointToAState(), 0x5f5, false, "InitialStateName")); } else { if (!StateMachineHelpers.IsLeafState(activity)) { validationErrors.Add(new ValidationError(SR.GetError_InitialStateMustPointToALeafNodeState(), 0x5f7, false, "InitialStateName")); } string completedStateName = StateMachineHelpers.GetCompletedStateName(state); if (initialStateName == completedStateName) { validationErrors.Add(new ValidationError(SR.GetError_InitialStateMustBeDifferentThanCompletedState(), 0x62c, false, "InitialStateName")); } } } }
private static void ValidateInitialState(StateActivity state, ValidationErrorCollection validationErrors) { string initialStateName = StateMachineHelpers.GetInitialStateName(state); if (String.IsNullOrEmpty(initialStateName)) { if (state.Activities.Count > 0) { // we only require an initial state if the state machine is // not empty validationErrors.Add(new ValidationError( SR.GetString(SR.Error_PropertyNotSet, StateMachineWorkflowActivity.InitialStateNamePropertyName), ErrorNumbers.Error_PropertyNotSet, false, StateMachineWorkflowActivity.InitialStateNamePropertyName)); } } else { StateActivity initialState = StateMachineHelpers.FindStateByName( state, initialStateName); if (initialState == null) { validationErrors.Add(new ValidationError( SR.GetError_InitialStateMustPointToAState(), ErrorNumbers.Error_InitialStateMustPointToAState, false, StateMachineWorkflowActivity.InitialStateNamePropertyName)); } else { if (!StateMachineHelpers.IsLeafState(initialState)) { validationErrors.Add(new ValidationError( SR.GetError_InitialStateMustPointToALeafNodeState(), ErrorNumbers.Error_InitialStateMustPointToALeafNodeState, false, StateMachineWorkflowActivity.InitialStateNamePropertyName)); } // InitialState cannot be the completed state string completedStateName = StateMachineHelpers.GetCompletedStateName(state); if (initialStateName == completedStateName) { validationErrors.Add(new ValidationError( SR.GetError_InitialStateMustBeDifferentThanCompletedState(), ErrorNumbers.Error_InitialStateMustBeDifferentThanCompletedState, false, StateMachineWorkflowActivity.InitialStateNamePropertyName)); } } } }
private void ExecuteRootState(ActivityExecutionContext context) { StateActivity state = (StateActivity)context.Activity; StateMachineExecutionState executionState = new StateMachineExecutionState(this.WorkflowInstanceId); executionState.SchedulerBusy = false; state.SetValue(StateActivity.StateMachineExecutionStateProperty, executionState); executionState.SubscriptionManager.CreateSetStateEventQueue(context); string initialStateName = StateMachineHelpers.GetInitialStateName(state); executionState.CalculateStateTransition(this, initialStateName); executionState.ProcessActions(context); }