Several weeks ago, Matthew Winkler posted about a new sample of how to implement Page Navigation using Windows Workflow Foundation. Upon hearing this several users of WCSF were baffled wondering how this differs from the PageFlow functionality that ships as part of the factory. To clear up the confusion, Matt's gone and created a series of posts explaining the differences. Below is a summary of the points Matt raised, as well as the functionality that the Pageflow app block provides that the sample does not.
- The sample does not use a state machine, and uses a new workflow type called a NavigatorWorkflow.
- NavigatorWorkflow is designed to more accurately model a UI process. Instead of having to manually overlay event activities to handle different transitions and use else/if activities for more complicated scenarios, the new type includes a notion of 1 to n transitions each which can have different rules associated with them.
- Supports multiple UI interactions at the same time. In a state machine you can only be in one state at any one point in time. Another words in MVP parlance you can have several views each at different points within the same flow.
- PageFlow app block supports multiple providers and ships with a default workflow implementation. The sample is built in and bound to WF.
- PageFlow app block supports the ability to specify how to handle / block if the user tries to jump to a different page within the site once they are in the flow. The NavigatorWorkflow does not enforce this. PageFlow does this through use of a custom HTTP Handler.
- PageFlow app block associates the flow with the user. Even if the user logs out, the flow can automatically resume when they log back in.
- PageFlow app block adds a persistable state bag for passing data in and out of the Flow.
- The sample is essentially unsupported whereas PageFlow is supported by p&p.
Aside from the fact that this sounds like some cool stuff, this begs the next question I am going to ask. Is this kind of functionality something that you think we should be looking at for Web Client?