<?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>i:0#.w|Ali.Mazaheri  : Workflow</title><link>http://blogs.msdn.com/alimaz/archive/tags/Workflow/default.aspx</link><description>Tags: Workflow</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Patterns and practices for SharePoint is published on MSDN</title><link>http://blogs.msdn.com/alimaz/archive/2008/11/07/patterns-and-practices-for-sharepoint-is-published-on-msdn.aspx</link><pubDate>Fri, 07 Nov 2008 07:17:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9051477</guid><dc:creator>AMazaheri</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/alimaz/comments/9051477.aspx</comments><wfw:commentRss>http://blogs.msdn.com/alimaz/commentrss.aspx?PostID=9051477</wfw:commentRss><description>&lt;P&gt;This &lt;A class="" href="http://msdn.microsoft.com/en-us/library/dd203468.aspx" mce_href="http://msdn.microsoft.com/en-us/library/dd203468.aspx"&gt;guidance&lt;/A&gt; helps architects and developers design, build, test, deploy and upgrade SharePoint intranet applications. A reference implementation that is named the Contoso Training Management application demonstrates solutions to common architectural, development, and application lifecycle management challenges.&lt;/P&gt;
&lt;P&gt;This guidance discusses the following:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Architectural decisions about patterns, feature factoring, and packaging. 
&lt;LI&gt;Design tradeoffs for common decisions many developers encounter, such as when to use SharePoint lists or a database to store information. 
&lt;LI&gt;Implementation examples that are demonstrated in the Training Management application and in the QuickStarts. 
&lt;LI&gt;How to design for testability, create unit tests, and run continuous integration. 
&lt;LI&gt;How to set up different environments including the development, build, test, staging, and production environments. 
&lt;LI&gt;How to manage the application life cycle through development, test, deployment, and upgrading. 
&lt;LI&gt;Team-based intranet application development. &lt;/LI&gt;&lt;/UL&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9051477" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/alimaz/archive/tags/MOSS/default.aspx">MOSS</category><category domain="http://blogs.msdn.com/alimaz/archive/tags/Windows+SharePoint+Services/default.aspx">Windows SharePoint Services</category><category domain="http://blogs.msdn.com/alimaz/archive/tags/Workflow/default.aspx">Workflow</category><category domain="http://blogs.msdn.com/alimaz/archive/tags/Development+Tools/default.aspx">Development Tools</category></item><item><title>Using nested StateActivity to send regular reminders in Visual Studio SharePoint State Machine Workflow</title><link>http://blogs.msdn.com/alimaz/archive/2008/07/26/using-nested-stateactivity-to-send-regular-reminders-in-visual-studio-sharepoint-state-machine-workflow.aspx</link><pubDate>Sat, 26 Jul 2008 23:44:35 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8776553</guid><dc:creator>AMazaheri</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/alimaz/comments/8776553.aspx</comments><wfw:commentRss>http://blogs.msdn.com/alimaz/commentrss.aspx?PostID=8776553</wfw:commentRss><description>&lt;h3&gt;Note. I want to thank Daniel Odievich for providing the content of this post, a must read!&lt;/h3&gt;  &lt;p&gt;When developing SharePoint workflows, one often needs to send email notification for a task, and then keep sending regular reminders for this task at scheduled intervals. When developing workflows in SharePoint Designer, one can use DelayUntilActivity and DelayForActivity, but those were not designed for in Visual Studio workflows. &lt;/p&gt;  &lt;p&gt;When using State Machine workflows, the implementation for regular reminders is quite different than that in Sequential workflow. One can use put in EventDrivenActivity with DelayActivity but it will only execute once so you can only have one-time reminder, instead of regular reminders. If you try to wrap DelayActivity in a WhileActivity, the EventDrivenActivity won&amp;#8217;t compile because its first child must be IEventActivity (such as DelayActivity).&lt;/p&gt;  &lt;p&gt;Unlike with the Sequential workflow, ConditionedActivityGroupActivity cannot be used in State machine EventDrivenActivity. Also, one cannot write a loop around DelayActivity as it is supposed to be the first child of EventDrivenActivity.&lt;/p&gt;  &lt;p&gt;The approach that can be taken is to use WF ability to reenter the same StateActivity over and over and thus reset the workflow. It is suggested here &lt;a href="http://forums.microsoft.com/msdn/ShowPost.aspx?PostID=3553632&amp;amp;SiteID=1"&gt;http://forums.microsoft.com/msdn/ShowPost.aspx?PostID=3553632&amp;amp;SiteID=1&lt;/a&gt; but the following discussion adopts it for the SharePoint reality of task correlation tokens.&lt;/p&gt;  &lt;p&gt;One common way to use StateMachineActivity in SharePoint is to create a task in StateInitializationActivity, register for OnTaskChanged or OnItemChanged event using EventDrivenActivity and use EventDrivenActivity with DelayActivity to send reminders. When using State Machine and SharePoint tasks, you most likely expect to reenter this state over and over, creating more tasks of the same kind (one common scenario is multi-stage approval with ability to send back the approval to previous people for re-approval). If you expect to reenter this task, you must set the all-important correlation tokens for the task should be set to use the containing StateActivity as a parent. Following is the structure you might create:&lt;/p&gt;  &lt;p&gt;&amp;lt;StateActivity Name=&amp;#8220;MyCustomTaskState&amp;#8221;&amp;gt; &lt;/p&gt;  &lt;p&gt;&amp;lt;StateInitializationActivity&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;CreateTask CorrelationTokenParent=&amp;#8220;MyCustomTaskState&amp;#8221; /&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;SendEmail Type=&amp;#8220;Task Created&amp;#8221; /&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;/StateInitializationActivity&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;EventDrivenActivity Type=&amp;#8220;Task Changed&amp;#8221;&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;OnTaskChanged CorrelationTokenParent=&amp;#8220;MyCustomTaskState&amp;#8221; /&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;UpdateTask CorrelationTokenParent=&amp;#8220;MyCustomTaskState&amp;#8221; /&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;IfElseActivity&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;IfElseBranch Condition=&amp;#8221;Task Completed&amp;#8221;&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;SetStateActivity Target=&amp;#8220;OtherState&amp;#8221; /&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;IfElseBranch /&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;IfElseActivity /&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;/EventDrivenActivity&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;EventDrivenActivity Type=&amp;#8220;Item Changed&amp;#8221;&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;OnItemChanged /&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;IfElseActivity&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;IfElseBranch Condition=&amp;#8221;Task Completed&amp;#8221;&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;SetStateActivity Target=&amp;#8220;OtherState&amp;#8221; /&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;IfElseBranch /&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;IfElseActivity /&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;/EventDrivenActivity&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;EventDrivenActivity Type=&amp;#8220;Reminder&amp;#8221;&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;DelayActivity /&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;SendEmail Type=&amp;#8220;Reminder&amp;#8221; /&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;SetStateActivity Target=&amp;#8220;MyCustomTaskState&amp;#8221; /&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;/EventDrivenActivity&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;StateFinalizationActivity&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;CompleteTask CorrelationTokenParent=&amp;#8220;MyCustomTaskState&amp;#8221; /&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;SendEmail Type=&amp;#8220;Task Completed&amp;#8221; /&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;/StateFinalizationActivity&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;StateActivity /&amp;gt;&lt;/p&gt;  &lt;p&gt;If you run this code, you will notice the following sequence of events:&lt;/p&gt;  &lt;p&gt;1. &amp;lt;CreateTask CorrelationTokenParent=&amp;#8220;MyCustomTaskState&amp;#8221; /&amp;gt;&lt;/p&gt;  &lt;p&gt;2. &amp;lt;SendEmail Type=&amp;#8220;Task Created&amp;#8221; /&amp;gt;&lt;/p&gt;  &lt;p&gt;3. &amp;lt;OnTaskChanged CorrelationTokenParent=&amp;#8220;MyCustomTaskState&amp;#8221; /&amp;gt; - register&lt;/p&gt;  &lt;p&gt;4. &amp;lt;OnItemChanged /&amp;gt; - register&lt;/p&gt;  &lt;p&gt;5. &amp;lt;DelayActivity /&amp;gt; - sleep&lt;/p&gt;  &lt;p&gt;The workflow will then go to sleep and wait for either OnTaskChanged event, OnItemChanged event or for DelayActivity to elapse. &lt;/p&gt;  &lt;p&gt;If OnTaskChanged or OnItemChange event wakes up workflow before DelayActivity has ever elapsed, and the user action causes workflow to move to another state everything is going to run correctly. However, once DelayActivity elapses, it wakes up and the following sequence of events occurs:&lt;/p&gt;  &lt;p&gt;1. &amp;lt;DelayActivity /&amp;gt; - wake&lt;/p&gt;  &lt;p&gt;2. &amp;lt;SendEmail Type=&amp;#8220;Reminder&amp;#8221; /&amp;gt;&lt;/p&gt;  &lt;p&gt;3. &amp;lt;SetStateActivity Target=&amp;#8220;MyCustomTaskState&amp;#8221; /&amp;gt;&lt;/p&gt;  &lt;p&gt;4. &amp;lt;CompleteTask CorrelationTokenParent=&amp;#8220;MyCustomTaskState&amp;#8221; /&amp;gt;&lt;/p&gt;  &lt;p&gt;5. &amp;lt;SendEmail Type=&amp;#8220;Task Completed&amp;#8221; /&amp;gt;&lt;/p&gt;  &lt;p&gt;6. &amp;lt;OnTaskChanged CorrelationTokenParent=&amp;#8220;MyCustomTaskState&amp;#8221; /&amp;gt; - register&lt;/p&gt;  &lt;p&gt;7. &amp;lt;CreateTask CorrelationTokenParent=&amp;#8220;MyCustomTaskState&amp;#8221; /&amp;gt;&lt;/p&gt;  &lt;p&gt;8. &amp;lt;SendEmail Type=&amp;#8220;Task Created&amp;#8221; /&amp;gt;&lt;/p&gt;  &lt;p&gt;9. &amp;lt;OnTaskChanged CorrelationTokenParent=&amp;#8220;MyCustomTaskState&amp;#8221; /&amp;gt; - register&lt;/p&gt;  &lt;p&gt;10.&amp;lt;OnTaskChanged /&amp;gt; - register&lt;/p&gt;  &lt;p&gt;11.&amp;lt;DelayActivity /&amp;gt; - sleep&lt;/p&gt;  &lt;p&gt;As you can see, your task will be completed and immediately new task of the same type will be created and new notification emails will be sent. If you sent link to the original task in the emails, the URLs in the email are no longer valid. &lt;/p&gt;  &lt;p&gt;To avoid this, you might be tempted to wrap the activities in StateInitializationActivity and StateFinalizationActivity to avoid completing and recreating the task. If you do, you will discover that after reentering the state, OnTaskChanged events will no longer register correctly with exception indicating that correlation token for the task has not been initialized. This is because the correlation tokens use the StateActivity as a parent, and when it is reentered, they are reset, and you have orphaned your original task. There is no way to preserve those correlation tokens from one entry of StateActivity to another. A different approach is needed.&lt;/p&gt;  &lt;p&gt;The correct approach is to use ability of StateActivity to host another StateActivity and break up task creation, task completion and task events into three separate StateActivity entities, and set the correlation token to use the top-most parent StateActivity:&lt;/p&gt;  &lt;p&gt;&amp;lt;StateActivity Name=&amp;#8220;MyCustomTaskState&amp;#8221;&amp;gt; &lt;/p&gt;  &lt;p&gt;&amp;lt;StateActivity Name=&amp;#8220;CreateTaskState&amp;#8221;&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;StateInitializationActivity&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;CreateTask CorrelationTokenParent=&amp;#8220;MyCustomTaskState&amp;#8221; /&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;SendEmail Type=&amp;#8220;Task Created&amp;#8221; /&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;SetStateActivity Target=&amp;#8220;TaskEventsState&amp;#8221; /&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;/StateInitializationActivity&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;StateActivity /&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;StateActivity Name=&amp;#8220;TaskEventsState&amp;#8221;&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;EventDrivenActivity Type=&amp;#8220;Task Changed&amp;#8221;&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;OnTaskChanged CorrelationTokenParent=&amp;#8220;MyCustomTaskState&amp;#8221; /&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;UpdateTask CorrelationTokenParent=&amp;#8220;MyCustomTaskState&amp;#8221; /&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;IfElseActivity&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;IfElseBranch Condition=&amp;#8220;Task Completed&amp;#8221;&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;SetStateActivity Target=&amp;#8220;CompleteTaskState&amp;#8221; /&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;IfElseBranch /&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;IfElseActivity /&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;/EventDrivenActivity&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;EventDrivenActivity Type=&amp;#8220;Item Changed&amp;#8221;&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;OnItemChanged /&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;SetStateActivity Target=&amp;#8220;TaskEventsState&amp;#8221; /&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;IfElseActivity&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;IfElseBranch Condition=&amp;#8220;Task Completed&amp;#8221;&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;SetStateActivity Target=&amp;#8220;CompleteTaskState&amp;#8221; /&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;IfElseBranch /&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;IfElseActivity /&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;/EventDrivenActivity&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;EventDrivenActivity Type=&amp;#8220;Reminder&amp;#8221;&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;DelayActivity /&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;SendEmail Type=&amp;#8220;Reminder&amp;#8221; /&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;SetStateActivity Target=&amp;#8220;TaskEventsState&amp;#8221; /&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;/EventDrivenActivity&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;StateActivity /&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;StateActivity Name=&amp;#8220;CompleteTaskState&amp;#8221;&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;StateInitializationActivity&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;CompleteTask CorrelationTokenParent=&amp;#8220;MyCustomTaskState&amp;#8221; /&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;SendEmail Type=&amp;#8220;Task Completed&amp;#8221; /&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;IfElseActivity&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;IfElseBranch Condition=&amp;#8220;Task Completed&amp;#8221;&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;SetStateActivity Target=&amp;#8220;OtherState&amp;#8221; /&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;IfElseBranch /&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;IfElseActivity /&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;/StateInitializationActivity&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;StateActivity /&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;StateActivity /&amp;gt;&lt;/p&gt;  &lt;p&gt;If you run this code, you will notice the following sequence of events:&lt;/p&gt;  &lt;p&gt;1. &amp;lt;CreateTask CorrelationTokenParent=&amp;#8220;MyCustomTaskState&amp;#8221; /&amp;gt;&lt;/p&gt;  &lt;p&gt;2. &amp;lt;SendEmail Type=&amp;#8220;Task Created&amp;#8221; /&amp;gt;&lt;/p&gt;  &lt;p&gt;3. &amp;lt;SetStateActivity Target=&amp;#8220;TaskEventsState&amp;#8221; /&amp;gt;&lt;/p&gt;  &lt;p&gt;4. &amp;lt;OnTaskChanged CorrelationTokenParent=&amp;#8220;MyCustomTaskState&amp;#8221; /&amp;gt; - register&lt;/p&gt;  &lt;p&gt;5. &amp;lt;OnItemChanged /&amp;gt; - register&lt;/p&gt;  &lt;p&gt;6. &amp;lt;DelayActivity /&amp;gt; - sleep&lt;/p&gt;  &lt;p&gt;The workflow will then go to sleep and wait for either OnTaskChanged event, OnItemChanged event or for DelayActivity to elapse. Once DelayActivity elapses, following sequence of events occurs:&lt;/p&gt;  &lt;p&gt;1. &amp;lt;DelayActivity /&amp;gt; - wake&lt;/p&gt;  &lt;p&gt;2. &amp;lt;SendEmail Type=&amp;#8220;Reminder&amp;#8221; /&amp;gt;&lt;/p&gt;  &lt;p&gt;3. &amp;lt;SetStateActivity Target=&amp;#8220;MyCustomTaskState&amp;#8221; /&amp;gt;&lt;/p&gt;  &lt;p&gt;4. &amp;lt;OnTaskChanged CorrelationTokenParent=&amp;#8220;MyCustomTaskState&amp;#8221; /&amp;gt; - register&lt;/p&gt;  &lt;p&gt;5. &amp;lt;OnTaskChanged /&amp;gt; - register&lt;/p&gt;  &lt;p&gt;6. &amp;lt;DelayActivity /&amp;gt; - sleep&lt;/p&gt;  &lt;p&gt;Whenever the task change occurs that indicates that workflow is ready to move to another state, the following sequence of events occurs:&lt;/p&gt;  &lt;p&gt;1. &amp;lt;OnTaskChanged CorrelationTokenParent=&amp;#8220;MyCustomTaskState&amp;#8221; /&amp;gt; or &lt;/p&gt;  &lt;p&gt;2. &amp;lt;UpdateTask CorrelationTokenParent=&amp;#8220;MyCustomTaskState&amp;#8221; /&amp;gt;&lt;/p&gt;  &lt;p&gt;3. &amp;lt;IfElseActivity&amp;gt;&lt;/p&gt;  &lt;p&gt;4. &amp;lt;IfElseBranch Condition=&amp;#8220;Task Completed&amp;#8221;&amp;gt;&lt;/p&gt;  &lt;p&gt;5. &amp;lt;SetStateActivity Target=&amp;#8220;CompleteTaskState&amp;#8221; /&amp;gt;&lt;/p&gt;  &lt;p&gt;6. &amp;lt;CompleteTask CorrelationTokenParent=&amp;#8220;MyCustomTaskState&amp;#8221; /&amp;gt;&lt;/p&gt;  &lt;p&gt;7. &amp;lt;SendEmail Type=&amp;#8220;Task Completed&amp;#8221; /&amp;gt;&lt;/p&gt;  &lt;p&gt;8. &amp;lt;IfElseActivity&amp;gt;&lt;/p&gt;  &lt;p&gt;9. &amp;lt;IfElseBranch Condition=&amp;#8220;Task Completed&amp;#8221;&amp;gt;&lt;/p&gt;  &lt;p&gt;10.&amp;lt;SetStateActivity Target=&amp;#8220;OtherState&amp;#8221; /&amp;gt;&lt;/p&gt;  &lt;p&gt;Whenever the item change occurs that indicates that workflow is ready to move to another state, the following sequence of events occurs:&lt;/p&gt;  &lt;p&gt;1. &amp;lt;OnItemChanged /&amp;gt;&lt;/p&gt;  &lt;p&gt;2. &amp;lt;SetStateActivity Target=&amp;#8220;TaskEventsState&amp;#8221; /&amp;gt;&lt;/p&gt;  &lt;p&gt;3. &amp;lt;IfElseActivity&amp;gt;&lt;/p&gt;  &lt;p&gt;4. &amp;lt;IfElseBranch Condition=&amp;#8220;Task Completed&amp;#8221;&amp;gt;&lt;/p&gt;  &lt;p&gt;5. &amp;lt;SetStateActivity Target=&amp;#8220;CompleteTaskState&amp;#8221; /&amp;gt;&lt;/p&gt;  &lt;p&gt;6. &amp;lt;CompleteTask CorrelationTokenParent=&amp;#8220;MyCustomTaskState&amp;#8221; /&amp;gt;&lt;/p&gt;  &lt;p&gt;7. &amp;lt;SendEmail Type=&amp;#8220;Task Completed&amp;#8221; /&amp;gt;&lt;/p&gt;  &lt;p&gt;8. &amp;lt;IfElseActivity&amp;gt;&lt;/p&gt;  &lt;p&gt;9. &amp;lt;IfElseBranch Condition=&amp;#8220;Task Completed&amp;#8221;&amp;gt;&lt;/p&gt;  &lt;p&gt;10.&amp;lt;SetStateActivity Target=&amp;#8220;OtherState&amp;#8221; /&amp;gt;&lt;/p&gt;  &lt;p&gt;The workflow designer outline of this is shown below:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/alimaz/WindowsLiveWriter/UsingnestedStateActivitytosendregularrem_C11C/clip_image002_2.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="244" alt="clip_image002" src="http://blogs.msdn.com/blogfiles/alimaz/WindowsLiveWriter/UsingnestedStateActivitytosendregularrem_C11C/clip_image002_thumb.jpg" width="155" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;Overall view of the parent state&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;&lt;a href="http://blogs.msdn.com/blogfiles/alimaz/WindowsLiveWriter/UsingnestedStateActivitytosendregularrem_C11C/clip_image004_2.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="244" alt="clip_image004" src="http://blogs.msdn.com/blogfiles/alimaz/WindowsLiveWriter/UsingnestedStateActivitytosendregularrem_C11C/clip_image004_thumb.jpg" width="178" border="0" /&gt;&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;Overall hierarchy of all activities&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/alimaz/WindowsLiveWriter/UsingnestedStateActivitytosendregularrem_C11C/clip_image006_2.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="244" alt="clip_image006" src="http://blogs.msdn.com/blogfiles/alimaz/WindowsLiveWriter/UsingnestedStateActivitytosendregularrem_C11C/clip_image006_thumb.jpg" width="147" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;CreateTaskState with creation of the task and events&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;&lt;a href="http://blogs.msdn.com/blogfiles/alimaz/WindowsLiveWriter/UsingnestedStateActivitytosendregularrem_C11C/clip_image008_2.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="240" alt="clip_image008" src="http://blogs.msdn.com/blogfiles/alimaz/WindowsLiveWriter/UsingnestedStateActivitytosendregularrem_C11C/clip_image008_thumb.jpg" width="244" border="0" /&gt;&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;Properties window of CreateTask activity with correlation token pointing to parent state of all three activities&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/alimaz/WindowsLiveWriter/UsingnestedStateActivitytosendregularrem_C11C/clip_image010_2.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="244" alt="clip_image010" src="http://blogs.msdn.com/blogfiles/alimaz/WindowsLiveWriter/UsingnestedStateActivitytosendregularrem_C11C/clip_image010_thumb.jpg" width="118" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;EventDrivenActivity for OnTaskChanged event &lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/alimaz/WindowsLiveWriter/UsingnestedStateActivitytosendregularrem_C11C/clip_image012_2.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="244" alt="clip_image012" src="http://blogs.msdn.com/blogfiles/alimaz/WindowsLiveWriter/UsingnestedStateActivitytosendregularrem_C11C/clip_image012_thumb.jpg" width="128" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;EventDrivenActivity for OnItemChanged event&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/alimaz/WindowsLiveWriter/UsingnestedStateActivitytosendregularrem_C11C/clip_image014_2.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="244" alt="clip_image014" src="http://blogs.msdn.com/blogfiles/alimaz/WindowsLiveWriter/UsingnestedStateActivitytosendregularrem_C11C/clip_image014_thumb.jpg" width="148" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;EventDrivenActivity for DelayActivity and reminder email&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;&lt;a href="http://blogs.msdn.com/blogfiles/alimaz/WindowsLiveWriter/UsingnestedStateActivitytosendregularrem_C11C/clip_image016_2.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="244" alt="clip_image016" src="http://blogs.msdn.com/blogfiles/alimaz/WindowsLiveWriter/UsingnestedStateActivitytosendregularrem_C11C/clip_image016_thumb.jpg" width="181" border="0" /&gt;&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;CompleteTaskState and transition to another state&lt;/i&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8776553" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/alimaz/archive/tags/Windows+SharePoint+Services/default.aspx">Windows SharePoint Services</category><category domain="http://blogs.msdn.com/alimaz/archive/tags/Workflow/default.aspx">Workflow</category></item><item><title>www.MSSharePointDeveloper.com launched!</title><link>http://blogs.msdn.com/alimaz/archive/2008/06/02/www-mssharepointdeveloper-com-launched.aspx</link><pubDate>Tue, 03 Jun 2008 00:52:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8570386</guid><dc:creator>AMazaheri</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/alimaz/comments/8570386.aspx</comments><wfw:commentRss>http://blogs.msdn.com/alimaz/commentrss.aspx?PostID=8570386</wfw:commentRss><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Calibri size=3&gt;This is just announced by Paul Andrew:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Calibri size=3&gt;&lt;BR&gt;To help drive adoption of SharePoint by Software Developers we have launched a campaign to .NET Developers at &lt;/FONT&gt;&lt;A href="http://mssharepointdeveloper.com/"&gt;&lt;FONT face=Calibri color=#0000ff size=3&gt;http://MSSharePointDeveloper.com&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri size=3&gt;. We’re doing advertising at TechEd Developers USA this week and on &lt;/FONT&gt;&lt;A href="http://www.asp.net/"&gt;&lt;FONT face=Calibri color=#0000ff size=3&gt;www.asp.net&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri size=3&gt;. The new material is designed to help .NET Developers to learn the top ten artifacts in SharePoint that are interesting to them. We’ve created a variety of materials with different learning styles to make getting started with these artifacts easy and it’s all based on the Visual Studio extensions for SharePoint – planned to release v1.2 for Visual Studio 2008 this week also (watch for their announce).&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Calibri size=3&gt;The Top Ten SharePoint Artifacts of interest to .NET Developers being promoted&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;Web Parts&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;Data Lists&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;Event Handlers&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;Workflows&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;Silverlight Web Parts&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;Page Navigation&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;Page Branding&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;Web Services&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;Content Types&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;User Management&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Calibri size=3&gt;At &lt;/FONT&gt;&lt;A href="http://mssharepointdeveloper.com/"&gt;&lt;FONT face=Calibri color=#0000ff size=3&gt;the site&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri size=3&gt; (which is hosted on microsoft.com) we have:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo2"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;An Introductory Whitepaper&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo2"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;Benefits of SharePoint for Developers&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo2"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;A Small Public VPC&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo2"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;Hosted MSDN Virtual Labs in C# and VB.NET&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo2"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;Video Interview with SharePoint MVPs&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo2"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;Screencasts&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo2"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;Web Casts with SharePoint MVPs (incredible 1705 live attendees in just the first four WebCasts)&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo2"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;Quickstarts&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo2"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;Labcasts&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo2"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;Presentation Download&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo2"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;Hands on Labs Download&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo2"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;Additional Resource Links&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT face=Calibri size=3&gt;The site encourages developers who use the content to also take a next step and go on Instructor Led Training, Get Certified, and Download an evaluation copy of Microsoft Office SharePoint Server.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;A href="http://mssharepointdeveloper.com/"&gt;&lt;FONT face=Calibri color=#0000ff size=3&gt;http://MSSharePointDeveloper.com&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri size=3&gt; &lt;/FONT&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8570386" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/alimaz/archive/tags/MOSS/default.aspx">MOSS</category><category domain="http://blogs.msdn.com/alimaz/archive/tags/Windows+SharePoint+Services/default.aspx">Windows SharePoint Services</category><category domain="http://blogs.msdn.com/alimaz/archive/tags/Workflow/default.aspx">Workflow</category></item><item><title>New whitepaper on Workflow and SharePoint</title><link>http://blogs.msdn.com/alimaz/archive/2008/05/02/new-whitepaper-on-workflow-and-sharepoint.aspx</link><pubDate>Sat, 03 May 2008 01:15:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8452350</guid><dc:creator>AMazaheri</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/alimaz/comments/8452350.aspx</comments><wfw:commentRss>http://blogs.msdn.com/alimaz/commentrss.aspx?PostID=8452350</wfw:commentRss><description>&lt;P&gt;A new whitepaper on Workflow titled "&lt;A class="" title="Developing Workflow Solutions with Microsoft Office SharePoint Server 2007 and Windows Workflow Foundation" href="http://msdn.microsoft.com/en-us/library/cc514224.aspx" mce_href="http://msdn.microsoft.com/en-us/library/cc514224.aspx"&gt;Developing Workflow Solutions with Microsoft Office SharePoint Server 2007 and Windows Workflow Foundation&lt;/A&gt;" by a good friend of mine Daniel Odievich&amp;nbsp;and truly yours is now&amp;nbsp;published (as of&amp;nbsp;05/23/08)&amp;nbsp;on MSDN.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Update:&lt;/STRONG&gt;&amp;nbsp;Whitepaper's sample projects (sequential and state machine)&amp;nbsp;source code should be accessible for&amp;nbsp;download soon.&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8452350" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/alimaz/archive/tags/MOSS/default.aspx">MOSS</category><category domain="http://blogs.msdn.com/alimaz/archive/tags/InfoPath/default.aspx">InfoPath</category><category domain="http://blogs.msdn.com/alimaz/archive/tags/Form+Services/default.aspx">Form Services</category><category domain="http://blogs.msdn.com/alimaz/archive/tags/Windows+SharePoint+Services/default.aspx">Windows SharePoint Services</category><category domain="http://blogs.msdn.com/alimaz/archive/tags/Workflow/default.aspx">Workflow</category></item><item><title>Setting Workflow Status to custom value</title><link>http://blogs.msdn.com/alimaz/archive/2008/02/08/setting-workflow-status-to-custom-value.aspx</link><pubDate>Fri, 08 Feb 2008 08:37:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7534703</guid><dc:creator>AMazaheri</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/alimaz/comments/7534703.aspx</comments><wfw:commentRss>http://blogs.msdn.com/alimaz/commentrss.aspx?PostID=7534703</wfw:commentRss><description>&lt;P&gt;To set&amp;nbsp;the Workflow status to a custom value add your custom Status values to workflow.xml under &amp;lt;MetaData&amp;gt;: &lt;/P&gt;
&lt;P&gt;&amp;lt;ExtendedStatusColumnValues&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;lt;StatusColumnValue&amp;gt;Rejected&amp;lt;/StatusColumnValue&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;lt;StatusColumnValue&amp;gt;Failed Verification&amp;lt;/StatusColumnValue&amp;gt;&lt;BR&gt;&amp;lt;/ExtendedStatusColumnValues&amp;gt;&lt;BR&gt;&lt;BR&gt;Using &lt;A class="" href="http://msdn2.microsoft.com/en-us/library/microsoft.sharepoint.workflowactions.setstate.aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/library/microsoft.sharepoint.workflowactions.setstate.aspx"&gt;SetState&lt;/A&gt; activity and &lt;A class="" href="http://msdn2.microsoft.com/en-us/library/microsoft.sharepoint.workflow.spworkflowstatus.aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/library/microsoft.sharepoint.workflow.spworkflowstatus.aspx"&gt;SPWorkflowStatus&lt;/A&gt; you can set the status programmatically as follows:&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;private void setState_MethodInvoking(object sender, EventArgs e)&lt;BR&gt;{&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!this.changeApproved)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Set workflow status to Rejected&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.workflowState = (int)SPWorkflowStatus.Max;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Set workflow status to Failed Verification&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.workflowState = (int)SPWorkflowStatus.Max + 1;&lt;BR&gt;}&lt;BR&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7534703" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/alimaz/archive/tags/MOSS/default.aspx">MOSS</category><category domain="http://blogs.msdn.com/alimaz/archive/tags/Windows+SharePoint+Services/default.aspx">Windows SharePoint Services</category><category domain="http://blogs.msdn.com/alimaz/archive/tags/Workflow/default.aspx">Workflow</category></item><item><title>Using Delay activity in WSS 3.0 custom Workflows (Lessons learned)</title><link>http://blogs.msdn.com/alimaz/archive/2008/02/08/using-delay-activity-in-wss-3-0-custom-workflows-lessons-learned.aspx</link><pubDate>Fri, 08 Feb 2008 07:12:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7534086</guid><dc:creator>AMazaheri</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/alimaz/comments/7534086.aspx</comments><wfw:commentRss>http://blogs.msdn.com/alimaz/commentrss.aspx?PostID=7534086</wfw:commentRss><description>&lt;P&gt;WF's &lt;A class="" href="http://msdn2.microsoft.com/en-us/library/system.workflow.activities.delayactivity.aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/library/system.workflow.activities.delayactivity.aspx"&gt;DelayActivity&lt;/A&gt; is best suited for scenarios such as sending &lt;A class="" href="http://blogs.msdn.com/alimaz/archive/2008/01/22/sending-a-reminder-in-a-sequential-workflow.aspx" mce_href="http://blogs.msdn.com/alimaz/archive/2008/01/22/sending-a-reminder-in-a-sequential-workflow.aspx"&gt;Reminders&lt;/A&gt; or if you want to force your WF to dehydrate for a batch update on Item's column(s), as you may know a .NET 3.0 &lt;A class="" href="http://support.microsoft.com/kb/932816" target=_blank mce_href="http://support.microsoft.com/kb/932816"&gt;hotfix&lt;/A&gt; or &lt;A class="" href="http://www.microsoft.com/downloads/details.aspx?familyid=ec2ca85d-b255-4425-9e65-1e88a0bdb72a&amp;amp;displaylang=en" target=_blank mce_href="http://www.microsoft.com/downloads/details.aspx?familyid=ec2ca85d-b255-4425-9e65-1e88a0bdb72a&amp;amp;displaylang=en"&gt;SP1&lt;/A&gt; needs to be installed so that the Delay activity works.&lt;/P&gt;
&lt;P&gt;Scenario:&lt;/P&gt;
&lt;P&gt;You use DelayActivity and set the&amp;nbsp;&lt;A class="" href="http://msdn2.microsoft.com/en-us/library/system.workflow.activities.delayactivity.timeoutdurationproperty.aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/library/system.workflow.activities.delayactivity.timeoutdurationproperty.aspx"&gt;TimeoutDuration&lt;/A&gt; property to 5 minutes, after running the WF you notice that the Delay activity still does not work. In WSS 3.0, Delay activity gets triggered by a timer job (Job-workflow) which by defeat runs every 15 minutes and that explains why your WF instance never wakes up by Delay activity. Fortunately you can modify the setting for this timer job as you do not want to wait for 15 minutes while debugging your code! In order to change the default setting you need to run the following command:&amp;nbsp;&lt;/P&gt;
&lt;P&gt;STSADM -O SetProperty -pn "Job-Workflow" -pv "Every 5 minutes between 0 and 59" -url [url of the Web application]&lt;/P&gt;
&lt;P&gt;Note.&lt;/P&gt;
&lt;P&gt;Make sure that you do not change this setting in Production environment as it may have some performance hit and use the above command only for debugging purposes in your Dev environment.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7534086" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/alimaz/archive/tags/MOSS/default.aspx">MOSS</category><category domain="http://blogs.msdn.com/alimaz/archive/tags/Windows+SharePoint+Services/default.aspx">Windows SharePoint Services</category><category domain="http://blogs.msdn.com/alimaz/archive/tags/Workflow/default.aspx">Workflow</category></item><item><title>How to get the name of the user changing a Task in a Custom workflow code</title><link>http://blogs.msdn.com/alimaz/archive/2008/01/27/how-to-get-the-name-of-the-user-changing-a-task-in-a-custom-workflow-code.aspx</link><pubDate>Mon, 28 Jan 2008 02:13:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7274528</guid><dc:creator>AMazaheri</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/alimaz/comments/7274528.aspx</comments><wfw:commentRss>http://blogs.msdn.com/alimaz/commentrss.aspx?PostID=7274528</wfw:commentRss><description>&lt;P&gt;I was asked by one of my colleagues on how to have access to the name of the user who is modifying a task programmatically within the Workflow code. Every time a task gets modified by a user (&lt;A class="" href="http://msdn2.microsoft.com/en-us/library/microsoft.sharepoint.workflow.spworkflowtaskproperties.assignedto.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/microsoft.sharepoint.workflow.spworkflowtaskproperties.assignedto.aspx"&gt;SPTaskProperties.AssignedTo&lt;/A&gt;) the &lt;A class="" href="http://msdn2.microsoft.com/en-us/library/ms473166.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms473166.aspx"&gt;OnTaskChanged&lt;/A&gt; activity populates the &lt;A class="" href="http://msdn2.microsoft.com/en-us/library/microsoft.sharepoint.workflowactions.ontaskchanged.executorproperty.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/microsoft.sharepoint.workflowactions.ontaskchanged.executorproperty.aspx"&gt;OnTaskChanged.ExecutorProperty&lt;/A&gt; and the name of the user can be&amp;nbsp;retrieved&amp;nbsp;by referencing this property.&lt;/P&gt;
&lt;P&gt;Note:&lt;BR&gt;&lt;EM&gt;&lt;A class="" href="http://msdn2.microsoft.com/en-us/library/microsoft.sharepoint.workflow.spworkflowactivationproperties.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/microsoft.sharepoint.workflow.spworkflowactivationproperties.aspx"&gt;SPWorkflowActivationProperties&lt;/A&gt;.Web.CurrentUser.Name&amp;nbsp;has "System Account" as value as by design all custom Workflow instances (Implemented by Visual Studio 2005/2008) run under that account.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;Next post: Setting Workflow related properties in MOSS/WSS 3.0 using stsadm.exe &lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7274528" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/alimaz/archive/tags/MOSS/default.aspx">MOSS</category><category domain="http://blogs.msdn.com/alimaz/archive/tags/Windows+SharePoint+Services/default.aspx">Windows SharePoint Services</category><category domain="http://blogs.msdn.com/alimaz/archive/tags/Workflow/default.aspx">Workflow</category></item></channel></rss>