<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Matt W's Windows Workflow Place : pageflow</title><link>http://blogs.msdn.com/mwinkle/archive/tags/pageflow/default.aspx</link><description>Tags: pageflow</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Pageflow Sample Update</title><link>http://blogs.msdn.com/mwinkle/archive/2007/06/27/pageflow-sample-update.aspx</link><pubDate>Thu, 28 Jun 2007 01:48:36 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3571197</guid><dc:creator>mwinkle</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/mwinkle/comments/3571197.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mwinkle/commentrss.aspx?PostID=3571197</wfw:commentRss><description>&lt;p&gt;Updated to version 1.1 &lt;/p&gt; &lt;h2&gt;Changes&lt;/h2&gt; &lt;ul&gt; &lt;li&gt;Corrected the install to display the EULA at a more opportune time (thanks to this &lt;a href="http://blogs.msdn.com/mwinkle/archive/2007/06/07/introducing-the-pageflow-sample.aspx#3167350"&gt;comment&lt;/a&gt;)  &lt;li&gt;Updated to fix the exception being thrown at the completion of a workflow  &lt;ul&gt; &lt;li&gt;NavigationManager.cs  &lt;li&gt;AspUserInput.cs  &lt;li&gt;WebHostingModule.cs&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;To install this, &lt;a href="http://go.microsoft.com/?linkid=6923851"&gt;download the bits&lt;/a&gt; (same location), uninstall the existing version and install this version.&lt;/p&gt; &lt;h2&gt;Other Setup Notes&lt;/h2&gt; &lt;p&gt;I got a few pieces of feedback on the setup to get things working, here are some hints to get up and running:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;If you extract the samples.zip file in the install directory (Program Files\Windows Workflow Foundation Samples\...) they may be marked as read-only.&amp;nbsp; Mark the whole directory as non-read-only (so you can write) and then you will be able to compile successfully.  &lt;li&gt;To run the sample, you need to &lt;a href="http://msdn2.microsoft.com/en-us/library/aa349366.aspx"&gt;set up a persistence database&lt;/a&gt;, this will be used to store the state of the workflow while we are not interacting with it  &lt;ul&gt; &lt;li&gt;Then go into the App.config or web.config and find the ConnectionString settings and update it to point to the correct database.&amp;nbsp; On most default VS installs, you can point at localhost\sqlexpress, but it can certainly be any sql install.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt; &lt;h2&gt;Other Notes&lt;/h2&gt; &lt;p&gt;For the folks using &lt;a href="http://www.codeplex.com/websf"&gt;WCSF&lt;/a&gt;, Glenn has a good &lt;a href="http://blogs.msdn.com/gblock/archive/2007/06/19/will-the-real-pageflow-please-stand-up.aspx"&gt;summary&lt;/a&gt; that fills in some of the story on the WCSF side, and sneaks an &lt;a href="http://en.wikipedia.org/wiki/Eminem"&gt;Eminem&lt;/a&gt; reference into the title :-) &lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3571197" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mwinkle/archive/tags/wf/default.aspx">wf</category><category domain="http://blogs.msdn.com/mwinkle/archive/tags/pageflow/default.aspx">pageflow</category></item><item><title>Pageflow questions:  "What about WCSF / Acropolis / Codename 'foo'"?</title><link>http://blogs.msdn.com/mwinkle/archive/2007/06/14/pageflow-questions-what-about-wcsf-acropolis-codename-foo.aspx</link><pubDate>Thu, 14 Jun 2007 23:34:02 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3297003</guid><dc:creator>mwinkle</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/mwinkle/comments/3297003.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mwinkle/commentrss.aspx?PostID=3297003</wfw:commentRss><description>&lt;p&gt;So, I got a little bit of &lt;a href="http://blogs.msdn.com/mwinkle/archive/2007/06/07/introducing-the-pageflow-sample.aspx#comments"&gt;feedback&lt;/a&gt; from my initial &lt;a href="http://blogs.msdn.com/mwinkle/archive/2007/06/07/introducing-the-pageflow-sample.aspx"&gt;post&lt;/a&gt;.&amp;nbsp; First, thanks,&amp;nbsp;it's great to see all of the interest in the technology.&amp;nbsp; I want to use this as the place to answer common questions that arise about the sample.&amp;nbsp; &lt;/p&gt; &lt;p&gt;Here's one that I got internally as well as externally(&lt;a href="http://davidhayden.com/blog/dave/archive/2007/06/11/ASPNETPageFlowUsingWindowsWorkflow.aspx"&gt;here&lt;/a&gt;, &lt;a href="http://weblogs.asp.net/paolopia/archive/2007/06/08/acropolis-cab-wpf-pageflow-what-should-i-suggest-to-use.aspx"&gt;here&lt;/a&gt; )&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;What about WCSF and Acropolis?&amp;nbsp; Does this change how we think about the problem today?&amp;nbsp; &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;The short answers are "they are still here", "no".&lt;/p&gt; &lt;h2&gt;WCSF&amp;nbsp;&lt;/h2&gt; &lt;p&gt;There are a lot of people who are using the &lt;a href="http://www.codeplex.com/websf"&gt;Web Client Software Factory&lt;/a&gt;.&amp;nbsp; It is definitely something you should check out, it is a great toolkit to build composite web applications.&amp;nbsp; Part of what it does, among many other things, is the Pageflow Application Block designed to model navigation.&amp;nbsp;&amp;nbsp; This is what most people are wondering about when they first hear about the pageflow sample we released.&amp;nbsp; Don't they do the same thing?&amp;nbsp; From a functional level, yes, they both provide a nice abstraction to model flow through an application.&amp;nbsp; This is a sample usage of WF to solve a similar problem in a little bit of a different way.&amp;nbsp; The model inside the WCSF is extensible, allowing a different provider of pageflow information, so it is probably even possible to put this pageflow sample inside of the WCSF, I have yet to give that a try.&lt;/p&gt; &lt;p&gt;At a deeper level, there are some differences that stem from the implementation of the Pageflow Application Block as a state machine, which I will get into in my next post.&lt;/p&gt; &lt;h2&gt;Acropolis&lt;/h2&gt; &lt;p&gt;&lt;a href="http://windowsclient.net/Acropolis/"&gt;Acropolis&lt;/a&gt;, announced at TechEd last week, is still early on in its lifecycle, as part of the ".NET Client Futures".&amp;nbsp; I haven't spent a lot of time looking at it yet, but it is something else which will have a way to model the flow within an application, in this case between WPF forms.&amp;nbsp; &lt;/p&gt; &lt;h2&gt;Conclusion&lt;/h2&gt; &lt;p&gt;From a support perspective, it's important to note that this sample is unsupported (save for myself and a few others) as opposed to Acropolis and WCSF which have teams working on them.&lt;/p&gt; &lt;p&gt;It is important to note that both WCSF and Acropolis aim to solve a much larger problem than simple UI navigation.&amp;nbsp; In that sense, in no way does the pageflow sample released represent a wholesale replacement of either of them.&amp;nbsp; The sample that we released aims to illustrate a way to use WF to solve the problem of UI navigation.&amp;nbsp; &lt;strong&gt;&lt;em&gt;The important thing to take away from this is that it can be incredibly valuable to model the flow through one's application using a technology which allows separation from the UI.&amp;nbsp; This makes our UI more loosely coupled with the rest of our application, and increases the agility to react to changes in process / data required / need to track infomation.&amp;nbsp; &lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Also, even if you don't want to use this for pageflow, tune in, because there are some pretty valuable things that any WF developer can learn by taking a look at this sample.&amp;nbsp; I will continue to discuss those as well.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3297003" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mwinkle/archive/tags/Workflow/default.aspx">Workflow</category><category domain="http://blogs.msdn.com/mwinkle/archive/tags/wf/default.aspx">wf</category><category domain="http://blogs.msdn.com/mwinkle/archive/tags/pageflow/default.aspx">pageflow</category></item><item><title>Pageflow Questions: Why not a state machine?</title><link>http://blogs.msdn.com/mwinkle/archive/2007/06/14/pageflow-questions-why-not-a-state-machine.aspx</link><pubDate>Thu, 14 Jun 2007 18:00:03 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3297400</guid><dc:creator>mwinkle</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/mwinkle/comments/3297400.aspx</comments><wfw:commentRss>http://blogs.msdn.com/mwinkle/commentrss.aspx?PostID=3297400</wfw:commentRss><description>&lt;p&gt;Here's a &lt;a href="http://blogs.msdn.com/mwinkle/archive/2007/06/07/introducing-the-pageflow-sample.aspx#3242462"&gt;comment&lt;/a&gt; from my initial post &lt;a href="http://blogs.msdn.com/mwinkle/archive/2007/06/07/introducing-the-pageflow-sample.aspx"&gt;introducing the pageflow sample&lt;/a&gt;&amp;nbsp;from wleong:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;NavigatorWorkflow looks like a state machine to me. &amp;nbsp;Why create a new workflow type? &lt;p&gt;Tuesday, June 12, 2007 3:44 AM by &lt;a href="http://blogs.msdn.com/wleong"&gt;wleong&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;This is a good question.&amp;nbsp; There a couple of reasons why we create our own workflow type:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;To more accurately model a process&lt;/li&gt; &lt;li&gt;Enable different execution semantics&lt;/li&gt; &lt;li&gt;Make development faster by focusing on the model, not the implementation details.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;For a little more background on the problem, see my previous post on "&lt;a href="http://blogs.msdn.com/mwinkle/archive/2007/05/24/different-execution-patterns-with-wf-or-going-beyond-sequential-and-state-machine.aspx"&gt;Different Execution Patterns for WF (or, Going beyond Sequential and State Machine)&lt;/a&gt;" that talks in a little more depth about the trouble one can encounter by only think about the two out of the box models.&lt;/p&gt; &lt;p&gt;For this problem, in particular, all of the reasons are relevant. &lt;/p&gt; &lt;h3&gt;Accurately modeling a process&lt;/h3&gt; &lt;p&gt;It is very natural to think of UI navigation as a series of places we can be, and a set of transitions from any one of those places to another.&amp;nbsp; That's what the navigator workflow models.&amp;nbsp; There is a subtle difference from a state machine that plays to point 3 here.&amp;nbsp; This model allows me to not worry about putting an IEventActivity at the top of a state, then making some decision and then setting a new state.&amp;nbsp; We abstract away from defining the events, that's taken care of for us.&amp;nbsp; This lets us model the process naturally.&amp;nbsp; In a state machine, one could argue that modeling pageflow with transitions has me place one event and then have an IfElse activity that lets me decide which state to transition to.&amp;nbsp; This adds mental overhead to the model, moving me much closer to the implementation details (again, point 3).&lt;/p&gt; &lt;h3&gt;Enable Different Execution Semantics&lt;/h3&gt; &lt;p&gt;This was the primary reason I wrote the original article, my customer was doing some very unnatural acts in order to model their process in a sequential workflow.&amp;nbsp; In the case of UI navigation, we have the ability to be in multiple interactions at the same time.&amp;nbsp;&amp;nbsp;The WF&amp;nbsp;state machine has the (very natural) restriction that we can only be in one state at a given time (although there are certainly other state machine models that do not have that restriction). The&amp;nbsp;pageflow sample allows you to be in multiple interactions at the same time, so think about filling out a&amp;nbsp;mortgage application, I can be in the midst of many minor sub processes that all roll up into&amp;nbsp;the larger application process, and I can jump from filling out my salary history to the details&amp;nbsp;of the property I am buying by simply clicking on a tab at the top of the page.&lt;/p&gt; &lt;h3&gt;Make development faster by focusing on the model, not the implementation details.&lt;/h3&gt; &lt;p&gt;If we decide to use a state machine, we are coupling our model to the implementation and execution details of the state machine, which will cause us to do things that we don't need to do for this application.&amp;nbsp; The WF state machine is generic, any state can receive &lt;em&gt;n&lt;/em&gt; different events and react to each on differently.&amp;nbsp; In pageflow, we know there is only one event, "GoForward" and then we have a set of rules to operate on that to determine where we transition to.&amp;nbsp; By spending the time to create our own root activity, we remove the burden of the implementation details from the workflow developer, allowing them to focus on the details of their process, not the configuration of a given activity.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3297400" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/mwinkle/archive/tags/Workflow/default.aspx">Workflow</category><category domain="http://blogs.msdn.com/mwinkle/archive/tags/wf/default.aspx">wf</category><category domain="http://blogs.msdn.com/mwinkle/archive/tags/pageflow/default.aspx">pageflow</category></item></channel></rss>