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 states (On
Hold, Completed, Paid) and two transitions (from On
Hold to Completed triggered by the Complete
action,
from Completed to Paid triggered by the
OnCloseDocument
event). You will add these states and
transitions to the screen configuration in the extension of the
RSSVWorkOrderWorkflow
class.
RSSVWorkOrderWorkflow
class.To add the new workflow, do the following in the Configure method
of the RSSVWorkOrderWorkflow_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
UsrOrderType
field as shown in the following code..WithFlows(flows => flows .Add<OrderTypes.simple>(flow => flow ... )));
You specify the value for the workflow-identifying field as the type parameter of the Add method.
- Inside the lambda expression for the Add method, specify the
list of states of the new workflow as shown in the following
code.
.WithFlowStates(states => { states.Add<RSSVWorkOrderWorkflow.States.onHold>(flowState => { return flowState .IsInitial() .WithActions(actions => { actions.Add(g => g.Complete, a => a .IsDuplicatedInToolbar() .WithConnotation(ActionConnotation.Success)); }); }); states.Add<RSSVWorkOrderWorkflow.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<RSSVWorkOrderWorkflow.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 add three states:
OnHold
,Completed
, andPaid
. For theOnHold
state, you specify that the Complete action should be available in this state. For theCompleted
state, you specify which fields should be disabled and that theCreateInvoice
action and theOnCloseDocument
event handler should be available in this state. For thePaid
state, you specify which fields should be disabled. - After the call of the WithFlowStates method, define the
transitions using the WithTransitions method as the following
code
shows.
.WithTransitions(transitions => { transitions.AddGroupFrom<RSSVWorkOrderWorkflow.States.onHold>(ts => { ts.Add(t => t.To<RSSVWorkOrderWorkflow.States.completed>() .IsTriggeredOn(g =>g.Complete)); }); transitions.AddGroupFrom<RSSVWorkOrderWorkflow.States.completed>(ts => { ts.Add(t => t.To<RSSVWorkOrderWorkflow.States.paid>() .IsTriggeredOn(g =>g.OnCloseDocument)); }); })
- Build your project.