/// <summary> /// Provides states where the first one is an initial state and has a transition to the second one. /// The states may reused and won't be deleted. /// </summary> /// <returns></returns> public List <State> GetStandardStates() { IClient commerceToolsClient = this.GetService <IClient>(); var standardStates = new List <State>(); string initialStateKey = "Initial";//given from the platform string nextStateKey = "NextState"; var initialState = this.CreateStateIfNotExists(initialStateKey, StateType.LineItemState); var nextState = this.CreateStateIfNotExists(nextStateKey, StateType.LineItemState, false); if (initialState.Transitions == null || initialState.Transitions.Count == 0) { var transitionTo = new ResourceIdentifier <State> { Key = nextStateKey }; var setTransitions = new SetTransitionsUpdateAction { Transitions = new List <IReference <State> > { transitionTo } }; var updateActions = new List <UpdateAction <State> > { setTransitions }; initialState = commerceToolsClient .ExecuteAsync(new UpdateByIdCommand <State>(initialState.Id, initialState.Version, updateActions)) .Result; } standardStates.Add(initialState); standardStates.Add(nextState); return(standardStates); }
/// <summary> /// Provides states where the first one is an initial state and has a transition to the second one. /// The states may reused and won't be deleted. /// </summary> /// <returns></returns> public static List <State> GetStandardStates(IClient client) { var standardStates = new List <State>(); var initialState = CreateOrRetrieveByKey <State, StateDraft>(client, InitialStateKey, new StateDraft(), draft => { var stateDraft = DefaultStateDraftWithType(draft, StateType.LineItemState); stateDraft.Key = InitialStateKey; stateDraft.Initial = true; stateDraft.Name = new LocalizedString() { { "en", InitialStateKey } }; return(stateDraft); }); var nextState = CreateOrRetrieveByKey <State, StateDraft>(client, NextStateKey, new StateDraft(), draft => { var stateDraft = DefaultStateDraftWithType(draft, StateType.LineItemState); stateDraft.Initial = false; stateDraft.Key = NextStateKey; stateDraft.Name = new LocalizedString() { { "en", NextStateKey } }; return(stateDraft); }); if (initialState.Transitions == null || initialState.Transitions.Count == 0) { var transitionTo = new ResourceIdentifier <State> { Key = NextStateKey }; var setTransitions = new SetTransitionsUpdateAction { Transitions = new List <IReference <State> > { transitionTo } }; var updateActions = new List <UpdateAction <State> > { setTransitions }; initialState = client .ExecuteAsync(new UpdateByIdCommand <State>(initialState.Id, initialState.Version, updateActions)) .Result; } standardStates.Add(initialState); standardStates.Add(nextState); return(standardStates); }
public async Task UpdateStateSetTransitions() { await WithState(client, draft => { var randomInt = TestingUtility.RandomInt(); var stateDraft = DefaultStateDraft(draft); stateDraft.Name = new LocalizedString() { { "en", $"Shipped_{randomInt}" } }; stateDraft.Initial = false; stateDraft.Type = StateType.OrderState; return(stateDraft); }, async shippedState => { await WithUpdateableState(client, initialStateDraft => DefaultStateDraftWithType(initialStateDraft, StateType.OrderState), async initialState => { Assert.Null(initialState.Transitions); var transitionTo = shippedState.ToKeyResourceIdentifier(); var action = new SetTransitionsUpdateAction { Transitions = new List <IReference <State> > { transitionTo } }; var updatedInitialState = await client .ExecuteAsync(initialState.UpdateByKey(actions => actions.AddUpdate(action))); Assert.NotNull(updatedInitialState.Transitions); Assert.Equal(shippedState.Id, updatedInitialState.Transitions[0].Id); return(updatedInitialState); }); }); }