Step 3: Adding a Workflow for the Specific Value of the Workflow-Identifying Field
In this step, you will add a workflow for the Simple value of the
Order Type box. This workflow has three workflow states
(which are OnHold, Completed, and
Paid) and the following transitions:
- From the
OnHoldtoCompletedworkflow state, which is triggered by theCompleteaction - From the
CompletedtoPaidworkflow state, which is triggered by theOnCloseDocumentevent
You will add these workflow states and transitions to the screen configuration in the
extension of the RSSVWorkOrderEntry_Workflow class.
RSSVWorkOrderEntry_Workflow class.To add the new workflow, do the following in the static Configure
method of the RSSVWorkOrderEntry_Workflow_Extension class:
- In the lambda expression for the UpdateScreenConfigurationFor
method, after calling the FlowTypeIdentifierIs method, call
the WithFlows method and add a workflow for the Simple
value of the
UsrOrderTypefield as shown in the following code..WithFlows(flows => flows .Add<OrderTypes.simple>(flow => getSimpleBehavior(flow)))You have specified the value for the workflow-identifying field as the type parameter of the Add method.
- Add the private static
getSimpleBehaviormethod, and specify the list of states of the new workflow as shown in the following code.private static Workflow.IConfigured getSimpleBehavior( Workflow.INeedStatesFlow flowState) { return flowState .WithFlowStates(states => { states.Add<RSSVWorkOrderEntry_Workflow.States.onHold>(flowState => { return flowState .IsInitial() .WithActions(actions => { actions.Add(g => g.Complete, a => a .IsDuplicatedInToolbar() .WithConnotation(ActionConnotation.Success)); }); }); states.Add<RSSVWorkOrderEntry_Workflow.States.completed>(flowState => { return flowState .WithFieldStates(fieldstates => { fieldstates.AddField<RSSVWorkOrder.customerID>(state => state.IsDisabled()); fieldstates.AddField<RSSVWorkOrder.serviceID>(state => state.IsDisabled()); fieldstates.AddField<RSSVWorkOrder.deviceID>(state => state.IsDisabled()); }) .WithActions(actions => { actions.Add(g => g.CreateInvoiceAction, a => a .IsDuplicatedInToolbar() .WithConnotation(ActionConnotation.Success)); }) .WithEventHandlers(handlers => { handlers.Add(g => g.OnCloseDocument); }); }); states.Add<RSSVWorkOrderEntry_Workflow.States.paid>(flowState => { return flowState .WithFieldStates(fieldstates => { fieldstates.AddField<RSSVWorkOrder.customerID>(state => state.IsDisabled()); fieldstates.AddField<RSSVWorkOrder.serviceID>(state => state.IsDisabled()); fieldstates.AddField<RSSVWorkOrder.deviceID>(state => state.IsDisabled()); }); }); }); }In the code above, you have added the following workflow states:
OnHold: You have specified that the Complete action should be available in this workflow state.Completed: You have specified which fields should be unavailable in this worklfow state. You have also specified that theCreateInvoiceaction and theOnCloseDocumentworkflow event handler should be available in this workflow state.Paid: You have specified which fields should be unavailable.
- In the private static
getSimpleBehaviormethod, after the call of the WithFlowStates method, define the transitions by using the WithTransitions method as the following code shows..WithTransitions(transitions => { transitions.AddGroupFrom<RSSVWorkOrderEntry_Workflow.States.onHold>( transitionGroup => { transitionGroup.Add(transition => transition .To<RSSVWorkOrderEntry_Workflow.States.completed>() .IsTriggeredOn(graph => graph.Complete)); }); transitions.AddGroupFrom< RSSVWorkOrderEntry_Workflow.States.completed>( transitionGroup => { transitionGroup.Add(transition => transition .To<RSSVWorkOrderEntry_Workflow.States.paid>() .IsTriggeredOn(graph => graph.OnCloseDocument)); }); }); - Build your project.
