<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>.Net Stuff</title><link>http://weblog.vb-tech.com/nick/category/5.aspx</link><description>Postings to do with VS.NET</description><managingEditor>Nick</managingEditor><dc:language>en-US</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>Nick</dc:creator><title>If you are reading this...</title><link>http://weblog.vb-tech.com/nick/archive/2007/03/20/2283.aspx</link><pubDate>Tue, 20 Mar 2007 21:47:00 GMT</pubDate><guid>http://weblog.vb-tech.com/nick/archive/2007/03/20/2283.aspx</guid><wfw:comment>http://weblog.vb-tech.com/nick/comments/2283.aspx</wfw:comment><comments>http://weblog.vb-tech.com/nick/archive/2007/03/20/2283.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://weblog.vb-tech.com/nick/comments/commentRss/2283.aspx</wfw:commentRss><trackback:ping>http://weblog.vb-tech.com/nick/services/trackbacks/2283.aspx</trackback:ping><description>&lt;P&gt;Then you are missing out on content on my new blog!&lt;/P&gt;
&lt;P&gt;The new blog url is:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://sharepointnick.com/blog/default.aspx"&gt;http://sharepointnick.com/blog/default.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;And the new RSS feed you need to subscribe to is:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://feeds.feedburner.com/sharepointnick"&gt;http://feeds.feedburner.com/sharepointnick&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;See you on the other side!&lt;/P&gt;&lt;img src ="http://weblog.vb-tech.com/nick/aggbug/2283.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Nick</dc:creator><title>SharePointNick.com wiki</title><link>http://weblog.vb-tech.com/nick/archive/2007/03/11/2259.aspx</link><pubDate>Sun, 11 Mar 2007 12:36:00 GMT</pubDate><guid>http://weblog.vb-tech.com/nick/archive/2007/03/11/2259.aspx</guid><wfw:comment>http://weblog.vb-tech.com/nick/comments/2259.aspx</wfw:comment><comments>http://weblog.vb-tech.com/nick/archive/2007/03/11/2259.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://weblog.vb-tech.com/nick/comments/commentRss/2259.aspx</wfw:commentRss><trackback:ping>http://weblog.vb-tech.com/nick/services/trackbacks/2259.aspx</trackback:ping><description>&lt;p&gt;One of the reason I wanted to run my new blog/site on WSS 3.0 was so I could create a wiki site. I'm always reading great blog posts and 'how-to' articles, and even though I link to some of them here, I often struggle to find them just when I need to. So the aim of the &lt;a href="http://sharepointnick.com/wiki/Wiki%20Pages/Home.aspx"&gt;SharePointNick.com wiki&lt;/a&gt; is for me to bookmark and categorize articles/tools/blog posts, that I find interesting, I want my colleagues to know about at Sword UK, and if they help you as well, then great! Here's the link:&lt;/p&gt; &lt;p&gt;&lt;a title="http://sharepointnick.com/wiki/Wiki%20Pages/Home.aspx" href="http://sharepointnick.com/wiki/Wiki%20Pages/Home.aspx"&gt;http://sharepointnick.com/wiki/Wiki%20Pages/Home.aspx&lt;/a&gt;&lt;/p&gt;&lt;img src ="http://weblog.vb-tech.com/nick/aggbug/2259.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Nick</dc:creator><title>SharePointNick.com</title><link>http://weblog.vb-tech.com/nick/archive/2007/03/09/2253.aspx</link><pubDate>Fri, 09 Mar 2007 20:55:00 GMT</pubDate><guid>http://weblog.vb-tech.com/nick/archive/2007/03/09/2253.aspx</guid><wfw:comment>http://weblog.vb-tech.com/nick/comments/2253.aspx</wfw:comment><comments>http://weblog.vb-tech.com/nick/archive/2007/03/09/2253.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://weblog.vb-tech.com/nick/comments/commentRss/2253.aspx</wfw:commentRss><trackback:ping>http://weblog.vb-tech.com/nick/services/trackbacks/2253.aspx</trackback:ping><description>&lt;p&gt;&lt;a href="http://www.sharepointnick.com"&gt;www.sharepointnick.com&lt;/a&gt;&lt;/p&gt; &lt;p&gt;This will be the new site very soon!&lt;/p&gt; &lt;p&gt;Make sure you are using the feedburner RSS feed and the move will be painless for you! Here it is:&lt;/p&gt; &lt;p&gt;&lt;a title="http://feeds.feedburner.com/Vb-techWeblog" href="http://feeds.feedburner.com/Vb-techWeblog"&gt;http://feeds.feedburner.com/Vb-techWeblog&lt;/a&gt;&lt;/p&gt; &lt;p&gt;There's some 600 people that aren't using this so you better all update it now!&lt;/p&gt;&lt;img src ="http://weblog.vb-tech.com/nick/aggbug/2253.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Nick</dc:creator><title>Multiple SharePoint 2007 sites running off Forms Authentication</title><link>http://weblog.vb-tech.com/nick/archive/2007/03/09/2251.aspx</link><pubDate>Fri, 09 Mar 2007 11:03:00 GMT</pubDate><guid>http://weblog.vb-tech.com/nick/archive/2007/03/09/2251.aspx</guid><wfw:comment>http://weblog.vb-tech.com/nick/comments/2251.aspx</wfw:comment><comments>http://weblog.vb-tech.com/nick/archive/2007/03/09/2251.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://weblog.vb-tech.com/nick/comments/commentRss/2251.aspx</wfw:commentRss><trackback:ping>http://weblog.vb-tech.com/nick/services/trackbacks/2251.aspx</trackback:ping><description>&lt;P&gt;Whether this was possible had me puzzled for a little while. &lt;/P&gt;
&lt;P&gt;The scenario is, you want to run two WSS 3.0 (or MOSS 2007) sites of Forms Authentication, but they have different set of users and roles each. This could be typical in a hosted environment I guess.&lt;/P&gt;
&lt;P&gt;The seperate WSS 3.0 sites and web applications themselves weren't a problem because you can put seperate connection strings, roles, and aspnetdb application names in each web.config. It was how to get Central Administration to recognise 2 seperate FBA applications so you could set the site collection administrators. I've already done plenty of FBA stuff with ASP.NET so thankfully this isn't new to me like it might be many SP administrators. Here's the stuff you need to put in central admin to get it working.&lt;/P&gt;&lt;CONNECTIONSTRINGS&gt;
&lt;P&gt;&amp;lt;connectionStrings&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;add name="FBA1ConnString"&amp;nbsp;connectionString="server=NickServer;database=AspNetDB;uid=sa;pwd=*****;" providerName="System.Data.SqlClient" /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;add name="FBA2ConnString" connectionString="server=NickServer;database=AspNetDB;uid=sa;pwd=*****;" providerName="System.Data.SqlClient" /&amp;gt; &lt;BR&gt;&amp;lt;/connectionStrings&amp;gt;&lt;/P&gt;
&lt;P&gt;Having just looked at this, if you were more clever than me you could in effect just have one connection string as we're looking at the same aspnetdb&lt;/P&gt;
&lt;P&gt;&amp;lt;membership defaultProvider="FBA1AspNetSqlMembershipProvider"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;providers&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;add name="FBA1AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; connectionStringName="FBA1ConnString"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; enablePasswordRetrieval="false"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; enablePasswordReset="true"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; requiresQuestionAndAnswer="false"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; applicationName="FBA1"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; requiresUniqueEmail="false"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; passwordFormat="Hashed"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; maxInvalidPasswordAttempts="5"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; minRequiredPasswordLength="1"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; minRequiredNonalphanumericCharacters="0"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; passwordAttemptWindow="10"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; passwordStrengthRegularExpression=""&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /&amp;gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;add name="FBA2AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; connectionStringName="FBA2ConnString"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; enablePasswordRetrieval="false"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; enablePasswordReset="true"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; requiresQuestionAndAnswer="false"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; applicationName="FBA2"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; requiresUniqueEmail="false"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; passwordFormat="Hashed"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; maxInvalidPasswordAttempts="5"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; minRequiredPasswordLength="1"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; minRequiredNonalphanumericCharacters="0"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; passwordAttemptWindow="10"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; passwordStrengthRegularExpression=""&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /&amp;gt; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/providers&amp;gt; 
&lt;P&gt;&amp;lt;/membership&amp;gt; 
&lt;P&gt;&amp;lt;!-- role provider --&amp;gt;&lt;BR&gt;&amp;lt;roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;providers&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;add name="FBA1AspNetSqlRoleProvider" &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; connectionStringName="FBA1ConnString" &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; applicationName="/" &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;add name="FBA2AspNetSqlRoleProvider" &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; connectionStringName="FBA2ConnString" &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; applicationName="/" &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/providers&amp;gt;&lt;BR&gt;&amp;lt;/roleManager&amp;gt; &lt;/P&gt;
&lt;P&gt;For this to all make sense here are some articles I suggest reading: 
&lt;P&gt;&lt;A title=http://www.wildwires.com/Blog/PermaLink,guid,2dc7ea3d-c892-4baa-b990-671e0c2ab673.aspx href="http://www.wildwires.com/Blog/PermaLink,guid,2dc7ea3d-c892-4baa-b990-671e0c2ab673.aspx"&gt;http://www.wildwires.com/Blog/PermaLink,guid,2dc7ea3d-c892-4baa-b990-671e0c2ab673.aspx&lt;/A&gt; 
&lt;P&gt;&lt;A title=http://www.chandima.net/Blog/Lists/Posts/Post.aspx?ID=6 href="http://www.chandima.net/Blog/Lists/Posts/Post.aspx?ID=6"&gt;http://www.chandima.net/Blog/Lists/Posts/Post.aspx?ID=6&lt;/A&gt; 
&lt;P&gt;&lt;A title=http://www.andrewconnell.com/blog/articles/HowToConfigPublishingSiteWithDualAuthProvidersAndAnonAccess.aspx href="http://www.andrewconnell.com/blog/articles/HowToConfigPublishingSiteWithDualAuthProvidersAndAnonAccess.aspx"&gt;http://www.andrewconnell.com/blog/articles/HowToConfigPublishingSiteWithDualAuthProvidersAndAnonAccess.aspx&lt;/A&gt; 
&lt;P&gt;My very old post on setting up FBA:&lt;BR&gt;&lt;A title=http://weblog.vb-tech.com/nick/archive/2006/06/14/1617.aspx HREF="/nick/archive/2006/06/14/1617.aspx"&gt;http://weblog.vb-tech.com/nick/archive/2006/06/14/1617.aspx&lt;/A&gt;&lt;/P&gt;&lt;img src ="http://weblog.vb-tech.com/nick/aggbug/2251.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Nick</dc:creator><title>SharePoint Developers/Architects wanted</title><link>http://weblog.vb-tech.com/nick/archive/2007/03/09/2250.aspx</link><pubDate>Fri, 09 Mar 2007 09:35:00 GMT</pubDate><guid>http://weblog.vb-tech.com/nick/archive/2007/03/09/2250.aspx</guid><wfw:comment>http://weblog.vb-tech.com/nick/comments/2250.aspx</wfw:comment><comments>http://weblog.vb-tech.com/nick/archive/2007/03/09/2250.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://weblog.vb-tech.com/nick/comments/commentRss/2250.aspx</wfw:commentRss><trackback:ping>http://weblog.vb-tech.com/nick/services/trackbacks/2250.aspx</trackback:ping><description>&lt;p&gt;&lt;/p&gt; &lt;p&gt;Sword UK, the company I work for, are expanding quickly with lots of new projects coming in. We're looking for people to work on both the SharePoint dev and administration side of things. If you've got SP 2003 or good ASP.NET experience we'll get you trained up to 2007. If you are intested in getting involved in areas that are new to you such as training or product development we can also help with that. &lt;p&gt;Chance to attend conferences such as TechEd both in Europe and in US, plus you get to work with me! (ok I know the conference bit is much more exciting!) &lt;p&gt;Most work is based around the M25, but there is also plenty of work outside of London. &lt;p&gt;If you're interested drop me a&amp;nbsp;note at &lt;a href="mailto:nick.swan@sword-uk.com"&gt;nick.swan@sword-uk.com&lt;/a&gt; or give me a ring on 07725 960903 &lt;p&gt;[no agencies!]&lt;/p&gt;&lt;img src ="http://weblog.vb-tech.com/nick/aggbug/2250.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Nick</dc:creator><title>Detailed steps to setup FBA for MOSS 2007 including getting My Sites to work!</title><link>http://weblog.vb-tech.com/nick/archive/2007/03/05/2242.aspx</link><pubDate>Mon, 05 Mar 2007 21:03:00 GMT</pubDate><guid>http://weblog.vb-tech.com/nick/archive/2007/03/05/2242.aspx</guid><wfw:comment>http://weblog.vb-tech.com/nick/comments/2242.aspx</wfw:comment><comments>http://weblog.vb-tech.com/nick/archive/2007/03/05/2242.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://weblog.vb-tech.com/nick/comments/commentRss/2242.aspx</wfw:commentRss><trackback:ping>http://weblog.vb-tech.com/nick/services/trackbacks/2242.aspx</trackback:ping><description>&lt;p&gt;I remember back in the day when RTM of SharePoint was just a twinkle in the SharePoint teams eye, I blogged one of the &lt;a href="http://weblog.vb-tech.com/nick/archive/2006/06/14/1617.aspx"&gt;first walk throughs&lt;/a&gt; of how to get FBA working for SharePoint 2007. Thankfully over time many people have done a much better job of detailing the steps, and the best one to date is without doubt &lt;a href="http://devcow.com/blogs/jdattis/"&gt;Dan Attis&lt;/a&gt;. Many people have been struggling with My Sites and FBA and pondering if it was even possible. Well Dan the Man has a great walk through of how to get it all working!&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.wildwires.com/Blog/ct.ashx?id=2dc7ea3d-c892-4baa-b990-671e0c2ab673&amp;amp;url=http%3a%2f%2fdevcow.com%2fblogs%2fjdattis%2farchive%2f2007%2f02%2f23%2fOffice_SharePoint_Server_2007_Forms_Based_Authentication_FBA_Walkthrough_Part_1.aspx"&gt;Part One&lt;/a&gt; is the basics.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.wildwires.com/Blog/ct.ashx?id=2dc7ea3d-c892-4baa-b990-671e0c2ab673&amp;amp;url=http%3a%2f%2fdevcow.com%2fblogs%2fjdattis%2farchive%2f2007%2f03%2f01%2fOffice_SharePoint_Server_2007_Forms_Based_Authentication_FBA_w_MySites_Walkthrough_Part_2.aspx"&gt;Part Two&lt;/a&gt; explains&amp;nbsp;what you have to do to get&amp;nbsp;MySite working.&amp;nbsp;&lt;/p&gt; &lt;p&gt;Thanks to &lt;a href="http://www.wildwires.com/Blog/PermaLink,guid,2dc7ea3d-c892-4baa-b990-671e0c2ab673.aspx"&gt;Stacy&lt;/a&gt; who pointed Dans posts my way&lt;/p&gt;&lt;img src ="http://weblog.vb-tech.com/nick/aggbug/2242.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Nick</dc:creator><title>Deploying our SharePoint 2007 Workflow with Visual Studio 2005 + InfoPath 2007 (RTM VERSION!)</title><link>http://weblog.vb-tech.com/nick/archive/2007/03/05/2241.aspx</link><pubDate>Mon, 05 Mar 2007 20:51:00 GMT</pubDate><guid>http://weblog.vb-tech.com/nick/archive/2007/03/05/2241.aspx</guid><wfw:comment>http://weblog.vb-tech.com/nick/comments/2241.aspx</wfw:comment><comments>http://weblog.vb-tech.com/nick/archive/2007/03/05/2241.aspx#Feedback</comments><slash:comments>17</slash:comments><wfw:commentRss>http://weblog.vb-tech.com/nick/comments/commentRss/2241.aspx</wfw:commentRss><trackback:ping>http://weblog.vb-tech.com/nick/services/trackbacks/2241.aspx</trackback:ping><description>&lt;P&gt;Hopefully you've walked through the &lt;A href="http://weblog.vb-tech.com/nick/archive/2007/02/25/2207.aspx"&gt;first article&lt;/A&gt; and successfully created your InfoPath 2007 forms and the Visual Studio project needed to create our simple sequential worklow. Now we need to set about deploying it. First let's look at feaure.xml in DeploymentFiles\FeatureFiles. Copy and paste the following xml into that file:&lt;/P&gt;&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;P&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;BR&gt;&amp;lt;Feature Id="1E6D3BDD-9877-41ec-826C-EDE276EB560B" Title="Nicks Workflow" Description="Nicks workflow the same as the simple sequential one."&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Version="12.0.0.0"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Scope="Site"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ReceiverAssembly="Microsoft.Office.Workflow.Feature, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ReceiverClass="Microsoft.Office.Workflow.Feature.WorkflowFeatureReceiver"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; xmlns="&lt;A href="http://schemas.microsoft.com/sharepoint/"&gt;http://schemas.microsoft.com/sharepoint/"&lt;/A&gt;&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ElementManifests&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ElementManifest Location="workflow.xml" /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/ElementManifests&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Properties&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Property Key="GloballyAvailable" Value="true" /&amp;gt; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- Value for RegisterForms key indicates the path to the forms relative to feature file location --&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- if you don't have forms, use *.xsn --&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Property Key="RegisterForms" Value="*.xsn" /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Properties&amp;gt;&lt;BR&gt;&amp;lt;/Feature&amp;gt; &lt;/P&gt;
&lt;P&gt;Here you can change the name of your workflow Title and Description. It would also be a good idea to generate your own guid id and add it as the Feature Id. 
&lt;P&gt;The next file we need to look at is workflow.xml. Copy and paste the following xml into that file. &lt;/P&gt;&lt;?xml version="1.0" encoding="utf-8" ?&gt;
&lt;P&gt;&amp;lt;?xml version="1.0" encoding="utf-8" ?&amp;gt;&lt;BR&gt;&amp;lt;Elements xmlns="&lt;A href="http://schemas.microsoft.com/sharepoint/%22"&gt;http://schemas.microsoft.com/sharepoint/"&lt;/A&gt;&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Workflow Name="Nicks Sequential Workflow." Description="Simple workflow that creates a review task and waits for the user to complete it."&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Id="48500BEB-D1BE-4ec4-8D21-5DEF76BEEDA8"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CodeBesideClass="NicksWorkflow.Workflow1" &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CodeBesideAssembly="NicksWorkflow, Version=1.0.0.0, Culture=neutral, PublicKeyToken=0ac2d69683afd41e"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TaskListContentTypeId="0x01080100C9C9515DE4E24001905074F980F93160"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AssociationUrl="_layouts/CstWrkflIP.aspx"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; InstantiationUrl="_layouts/IniWrkflIP.aspx"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ModificationUrl="_layouts/ModWrkflIP.aspx"&amp;gt; 
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Categories/&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- Tags to specify InfoPath forms for the workflow; delete tags for forms that you do not have --&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;MetaData&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Instantiation_FormURN&amp;gt;urn:schemas-microsoft-com:office:infopath:DemoInitiation:-myXSD-2007-03-03T23-40-46&amp;lt;/Instantiation_FormURN&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Association_FormURN&amp;gt;urn:schemas-microsoft-com:office:infopath:DemoInitiation:-myXSD-2007-03-03T23-40-46&amp;lt;/Association_FormURN&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Task0_FormURN&amp;gt;urn:schemas-microsoft-com:office:infopath:TaskEdit:-myXSD-2007-03-03T23-45-45&amp;lt;/Task0_FormURN&amp;gt; 
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;StatusPageUrl&amp;gt;_layouts/WrkStat.aspx&amp;lt;/StatusPageUrl&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/MetaData&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Workflow&amp;gt;&lt;BR&gt;&amp;lt;/Elements&amp;gt; &lt;/P&gt;
&lt;P&gt;Again you are free to change the title and description attibutes here, and also again it's best to generate your own guid id for the id attribute. The code beside class is the fully qualified name of your workflow class, eg namespace.classname. The CodeBesideAssembly is made up of the name of your dll (you can often take this as being the project name), the assembly version which is set in the Properties\AssemblyInfo.cs file. To get the public key value of our assembly we need to open a Visual Studio 2005 Command Prompt. This can be found via the start menu by going Start -&amp;gt; Program Files -&amp;gt; Visual Studio 2005 -&amp;gt; Visual Studio tools -&amp;gt; Visual Studio 2005 Command Prompt&lt;/P&gt;
&lt;P&gt;In the command prompt type : sn -T "path to your workflow dll"&lt;/P&gt;
&lt;P&gt;&lt;IMG src="/nick/workflow/deploy1.png"&gt; &lt;/P&gt;
&lt;P&gt;The only other parts you need to worry about for this workflow are the formURN's. These are used to identify exactly which InfoPath form should be used at each point. You can find these values by opening your published InfoPath 2007 forms in design mode (right click on them in explorer and chose design), then from the main menu go File -&amp;gt; Properties, and the value will be in the ID field:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="/nick/workflow/deploy2.png"&gt; &lt;/P&gt;
&lt;P&gt;We are only going to build and deploy our workflow in debug mode so we don't need to worry about the files in the Production Folder.&lt;/P&gt;
&lt;P&gt;When we do a Re-Build of our solution the PostBuildActions.bat file will be executed. From a new project however in the post build actions of the project a parameter of NODEPLOY is passed to it so our workflow feature is not deploy. To change it so our workflow is deployed do the following steps:&lt;/P&gt;
&lt;P&gt;1, Right click on your workflow project and chose Properties&lt;/P&gt;
&lt;P&gt;2, Select the Build Events tab from the project properties screen.&lt;/P&gt;
&lt;P&gt;3, In the textbox for the "Post-build event command&amp;nbsp;line:" the last parameter of the line will be NODEPLOY. Change this to simply DEPLOY&lt;/P&gt;
&lt;P&gt;&lt;IMG src="/nick/workflow/deploy3.png"&gt; &lt;/P&gt;
&lt;P&gt;And that is it. To build and deploy our solution simply rebuild it. Generally this can be done by pressing F6 or going Build -&amp;gt; Rebuild Solution from the main menu.&lt;/P&gt;
&lt;P&gt;You should get something similar to the following text in the output window. If you get an errors detailed here hopefully there should also be a hint of how to fix it. Something else to check before trying to bind your new workflow to a document library is that the correct files have been deployed to the 12 hive. Look in ..\12\TEMPLATE\FEATURES\NicksWorkflow - or whatever you called your workflow and you should see feature.xml, workflow.xml, DemoInitiation.xsn and TaskEdit.xsn.&lt;/P&gt;
&lt;P&gt;If the deploy seemed to run ok and you have all the files in your Feature folder, go and try your workflow out! Good luck!&lt;/P&gt;
&lt;P&gt;I hope all the above makes sense. As with the previous workflow article this is my own attempt at explaining quite a tricky process (and very annoying if you get wrong and can't figure out why! :-) ) If you spot any inaccuracies please let me know in the comments.&lt;/P&gt;&lt;img src ="http://weblog.vb-tech.com/nick/aggbug/2241.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Nick</dc:creator><title>BDC Meta Man - Version 1.2.0.2 Beta</title><link>http://weblog.vb-tech.com/nick/archive/2007/02/28/2219.aspx</link><pubDate>Wed, 28 Feb 2007 04:36:00 GMT</pubDate><guid>http://weblog.vb-tech.com/nick/archive/2007/02/28/2219.aspx</guid><wfw:comment>http://weblog.vb-tech.com/nick/comments/2219.aspx</wfw:comment><comments>http://weblog.vb-tech.com/nick/archive/2007/02/28/2219.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://weblog.vb-tech.com/nick/comments/commentRss/2219.aspx</wfw:commentRss><trackback:ping>http://weblog.vb-tech.com/nick/services/trackbacks/2219.aspx</trackback:ping><description>&lt;p&gt;We've put a new release of BDC Meta Man out late last night. This one is a beta at the moment as we wanted to give people a chance to test things out. If you have any trouble with this beta you'll be able to revert to 1.2.0.1 no problem.&lt;/p&gt; &lt;p&gt;Here are a details from the &lt;a href="http://www.bdcmetaman.com/Information/1.2.0.2%20Beta%20Release%20Notes.txt"&gt;release notes&lt;/a&gt;:&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;em&gt;New Features Added:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;em&gt;Developer and Professional Versions:&lt;/em&gt;&lt;/strong&gt; &lt;p&gt;&lt;em&gt;- Actions now appear inside BDC Web Parts in the same order they appear inside the Actions list on the Actions tab.&lt;/em&gt; &lt;p&gt;&lt;em&gt;Previously, the display order of Actions in BDC Web Parts, was not always consistent with the order they were displayed inside the BDC Meta Man.&lt;/em&gt; &lt;p&gt;&lt;em&gt;- Added support for tables with String identifiers.&lt;/em&gt; &lt;p&gt;&lt;em&gt;- Added support for tables with Guid identifiers.&lt;/em&gt; &lt;p&gt;&lt;em&gt;- Added support for tables with spaces in their names.&lt;/em&gt; &lt;p&gt;&lt;em&gt;- Added support for tables with columns that have spaces in their names.&lt;/em&gt; &lt;p&gt;&lt;strong&gt;&lt;em&gt;Professional Version Only:&lt;/em&gt;&lt;/strong&gt; &lt;p&gt;&lt;em&gt;- A custom Action builder has been added to the application to allow the creation of custom Actions. The custom actions can accept up to three parameters.&lt;/em&gt; &lt;p&gt;&lt;em&gt;- Added the ability to set the Image Url for both the predefined Actions that come with BDC Meta Man, and custom Actions you create.&lt;/em&gt; &lt;p&gt;&lt;em&gt;- Added two more parameters to the Actions tab to allow actions to accept up to three parameters.&lt;/em&gt; &lt;p&gt;&lt;strong&gt;&lt;em&gt;Bug fixes (Developer and Professional Versions)&lt;/em&gt;&lt;/strong&gt; &lt;p&gt;&lt;em&gt;- Fixed the bug where an exception would occure when you clicked cancel on the Action Picker, without selecting one of the predefined actions.&lt;/em&gt; &lt;p&gt;&amp;nbsp; &lt;p&gt;If you have the professional version you'll also be able to create associations between entities with primary keys of guid or string type, and tables with spaces between the table names and column names. &lt;p&gt;Please leave us any feedback, whether that it works great, or you have bugs. Many thanks!&lt;/p&gt;&lt;img src ="http://weblog.vb-tech.com/nick/aggbug/2219.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Nick</dc:creator><title>SharePoint 2007 Workflow with Visual Studio 2005 + InfoPath 2007 (RTM VERSION!)</title><link>http://weblog.vb-tech.com/nick/archive/2007/02/25/2207.aspx</link><pubDate>Sun, 25 Feb 2007 19:27:00 GMT</pubDate><guid>http://weblog.vb-tech.com/nick/archive/2007/02/25/2207.aspx</guid><wfw:comment>http://weblog.vb-tech.com/nick/comments/2207.aspx</wfw:comment><comments>http://weblog.vb-tech.com/nick/archive/2007/02/25/2207.aspx#Feedback</comments><slash:comments>27</slash:comments><wfw:commentRss>http://weblog.vb-tech.com/nick/comments/commentRss/2207.aspx</wfw:commentRss><trackback:ping>http://weblog.vb-tech.com/nick/services/trackbacks/2207.aspx</trackback:ping><description>&lt;P&gt;I have been amazed at how many hits and questions the 'how-to'&amp;nbsp;article I posted on creating a &lt;A href="http://weblog.vb-tech.com/nick/archive/2006/09/04/1753.aspx" target=_blank&gt;SharePoint 2007 workflow with Visual Studio 2005&lt;/A&gt; and InfoPath 2007 got. That article was based on Beta2 of SharePoint 2007, and although most of the steps are still the same, I decided to rewrite the article now that RTM is out. There were so many questions on the previous post that it was difficult for me to answer them all, so I've got to thank other people who tried out the workflow and got it to work for coming along and helping others. At the end of this article I've a link to forum post where I think we can put questions about this guide. That way people can sign up to alerts and we can hopefully get peoples questions answered in a much more organised way. So here it is, buckle down and good luck...&lt;/P&gt;
&lt;P&gt;[after thought - this post and capturing all the images has taken almost 5 hours. If you are reposting it somewhere else (ie stealing it!), please at least give a link back! And if you like the post also please give me a link ;-) ]&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Getting Started&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The first thing you need to get right is your development environment. I'm working on Virtual PC 2007 which has Windows 2003 server and MOSS installed on the image. This image is also my development environment so I've installed Office 2007 Pro Plus, and Visual Studio 2005 directly onto Windows Server 2003.&lt;/P&gt;
&lt;P&gt;Once Visual Studio 2005 is on we need to install the necessary components to be able to work with Windows Workflow Foundation. Download and install the &lt;A href="http://www.microsoft.com/downloads/details.aspx?familyid=5D61409E-1FA3-48CF-8023-E8F38E709BA6&amp;amp;displaylang=en" target=_blank&gt;Visual Studio 2005 Extensions for .NET Framework 3.0&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Once you have downloaded and installed those components you'll be able to create Workflow type projects but we need the SharePoint workflow templates. To get these, download and install the &lt;A href="http://www.microsoft.com/downloads/details.aspx?familyid=6d94e307-67d9-41ac-b2d6-0074d6286fa9&amp;amp;displaylang=en" target=_blank&gt;Microsoft Office SharePoint Server 2007 SDK&lt;/A&gt; which also includes the Enterprise Starter Kit.&lt;/P&gt;
&lt;P&gt;Now that we have these two things installed in the Create New Project box in VS 2005 you should be able to create a SharePoint Sequential Workflow and a SharePoint State Machine Workflow.&lt;/P&gt;
&lt;P&gt;&lt;IMG src="/nick/workflow/workflow1.png"&gt; &lt;/P&gt;
&lt;P&gt;So that's the setup done, now lets just recap what it is we'd like our workflow to do. This is copied from the original workflow article:&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;We want to allow our workflow to be associated with a list or document library. When a document is created or changed (this is a setting chosen upon binding the workflow to the list/library), a person specified will have a task created for them, with some pre-defined instructions and comments. When clicking the task the user will have a designed form where they will have instructions present, and can decide whether to complete the task with a checkbox.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;From the above we&amp;#8217;re going to need 2 InfoPath forms. Number 1 is used when binding our workflow to a list/library where we&amp;#8217;ll enter the user who&amp;#8217;ll get the task, and a few instructions and a comment. The second form is when the user clicks on the task. In this form they can add comments and click a checkbox to complete the workflow.&lt;/EM&gt; 
&lt;P&gt;This project is basically the HelloWorldSequential workflow from the ECM starter kit, but it's a nice walk through of how to put it together yourself! 
&lt;P&gt;Lets go and create our workflow project in Visual Studio 2005. We're going to be using a sequential workflow template, and lets give it a name of NicksWorkflow 
&lt;P&gt;&lt;IMG src="/nick/workflow/workflow2.png"&gt; 
&lt;P&gt;Once the project is created you'll see in the Solution Explorer that there's a new folder called Deployment Files. This is where you'll now find feature.xml and workflow.xml. We'll dig into how to deploy our workflow in the next blog post so don't worry about these for now. 
&lt;P&gt;As with the previous article, before we start writing any code we want to create our two InfoPath 2007 forms. We want to do it this way as we're going to generate a C# class from one of our forms to help with the passing of data to and from it. The first form we are going to create is the initiation form. This captures information such as who we want the task to be assigned to, a field for instructions to them and a comments textbox. 
&lt;P&gt;&lt;STRONG&gt;Initiation Form&lt;/STRONG&gt; 
&lt;P&gt;1, Open up InfoPath 2007 and from the first form select 'Design a form template...'&lt;BR&gt;&lt;IMG src="/nick/workflow/workflow3.png"&gt; 
&lt;P&gt;2, Click OK to create a blank form template...&lt;BR&gt;&lt;IMG src="/nick/workflow/workflow4.png"&gt; 
&lt;P&gt;3, From the top menu bar click Insert-&amp;gt;Layout Table... and then select your table to have 2 columns and 4 rows...&lt;BR&gt;&lt;IMG src="/nick/workflow/workflow5.png"&gt; 
&lt;P&gt;4, Add three textboxes and a button to the columns in the right, and a description in the cells to the left of each textbox. We need to also give each textbox a proper name, do this by double clicking on it, and entering the new name into Field Name&lt;BR&gt;&lt;IMG src="/nick/workflow/workflow6.png"&gt;&lt;/P&gt;
&lt;P&gt;Once you've renamed your textboxes and given the button a&amp;nbsp;Label value of submit, your&amp;nbsp;InfoPath form should look something like this:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="/nick/workflow/workflow7.png"&gt;&lt;/P&gt;
&lt;P&gt;5,&amp;nbsp;Data from InfoPath forms is represented by XML. To make it easier for us to get our hands on the XML data we require we can&amp;nbsp;give the XmlElement that holds these control values a better name. From the&amp;nbsp;Design Tasks toolbar click on Data Source...&lt;BR&gt;&lt;IMG src="/nick/workflow/workflow8.png"&gt; &lt;/P&gt;
&lt;P&gt;Double click on&amp;nbsp;myFields&lt;BR&gt;&lt;IMG src="/nick/workflow/workflow9.png"&gt; &lt;BR&gt;And in the following form that opens up enter InitForm as the Name value...&lt;BR&gt;&lt;IMG src="/nick/workflow/workflow10.png"&gt;&lt;BR&gt;Click OK to close that.&lt;/P&gt;
&lt;P&gt;6, Now we need to configure what happens when people click on the submit button. Double click on the submit button to bring up it's properties, from the&amp;nbsp;General tab click on the Rules button&lt;BR&gt;&lt;IMG src="/nick/workflow/workflow11.png"&gt;&lt;BR&gt;In the following form, click Add to create a new rule. Click&amp;nbsp;'Add Action', and from the&amp;nbsp;following form chose&amp;nbsp;'Submit&amp;nbsp;using a data connection' from the drop&amp;nbsp;down, then click the Add button&amp;nbsp;just below:&lt;BR&gt;&lt;IMG src="/nick/workflow/workflow12.png"&gt;&lt;/P&gt;
&lt;P&gt;In the next wizzard chose the following options to submit your data:&lt;BR&gt;&lt;IMG src="/nick/workflow/workflow13.png"&gt; &lt;BR&gt;and then the hosting environment as the destination&lt;BR&gt;&lt;IMG src="/nick/workflow/workflow14.png"&gt; &lt;/P&gt;
&lt;P&gt;Leave the name as Submit and click Finish. And then OK on the 'Add Action Form'&lt;BR&gt;&lt;IMG src="/nick/workflow/workflow15.png"&gt; &lt;/P&gt;
&lt;P&gt;Now we want to add another action, so back in the Rule form click 'Add Action...' This time the action 'Close this form' and make sure the checkbox is not selected...&lt;BR&gt;&lt;IMG src="/nick/workflow/workflow16.png"&gt; &lt;/P&gt;
&lt;P&gt;Clicking OK takes us back to our Rules form. That's the two actions we want to add for our Submit button. With them both together they should look like this:&lt;BR&gt;&lt;IMG src="/nick/workflow/workflow17.png"&gt; &lt;/P&gt;
&lt;P&gt;Click OK to close this form.&lt;/P&gt;
&lt;P&gt;7, Now we need to ensure our form can be viewed in a browser as this is how InitForm will be used when setting up a workflow.&lt;/P&gt;
&lt;P&gt;Go back to our Design Tasks toolbar, and click 'Design Checker'&lt;BR&gt;&lt;IMG src="/nick/workflow/workflow18.png"&gt; &lt;/P&gt;
&lt;P&gt;From the Design Checker pane chose 'Change Compatibility Settings...'&lt;BR&gt;&lt;IMG src="/nick/workflow/workflow19.png"&gt; &lt;/P&gt;
&lt;P&gt;Click the checkbox to allow our form to be opened in a browser, also enter the url for MOSS 2007 to help verify compatibility...&lt;/P&gt;
&lt;P&gt;&lt;IMG src="/nick/workflow/workflow20.png"&gt; &lt;/P&gt;
&lt;P&gt;While you are in this form, click on the Browser category, and ensure the language selected is infact a language pack that you have installed on your MOSS server...&lt;BR&gt;&lt;IMG src="/nick/workflow/workflow21.png"&gt; &lt;/P&gt;
&lt;P&gt;One final step is to go to the 'Security and Trust' category. In here untick to automatically determine the level of security, and select Domain...&lt;/P&gt;
&lt;P&gt;&lt;IMG src="/nick/workflow/workflow22.png"&gt; &lt;/P&gt;
&lt;P&gt;Click OK to close the 'Form Options' form. Now we need to save our form. Save it directly to the C:\ as DemoInitiation.xsn. Once saved we can publish it by going File-&amp;gt;Publish, chose to publish it 'To a network location' and then chose the&amp;nbsp;location&amp;nbsp;of your&amp;nbsp;VS 2005 project, and the "Deployment Files/Feature Files" folder.&lt;BR&gt;&lt;BR&gt;Click Next, remove the path as the alternate access location. You will get a warning when clicking next on that form but that is ok. If you do not remove the alternate access path you will have problems when publishing your form to work with workflow.&amp;nbsp;Finally Publish and Close.&lt;/P&gt;
&lt;P&gt;When we submit our forum to SharePoint we need to be able to get the data from the submitted form to be able to use in our workflow. To help do this we can generate a class using xsd.exe based off the form schema file. First we need to save our InfoPath form as Source Files. File -&amp;gt; Save as Source Files. Browse to the location you want to save the file (c: is a nice easy place), and click OK. By default the source files are saved as filename myschema.xsd. Once saved close InfoPath.&lt;/P&gt;
&lt;P&gt;Now open up a Visual Studio 2005 command prompt and navigate to where you saved myschema.xsd. From the prompt type xsd myschema.xsd /c&lt;/P&gt;
&lt;P&gt;&lt;IMG src="/nick/workflow/workflow24.png"&gt; &lt;/P&gt;
&lt;P&gt;this generates a c# class file called myschema.cs. Rename the file to InitForm.cs, and add it to you VS 2005 workflow project. If you take a look inside the classes code you&amp;#8217;ll see the name of the class is the same that we gave to the forms field collection.&lt;/P&gt;
&lt;P&gt;&lt;IMG src="/nick/workflow/workflow25.png"&gt; &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Edit Task Form&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Now we need to jump back into InfoPath 2007 so we can create our form that enables users to edit the task they get assigned to complete the workflow.&lt;/P&gt;
&lt;P&gt;1, Open InfoPath 2007 again and create a blank form as we did before. On this form we&amp;#8217;re going to want an instructions textbox where we&amp;#8217;ll place the instructions entered when we bound the workflow to&amp;nbsp;a list/library, a checkbox to check to say the workflow is complete, and an ok button. Lay it all out and rename the fields to something like below...&lt;/P&gt;
&lt;P&gt;&lt;IMG src="/nick/workflow/workflow26.png"&gt; &lt;BR&gt;Underneath the isFinished tooltip is simply some text of 'Completed'.&lt;/P&gt;
&lt;P&gt;2, Add the same rules to the OK button as you did to the submit button for the DemoInitiation form (ie submit to a hosted environment, and then close).&lt;/P&gt;
&lt;P&gt;3, When&amp;nbsp;this Edit form opens we&amp;#8217;re going to want to pass some data to it (ie the instructions), we do this by creating a task schema and adding it as a secondary data source.&lt;/P&gt;
&lt;P&gt;Open up notepad and add the following:&lt;BR&gt;&lt;?xml:namespace prefix = z /&gt;&lt;z:row xmlns:z="&amp;#8221;#RowsetSchema&amp;#8221;"&gt;&lt;/z:row&gt;&lt;z:row xmlns:z="#RowsetSchema"&gt;&lt;/z:row&gt;&amp;lt;z:row xmlns:z="#RowsetSchema" /&amp;gt;&lt;BR&gt;In this file we need to define every property that we are going to pass to the Task Edit form. To do this, add an attribute comprised of the prefix ows_ and the name of the task property. Set the attribute equal to an empty string. So to pass the instructions to the Task Edit form that were added when we bound the workflow to the list/library we add the following attribute:&lt;BR&gt;ows_instruction=&amp;#8221;&amp;#8221;&lt;/P&gt;
&lt;P&gt;So your finished notepad text should be:&lt;BR&gt;&lt;z:row xmlns:z="#RowsetSchema" ows_instructions=""&gt;&lt;/z:row&gt;&amp;lt;z:row xmlns:z="#RowsetSchema" ows_instructions="" /&amp;gt;&lt;BR&gt;&lt;IMG src="/nick/workflow/workflow27.png"&gt; 
&lt;P&gt;It doesn't matter where you save the file, just make sure it's called ItemMetadata.xml (yes it does matter about the case with this). 
&lt;P&gt;4, Now we need to add the task schema to our Edit Task form as a secondary data source. Back in InfoPath, in the Design Tasks pane select Data Source, and then click 'Manage Data Connection'. 
&lt;P&gt;&lt;IMG src="/nick/workflow/workflow28.png"&gt; 
&lt;P&gt;In the form that opens you'll see there is a Submit data connection already. On the form Click Add to create a new data connection. On the wizzard form that opens click so the new connection receives data... 
&lt;P&gt;&lt;IMG src="/nick/workflow/workflow29.png"&gt; 
&lt;P&gt;Select XML Document as the data source to receive data from... 
&lt;P&gt;&lt;IMG src="/nick/workflow/workflow30.png"&gt; 
&lt;P&gt;Then browse and select the ItemMetadata.xml file you created in Notepad in step 3...&lt;BR&gt;&lt;IMG src="/nick/workflow/workflow31.png"&gt; 
&lt;P&gt;Leave the option selected to include this file as a data source...&lt;BR&gt;&lt;IMG src="/nick/workflow/workflow32.png"&gt; 
&lt;P&gt;Click Next, and then Finish. The data connections form should now look as below:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="/nick/workflow/workflow33.png"&gt; &lt;/P&gt;
&lt;P&gt;Click Close to get that job done!&lt;/P&gt;
&lt;P&gt;5, Now we need to bind the data that we are receiving from our new data connection to the necessary fields. Double click the instructions textbox and on the Data tab, under Default Value, click the formula button (underlined in red)...&lt;/P&gt;
&lt;P&gt;&lt;IMG src="/nick/workflow/workflow34.png"&gt; &lt;/P&gt;
&lt;P&gt;On the Insert Formula dialog box, click Insert a Field or Group. In the Select a Field or Group dialog box, select your ItemMetadata data connection from the drop down menu. Select the ows_MetaInfo_instructions element.&lt;/P&gt;
&lt;P&gt;&lt;IMG src="/nick/workflow/workflow35.png"&gt; &lt;/P&gt;
&lt;P&gt;Click OK. On the Insert Formula dialog box, click OK. On the Properties dialog box, click OK.&lt;/P&gt;
&lt;P&gt;&lt;IMG src="/nick/workflow/workflow36.png"&gt; &lt;/P&gt;
&lt;P&gt;6, Now we need to do the same things as we did with the initiation form, set the form as browser enabled also entering the url of our MOSS server, check the language setting of the form, and also set the Trust Level as Domain.&lt;/P&gt;
&lt;P&gt;Save the form to c:\ again (or whever you saved it), and publish it to your VS workflow project, "Deployment Files\Feature Files"&amp;nbsp;directory again.&lt;/P&gt;
&lt;P&gt;And that's it for InfoPath, our forms are created and ready to use!!!&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Back to Visual Studio 2005&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Now we can get down to some coding! In the solution explorer double click on Workflow1.cs and up will open the workflow designer view. If you open up the toolbox you'll see three new groups of components, SharePoint - Workflow Tasks, SharePoint - Workflow, and Windows Workflow.&lt;/P&gt;
&lt;P&gt;&lt;IMG src="/nick/workflow/workflow37.png"&gt; &lt;/P&gt;
&lt;P&gt;As you can see on the Workflow1.cs design surface&amp;nbsp;it already creates the first workflow step for us with a onWorkFlowActivated action. This will always be the first Workflow action of any workflow. Below this action is an arrow and a kind of stop sign. We can drag and drop any new workflow actions from the tool box and place them on the arrow. Before we do that though there are a few properties we can check before we get going. If you go into the code view of Workflow1.cs you&amp;#8217;ll see&lt;/P&gt;
&lt;P&gt;public sealed partial class Workflow1: SharePointSequentialWorkflowActivity&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public Workflow1()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; InitializeComponent();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public Guid workflowId = default(System.Guid);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public Microsoft.SharePoint.Workflow.SPWorkflowActivationProperties workflowProperties = new Microsoft.SharePoint.Workflow.SPWorkflowActivationProperties();&lt;BR&gt;} 
&lt;P&gt;This is all created for you&amp;nbsp;because you used&amp;nbsp;a template project. If you view the properties of work&amp;nbsp;onWorkflowActivated1 you&amp;#8217;ll see the following important properties set for you:&lt;BR&gt;CorrelationToken : workflowToken&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; OwnerActivityName : Workflow1&lt;BR&gt;WorkflowProperties &amp;#8211; expand this&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Name : Workflow1&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Path : workflowProperties &amp;#8211; again this is a variable that was created for us and set from the code above. 
&lt;P&gt;We also get an event&amp;nbsp;for this control. When this fires we&amp;#8217;ll want to setup any initial variable values that are required for the workflow. Type into the&amp;nbsp;Invoked space onWorkflowActivated and press enter. You&amp;#8217;ll see it goes to the code view and creates our event handler for us with the correct interface. We&amp;#8217;ll come back to this later. 
&lt;P&gt;Now to add our first workflow control. Now that the workflow has actually started the first thing we want to do is create a task for the person who&amp;#8217;s been set to complete it. Remember we defined this&amp;nbsp;when attaching the workflow to an actual list in SharePoint. To do this drag and drop a CreateTask control just below our onWorkflowActivated1 control. 
&lt;P&gt;&lt;IMG src="/nick/workflow/workflow38.png"&gt; 
&lt;P&gt;We need to set a few properties for this control. First type in the Correlation Token as taskToken. Upon pressing enter you&amp;#8217;ll see that you can expand this property to reveal OwnerActivityName which once again should be set as Workflow1.&amp;nbsp;&lt;BR&gt;Next we&amp;#8217;ll set the TaskId and TaskProperties&amp;nbsp;which can be accomplished in a couple of ways. First method is to click on the default value of TaskId (0000&amp;#8211;0000&amp;#8230;. or&amp;nbsp;something) and you&amp;#8217;ll see three ellipses on a button&amp;nbsp;appear. Click on this and it&amp;#8217;ll open a dialogue box for you. Click on the &amp;#8216;Bind to a new member&amp;#8217; tab and click the 'Create Field' radio button. &lt;/P&gt;
&lt;P&gt;&lt;IMG src="/nick/workflow/workflow39.png"&gt; &lt;/P&gt;
&lt;P&gt;Click OK. In the propeties window of createTask1 you&amp;#8217;ll see now that not only have 2 pairs of name and values gone into the TaskId property, but you can expand them out to set them seperately. Also if you switch to code view, you&amp;#8217;ll see that a variable called&amp;nbsp;createTask1_TaskId1 (the name&amp;nbsp;that was&amp;nbsp;entered in the 'new member name' textbox) has been added to our code for us.&lt;/P&gt;
&lt;P&gt;Follow the same procedure for TaskProperties. Switch back to the code view again and you&amp;#8217;ll see the variable created for us. If you go back to the createTask1 properties view and click the ellipses for TaskProperties again, you can see in the &amp;#8216;Bind to an existing member&amp;#8217; that this property is bound to taskProps in our Workflow1 class. So as well as using this dialog box and the &amp;#8216;Bind to a new member&amp;#8217; tab, we could have gone into our code view, created the createTask1_TaskId1 and createTask2_TaskProperties1 variables ourselves, and then used the Bind to an existing member view to set the values of the properties. Final thing to do is create the event that fires when this activity executes. In the Method Invoking field enter createTask and click enter. Again is creates our event handler and interface for us. Again we&amp;#8217;ll come back to this is a little while. Finally we need to set the CorrelationToken as taskToken (just type it in). The same token name will be used in other task activities that we drag onto our workflow. Using the same token ensures we are working with the same task. Here is how the properties window for createTask1 should be looking: 
&lt;P&gt;&lt;IMG src="/nick/workflow/workflow40.png"&gt; 
&lt;P&gt;Now that our task has been created for the&amp;nbsp;assigned user, we need to add some waiting functionality to enable the workflow to wait for the task to be&amp;nbsp;completed by the user. We do this using the&amp;nbsp;While workflow component. 
&lt;P&gt;Drag and drop&amp;nbsp;a While component from the Windows Workflow&amp;nbsp;section in the toolbox between the&amp;nbsp;createTask1 and the end of the workflow. In the properties window select Code Condition as the Condition property's value and then expand the field. Then type notFinished into the extra field presented and press enter. This will create an event handler for you in code where you check whether the While condition has been met (ie has the user completed their task). 
&lt;P&gt;&lt;IMG src="/nick/workflow/workflow41.png"&gt; 
&lt;P&gt;Now we want to add an activity to the centre of our While loop. Here we&amp;#8217;ll place an onTaskChanged. This basically means that the While loop will execute and check our code condition, every time our task is edited. It won&amp;#8217;t be able to exit out of the While loop until our method notFinished returns false (which means it is finished!). Drag an onTaskChanged component and drop it in the middle of our While loop. 
&lt;P&gt;You&amp;#8217;ll see in the properties window there are quite a few things we need to set:&lt;BR&gt;AfterProperties = click the ellipses and bind to a new Field member&lt;BR&gt;BeforeProperties = click the ellipses and bind to a new Field member&lt;BR&gt;CorrelationToken = select&amp;nbsp;taskToken from the drop down&lt;BR&gt;Invoked&amp;nbsp;= onTaskChanged. When you&amp;#8217;ve typed it in press enter to create the event handler for you.&lt;BR&gt;TaskId = click the ellipses and bind to the existing member called&amp;nbsp;createTask1_TaskId1 
&lt;P&gt;&lt;IMG src="/nick/workflow/workflow43.png"&gt; 
&lt;P&gt;The properties window for onTaskChanged should now look as below, make sure you set the Correlation Token: 
&lt;P&gt;&lt;IMG src="/nick/workflow/workflow44.png"&gt; 
&lt;P&gt;The final component we want to add to our workflow is the CompleteTask activity. Drag and drop a CompleteTask component between the While component and the stop workflow activity. In the properties set the Correlation Token to&amp;nbsp;taskToken from the drop down. Again with the TaskId click the elipses and bind it to createdTask1_TaskId1. 
&lt;P&gt;&lt;IMG src="/nick/workflow/workflow45.png"&gt; 
&lt;P&gt;Now we&amp;#8217;ve added all the components to our workflow. Our workflow designer should look as below: 
&lt;P&gt;&lt;IMG src="/nick/workflow/workflow46.png"&gt;&amp;nbsp; 
&lt;P&gt;Now we&amp;#8217;ve got all our components added, and event handlers and methods&amp;nbsp;created, we need to add some code to Workflow1.cs.&lt;BR&gt;Right click on Workflow1.cs and click View Code. The first bit of code we need to add declares a few variables we are going to need in our workflow. Just above the onWorkflowActivated method add: 
&lt;P&gt;private String assignee = default(String);&lt;BR&gt;private String instructions = default(String);&lt;BR&gt;private String comments = default(String); 
&lt;P&gt;These three values are ones that we are going to get from our DemoInitiation form. These properties are passed to the workflow as an XML string represented by the InitiationData property of the SPWorkflowActivationProperties object. To access these properties we need to parse this XML string. This is where we make use of the generated&amp;nbsp;class based on the schema of our initiation form that we did in step 4 and&amp;nbsp;added to our project as InitForm.cs. To get these values add the following code to the onWorkflowActivated method: 
&lt;P&gt;workflowId = workflowProperties.WorkflowId;&lt;BR&gt;XmlSerializer serializer = new&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; XmlSerializer(typeof(InitForm));&lt;BR&gt;XmlTextReader reader = new XmlTextReader(new&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.IO.StringReader(workflowProperties.InitiationData));&lt;BR&gt;InitForm initform = (InitForm) serializer.Deserialize(reader);&lt;BR&gt;assignee = initform.assignee;&lt;BR&gt;instructions = initform.instructions;&lt;BR&gt;comments = initform.comments; 
&lt;P&gt;The next method we need to add some code to is createTask Method. Here we want to set some properties of a task as this method fires just before the task does actually get created. Here&amp;#8217;s the code: 
&lt;P&gt;createTask1_TaskId1 = Guid.NewGuid();&lt;BR&gt;createTask1_TaskProperties1.Title = "Demo Task";&lt;BR&gt;createTask1_TaskProperties1.AssignedTo = assignee;&lt;BR&gt;createTask1_TaskProperties1.Description = instructions;&lt;BR&gt;createTask1_TaskProperties1.ExtendedProperties["comments"] = comments;&lt;BR&gt;createTask1_TaskProperties1.ExtendedProperties["instructions"] = instructions; 
&lt;P&gt;as you can see there are a predefined properties such as Title and AssignedTo to use, and if there&amp;#8217;s any other properties you want to name and create yourself you can use the ExtendedProperties. This is a hash table so you can name things as you like. 
&lt;P&gt;The final bit of code we need to add is probably the most complex to get our heads around. We need to add a private Boolean variable called isFinished. Place this just above the notFinished method: 
&lt;P&gt;private bool isFinished; 
&lt;P&gt;Now our While loop calls the notFinished method. One of the objects passed in is ConditionalEventArgs which has a property called result. If result is set to false, the while loop will end, if result is set to true, the while loop continues. As you should be able to work out, the variable above we created isFinished will be true once the task has been finished. Therefore we have to negate it to set it&amp;#8217;s value to the ConditionalEventArgs result property. In the notFinished method type the following code: 
&lt;P&gt;e.Result = !isFinished; 
&lt;P&gt;The last thing we need to do is actually set isFinished when our task gets edited ie when onTaskChanged event files. In here we just need to parse out the isFinished value from our onTaskChanged1_AfterProperties1 object. At the code below to the onTaskChanged method: 
&lt;P&gt;isFinished = bool.Parse(onTaskChanged1_AfterProperties1.ExtendedProperties["isFinished"].ToString()); 
&lt;P&gt;And that&amp;#8217;s it. Build your solutions, and hopefully everything compiles succesfully. Now I was also going to include instructions on how to deploy this workflow, but I&amp;#8217;m going to save that for a few days time. 
&lt;P&gt;If you find any errors in the post please let me know...&lt;/P&gt;&lt;img src ="http://weblog.vb-tech.com/nick/aggbug/2207.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Nick</dc:creator><title>BDC Meta Man Podcast</title><link>http://weblog.vb-tech.com/nick/archive/2007/02/20/2191.aspx</link><pubDate>Tue, 20 Feb 2007 14:21:00 GMT</pubDate><guid>http://weblog.vb-tech.com/nick/archive/2007/02/20/2191.aspx</guid><wfw:comment>http://weblog.vb-tech.com/nick/comments/2191.aspx</wfw:comment><comments>http://weblog.vb-tech.com/nick/archive/2007/02/20/2191.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://weblog.vb-tech.com/nick/comments/commentRss/2191.aspx</wfw:commentRss><trackback:ping>http://weblog.vb-tech.com/nick/services/trackbacks/2191.aspx</trackback:ping><description>&lt;p&gt;I was interviewed by Michael Greth recently at the Berlin SharePoint Conference for his SharePointPodcast.de show. This is the first time I've appeared on a podcast! Quite an honor to be on the same show as &lt;a href="http://blog.u2u.info/DottextWeb/patrick/"&gt;Patrick Tisseghem&lt;/a&gt; as well. Usually SharePointPodcase.de is recorded in German (as is the intro in this show), but the actual interviews this time are in English. If you'd like to listen here's the link to the show:&lt;/p&gt; &lt;p&gt;&lt;a title="http://blogs.mysharepoint.de/sharepointpodcast/archive/2007/02/19/SPPD064-SharePointPodcast.aspx" href="http://blogs.mysharepoint.de/sharepointpodcast/archive/2007/02/19/SPPD064-SharePointPodcast.aspx"&gt;http://blogs.mysharepoint.de/sharepointpodcast/archive/2007/02/19/SPPD064-SharePointPodcast.aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;I'm on from 4 minutes 20 - 9 minutes 30&lt;/p&gt;&lt;img src ="http://weblog.vb-tech.com/nick/aggbug/2191.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>