<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0" xml:base="http://www.sadev.co.za">
<channel>
 <title>Robert MacLean - SharePoint</title>
 <link>http://www.sadev.co.za/taxonomy/term/64/0</link>
 <description />
 <language>en</language>
<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Sadevcoza-Sharepoint" /><feedburner:info uri="sadevcoza-sharepoint" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license><image><link>http://creativecommons.org/licenses/by-sa/3.0/</link><url>http://creativecommons.org/images/public/somerights20.gif</url><title>Some Rights Reserved</title></image><feedburner:emailServiceId>Sadevcoza-Sharepoint</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
 <title>SharePoint Saturday: Lab Rooms</title>
 <link>http://feedproxy.google.com/~r/Sadevcoza-Sharepoint/~3/4sfGWALVhrM/sharepoint-saturday-lab-rooms</link>
 <description>&lt;p&gt;&lt;a href="http://www.sadev.co.za/files/image_201.png"&gt;&lt;img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: right; padding-top: 0px; padding-left: 0px; margin: 0px 0px 0px 10px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" align="right" src="http://www.sadev.co.za/files/image_thumb_225.png" width="37" height="276" /&gt;&lt;/a&gt;&lt;a href="http://www.sadev.co.za/files/logo_wp75-h_web.jpg"&gt;&lt;img title="logo_wp75-h_web" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: left; padding-top: 0px; padding-left: 0px; margin: 0px 10px 0px 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="logo_wp75-h_web" align="left" src="http://www.sadev.co.za/files/logo_wp75-h_web_thumb.jpg" width="61" height="291" /&gt;&lt;/a&gt;Next weekend (15th Oct) Cape Town is hosting the &lt;a href="http://www.sharepointsaturday.org/capetown/default.aspx" target="_blank"&gt;SharePoint Saturday&lt;/a&gt; conference and myself and fellow &lt;a href="http://www.bbd.co.za/" target="_blank"&gt;BBD&lt;/a&gt;er &lt;a href="http://www.rudigrobler.net/" target="_blank"&gt;Rudi Grobler&lt;/a&gt; will be there and will be and we are running a very special event in conjunction with the main event: Lab Rooms!&lt;/p&gt;  &lt;p&gt;There will be two special rooms available and in one Rudi will presenting and training on Windows Phone 7 and in the other I will be presenting and training on the Windows Azure Platform!&lt;/p&gt;  &lt;p&gt;The cost for this? FREE! It is being sponsored by BBD &amp;amp; the SharePoint Saturday event &lt;img class="wlEmoticon wlEmoticon-smile" style="border-top-style: none; border-bottom-style: none; border-right-style: none; border-left-style: none" alt="Smile" src="http://www.sadev.co.za/files/wlEmoticon-smile_25.png" /&gt;&lt;/p&gt;  &lt;p&gt;Space in both rooms is VERY VERY limited, so you need to register NOW!&lt;/p&gt;  &lt;p&gt;Windows Phone Registration: &lt;a href="http://wp7camp.eventbrite.com/"&gt;http://wp7camp.eventbrite.com/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Windows Azure Registration: &lt;a title="http://windowsazurecpt.eventbrite.com/" href="http://windowsazurecpt.eventbrite.com/"&gt;http://windowsazurecpt.eventbrite.com/&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=4sfGWALVhrM:_80CywCaS2w:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=4sfGWALVhrM:_80CywCaS2w:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=4sfGWALVhrM:_80CywCaS2w:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=4sfGWALVhrM:_80CywCaS2w:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=4sfGWALVhrM:_80CywCaS2w:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=4sfGWALVhrM:_80CywCaS2w:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=4sfGWALVhrM:_80CywCaS2w:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=4sfGWALVhrM:_80CywCaS2w:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=4sfGWALVhrM:_80CywCaS2w:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=4sfGWALVhrM:_80CywCaS2w:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=4sfGWALVhrM:_80CywCaS2w:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=4sfGWALVhrM:_80CywCaS2w:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=4sfGWALVhrM:_80CywCaS2w:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Sadevcoza-Sharepoint/~4/4sfGWALVhrM" height="1" width="1"/&gt;</description>
 <comments>http://www.sadev.co.za/content/sharepoint-saturday-lab-rooms#comments</comments>
 <category domain="http://www.sadev.co.za/taxonomy/term/12">.NET</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/38">Development</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/66">Events</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/18">Microsoft</category>
 <category domain="http://www.sadev.co.za/category/blog/presentations-posters-cheat-sheets">Presentations, Posters &amp; Cheat Sheets</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/64">SharePoint</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/19">Virtualisation</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/56">Windows</category>
 <pubDate>Fri, 07 Oct 2011 11:24:44 +0000</pubDate>
 <dc:creator>Robert MacLean</dc:creator>
 <guid isPermaLink="false">657 at http://www.sadev.co.za</guid>
<feedburner:origLink>http://www.sadev.co.za/content/sharepoint-saturday-lab-rooms</feedburner:origLink></item>
<item>
 <title>Community night in September 2011 - IMPORTANT INFO</title>
 <link>http://feedproxy.google.com/~r/Sadevcoza-Sharepoint/~3/z4jQjdzRxdY/community-night-september-2011-important-info-0</link>
 <description>&lt;p&gt;Community Night, the best way to meet, mingle and learn (if you don’t know about it – &lt;a href="/content/community-night-be-there" target="_blank"&gt;read here&lt;/a&gt;) happens on the second Tuesday of the month… except in September due to an event at the venue on the Tuesday which can’t be moved. &lt;/p&gt;  &lt;p&gt;So for September it will take place the Monday before, in other words Monday the 12th September. Please help get the word out to the various user groups and communities!&lt;/p&gt;  &lt;p&gt;See you there!&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=z4jQjdzRxdY:p0kMXyeANTk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=z4jQjdzRxdY:p0kMXyeANTk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=z4jQjdzRxdY:p0kMXyeANTk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=z4jQjdzRxdY:p0kMXyeANTk:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=z4jQjdzRxdY:p0kMXyeANTk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=z4jQjdzRxdY:p0kMXyeANTk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=z4jQjdzRxdY:p0kMXyeANTk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=z4jQjdzRxdY:p0kMXyeANTk:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=z4jQjdzRxdY:p0kMXyeANTk:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=z4jQjdzRxdY:p0kMXyeANTk:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=z4jQjdzRxdY:p0kMXyeANTk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=z4jQjdzRxdY:p0kMXyeANTk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=z4jQjdzRxdY:p0kMXyeANTk:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Sadevcoza-Sharepoint/~4/z4jQjdzRxdY" height="1" width="1"/&gt;</description>
 <comments>http://www.sadev.co.za/content/community-night-september-2011-important-info-0#comments</comments>
 <category domain="http://www.sadev.co.za/taxonomy/term/12">.NET</category>
 <category domain="http://www.sadev.co.za/category/blog/alm">ALM</category>
 <category domain="http://www.sadev.co.za/category/blog/community-night">Community Night</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/38">Development</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/66">Events</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/23">Gaming</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/30">Internet Explorer</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/18">Microsoft</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/7">MSCRM</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/64">SharePoint</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/49">SQL</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/31">Tools &amp; Apps</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/56">Windows</category>
 <category domain="http://www.sadev.co.za/category/blog/windows-phone">Windows Phone</category>
 <pubDate>Mon, 22 Aug 2011 08:26:13 +0000</pubDate>
 <dc:creator>Robert MacLean</dc:creator>
 <guid isPermaLink="false">617 at http://www.sadev.co.za</guid>
<feedburner:origLink>http://www.sadev.co.za/content/community-night-september-2011-important-info-0</feedburner:origLink></item>
<item>
 <title>Are you using the .NET name correctly &amp; other interesting brand info</title>
 <link>http://feedproxy.google.com/~r/Sadevcoza-Sharepoint/~3/zYkMZXfYlrw/are-you-using-net-name-correctly-other-interesting-brand-info</link>
 <description>&lt;p&gt;Not talking about the technology but various identifiers in the .NET world are often abused. I know this is SUPER pedantic of me, but it is something I come across watching lots of presentations. Getting this right shows a level of polish and knowledge, and getting it wrong shows that either you not paying attention, don’t know what you are talking about or just don’t care.&lt;/p&gt;  &lt;p&gt;So here are some brand/naming problems I see:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;.NET&lt;/strong&gt; – I often see people use .net or .Net, the correct capitalisation is ALL caps. There is NO excuse for this one, just do it right.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;.NET Framework 4&lt;/strong&gt; – With .NET 4, the marketing people dropped the .0 like we had with 2.0 or 3.5, so stop saying four-oh, it’s just 4.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Windows Phone 7&lt;/strong&gt; – It is Windows Phone 7, not Windows Mobile 7 (no such product) or Windows 7 Phone. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Microsoft Visual C♯ 2010&lt;/strong&gt; – I make this one often and call it C♯ 4, it is actually Microsoft Visual C♯ 2010. &lt;/li&gt;    &lt;li&gt;&lt;font face="Calibri"&gt;&lt;strong&gt;Should you use ♯ or # with C♯&lt;/strong&gt; – either is acceptable. However Microsoft recommends the “Music Sharp Sign” for marketing material. &lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Microsoft Visual Studio 2010 Ultimate&lt;/strong&gt; – That is the full product name. The issue I see often is people putting .NET in there, ala Microsoft Visual Studio .NET 2010. There is NO .NET in the name. There was a release in 2002 called Visual Studio .NET, but that was a specific release and is not the product name.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Microsoft SharePoint Server 2010&lt;/strong&gt; – A lot of people are using the term MOSS to describe SharePoint Server. It is not MOSS in 2010. In 2007 it was Microsoft Office SharePoint Server, but the Office part was dropped for the 2010 release and the MOSS acronym along with it.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Microsoft SharePoint 2010 Foundation&lt;/strong&gt; – Like MOSS above people love to use WSS for SharePoint Foundation. It’s not called that in 2010…. there isn’t even a W in the whole name now.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Microsoft Visual Studio 2010 Documentation&lt;/strong&gt; – There is a very bad habit (I do it too) to call this MSDN. MSDN is not the help that is install on your machine with Visual Studio! MSDN is a website Microsoft runs for developers which has help on it and also a subscription service where you can get Microsoft software legally and cheap for development purposes. So while it is two things on the Internet, it is NOT on your machine.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;MacLean&lt;/strong&gt; – Thought I would just throw this one in, it’s my surname. It has a ‘a’ in the second position and a capital L. It is not Mclean, McLean, Maclean or ‘Hey you, stop kicking my dog…’ &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smilewithtongueout" alt="Smile with tongue out" src="http://www.sadev.co.za/files/wlEmoticon-smilewithtongueout_4.png" /&gt;&lt;/li&gt; &lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=zYkMZXfYlrw:nAG_YBmbXHI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=zYkMZXfYlrw:nAG_YBmbXHI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=zYkMZXfYlrw:nAG_YBmbXHI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=zYkMZXfYlrw:nAG_YBmbXHI:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=zYkMZXfYlrw:nAG_YBmbXHI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=zYkMZXfYlrw:nAG_YBmbXHI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=zYkMZXfYlrw:nAG_YBmbXHI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=zYkMZXfYlrw:nAG_YBmbXHI:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=zYkMZXfYlrw:nAG_YBmbXHI:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=zYkMZXfYlrw:nAG_YBmbXHI:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=zYkMZXfYlrw:nAG_YBmbXHI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=zYkMZXfYlrw:nAG_YBmbXHI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=zYkMZXfYlrw:nAG_YBmbXHI:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Sadevcoza-Sharepoint/~4/zYkMZXfYlrw" height="1" width="1"/&gt;</description>
 <comments>http://www.sadev.co.za/content/are-you-using-net-name-correctly-other-interesting-brand-info#comments</comments>
 <category domain="http://www.sadev.co.za/taxonomy/term/12">.NET</category>
 <category domain="http://www.sadev.co.za/category/blog/alm">ALM</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/9">Annoyances</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/38">Development</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/18">Microsoft</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/64">SharePoint</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/56">Windows</category>
 <category domain="http://www.sadev.co.za/category/blog/windows-phone">Windows Phone</category>
 <pubDate>Tue, 26 Jul 2011 13:58:53 +0000</pubDate>
 <dc:creator>Robert MacLean</dc:creator>
 <guid isPermaLink="false">610 at http://www.sadev.co.za</guid>
<feedburner:origLink>http://www.sadev.co.za/content/are-you-using-net-name-correctly-other-interesting-brand-info</feedburner:origLink></item>
<item>
 <title>Community night in August</title>
 <link>http://feedproxy.google.com/~r/Sadevcoza-Sharepoint/~3/RU6lt4k0BnA/community-night-august</link>
 <description>&lt;h3&gt;Important Notice for August 2011&lt;/h3&gt;  &lt;p&gt;Community night is normally the second Tuesday of the month, however since that is a public holiday it has been moved to &lt;u&gt;Monday the 15th of August!&lt;/u&gt;&lt;/p&gt;  &lt;h3&gt;What is community night?&lt;/h3&gt;  &lt;p&gt;For those who do not know this is a FREE event that happens monthly where a variety of user groups get together at Microsoft's offices. User groups are not influenced by Microsoft, they just use the facilities. User groups that are there on a regular basis:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Information Worker: Technical focused SharePoint &amp;amp; Office&lt;/li&gt;    &lt;li&gt;Business User Workshops: User group that looks at the issues that face power users in enterprises. This month the understanding where a portal ends and CRM begins.&lt;/li&gt;    &lt;li&gt;Game Dev: One of the biggest with plenty of game developers &amp;amp; artists getting together.&lt;/li&gt;    &lt;li&gt;JavaScript: For all you JS fixes&lt;/li&gt;    &lt;li&gt;Mobi: My good friend &lt;a href="http://www.rudigrobler.net" target="_blank"&gt;Rudi Grobler&lt;/a&gt; hosts this group focused on mobile (iPhone, Android, Symbian and Windows Phone)&lt;/li&gt;    &lt;li&gt;UX: For those who understand there is more than 16 colours&lt;/li&gt;    &lt;li&gt;Architecture: For architects of any IT systems!&lt;/li&gt;    &lt;li&gt;Languages: For developers who are interested in learning the pros &amp;amp; cons of other languages.&lt;/li&gt;    &lt;li&gt;SQL: The fantastic Gail Shaw runs the best SQL user group anywhere!&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;font face="Calibri"&gt;There is also FREE beer, cool drinks &amp;amp; pizza! &lt;/font&gt;&lt;/p&gt;  &lt;h3&gt;Where is Microsoft’s offices?&lt;/h3&gt;  &lt;p&gt;Microsoft Bryanston Office   &lt;br /&gt;3012 William Nicol Drive    &lt;br /&gt;Bryanston    &lt;br /&gt;2191 Johannesburg    &lt;br /&gt;South Africa&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.microsoft.com/southafrica/mscorp/bryanston.mspx" target="_blank"&gt;Click here for map and more details.&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Times?&lt;/h3&gt;  &lt;p&gt;Various user groups starts at different times. I think the first UG kicks off at 16:00 and it can run to 21:00.   &lt;br /&gt;However depends if you attend multiple UG, stay for passage conversation, etc…&lt;/p&gt;  &lt;p&gt;So up to you, I have nights where I arrived after 17:30 and other times left at 18:00, no pressure!&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=RU6lt4k0BnA:L-45zVMuesM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=RU6lt4k0BnA:L-45zVMuesM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=RU6lt4k0BnA:L-45zVMuesM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=RU6lt4k0BnA:L-45zVMuesM:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=RU6lt4k0BnA:L-45zVMuesM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=RU6lt4k0BnA:L-45zVMuesM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=RU6lt4k0BnA:L-45zVMuesM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=RU6lt4k0BnA:L-45zVMuesM:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=RU6lt4k0BnA:L-45zVMuesM:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=RU6lt4k0BnA:L-45zVMuesM:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=RU6lt4k0BnA:L-45zVMuesM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=RU6lt4k0BnA:L-45zVMuesM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=RU6lt4k0BnA:L-45zVMuesM:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Sadevcoza-Sharepoint/~4/RU6lt4k0BnA" height="1" width="1"/&gt;</description>
 <comments>http://www.sadev.co.za/content/community-night-august#comments</comments>
 <category domain="http://www.sadev.co.za/taxonomy/term/12">.NET</category>
 <category domain="http://www.sadev.co.za/category/blog/alm">ALM</category>
 <category domain="http://www.sadev.co.za/category/blog/alm-rangers">ALM Rangers</category>
 <category domain="http://www.sadev.co.za/category/blog/community-night">Community Night</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/38">Development</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/66">Events</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/23">Gaming</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/30">Internet Explorer</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/18">Microsoft</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/7">MSCRM</category>
 <category domain="http://www.sadev.co.za/category/blog/presentations-posters-cheat-sheets">Presentations, Posters &amp; Cheat Sheets</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/64">SharePoint</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/49">SQL</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/19">Virtualisation</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/56">Windows</category>
 <category domain="http://www.sadev.co.za/category/blog/windows-phone">Windows Phone</category>
 <pubDate>Tue, 26 Jul 2011 13:35:43 +0000</pubDate>
 <dc:creator>Robert MacLean</dc:creator>
 <guid isPermaLink="false">609 at http://www.sadev.co.za</guid>
<feedburner:origLink>http://www.sadev.co.za/content/community-night-august</feedburner:origLink></item>
<item>
 <title>Security is hard for users, so let us clean up with NEAT &amp; SPRUCE</title>
 <link>http://feedproxy.google.com/~r/Sadevcoza-Sharepoint/~3/Z02m2cKP2rg/security-hard-users-so-let-us-clean-neat-spruce</link>
 <description>&lt;p&gt;Microsoft used to be a horrid company with regards to their security, then they sat down and made security a quality gate – we do not ship if security is wrong. How do they know what is wrong? A 24 page guideline with 68 bullet points?! Perfect holiday reading &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smilewithtongueout" alt="Smile with tongue out" src="/files/wlEmoticon-smilewithtongueout_3.png" /&gt;&lt;/p&gt;  &lt;p&gt;The &lt;a href="http://blogs.msdn.com/b/sdl" target="_blank"&gt;security development lifecycle team&lt;/a&gt; has recently tried to help us developers improve our applications so we not the next company with a bad security issues with two acronyms which will improve security notices to our users: NEAT &amp;amp; SPRUCE&lt;/p&gt;  &lt;p&gt;What is NEAT?&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;&lt;font color="#ffc000"&gt;N:&lt;/font&gt;&lt;/strong&gt; Necessary – Only show messages that you need. If you can take a safe action automatically or defer the message, do that!&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;&lt;font color="#ffc000"&gt;E:&lt;/font&gt;&lt;/strong&gt; Explained – If you do interrupt the user, explain in everything to the user. EVERYTHING?! Yes, and the SPRUCE acronym will help explain what everything is. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;&lt;font color="#ffc000"&gt;A:&lt;/font&gt;&lt;/strong&gt; Actionable – A message should only be presented to the user if there is steps the user can take to make the right decision. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;&lt;font color="#ffc000"&gt;T:&lt;/font&gt;&lt;/strong&gt; Tested – A security message needs to be tested. TDD, Usability Testing, Visual Inspection, every test.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;font face="Calibri"&gt;So, we need to show the message now – what do we put in there? SPRUCE:&lt;/font&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;font face="Calibri"&gt;&lt;strong&gt;&lt;font color="#ffc000"&gt;S:&lt;/font&gt;&lt;/strong&gt; Source – Why are we showing this message? Did a website do something or a file or a user action? Tell the user.&lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font face="Calibri"&gt;&lt;strong&gt;&lt;font color="#ffc000"&gt;P:&lt;/font&gt;&lt;/strong&gt; Process – Give the user the steps they need to go through to make sure they make the right decision.&lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font face="Calibri"&gt;&lt;strong&gt;&lt;font color="#ffc000"&gt;R:&lt;/font&gt;&lt;/strong&gt; Risk – Explain what the consequences of getting the decision wrong.&lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font face="Calibri"&gt;&lt;strong&gt;&lt;font color="#ffc000"&gt;U:&lt;/font&gt;&lt;/strong&gt; Unique – If your software knows everything, do the right thing automatically. So if you are showing the message, it means the user has unique information that is needed to make the decision. Explain what information is needed (slightly similar to P).&lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font face="Calibri"&gt;&lt;strong&gt;&lt;font color="#ffc000"&gt;C:&lt;/font&gt;&lt;/strong&gt; Choices – Show the user all the options and recommend the safer one.&lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font face="Calibri"&gt;&lt;strong&gt;&lt;font color="#ffc000"&gt;E:&lt;/font&gt;&lt;/strong&gt; Evidence – Provide any additional information that the user may need to make the decision. &lt;/font&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Now that the training is done, let’s look at real implementations:&lt;/p&gt;  &lt;h4&gt;A web page contains secure &amp;amp; nonsecure content&lt;/h4&gt;  &lt;p&gt;Here is what the dialog looked like in the bad old days of IE6:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.sadev.co.za/files/112.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="11[2]" border="0" alt="11[2]" src="/files/112_thumb.jpg" width="244" height="113" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;In IE 9 where this logic has been applied:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.sadev.co.za/files/ie9.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="ie9" border="0" alt="ie9" src="/files/ie9_thumb.png" width="777" height="43" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Let’s look at the differences:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;N (Necessary) has been applied – previously this was a blocking model UI, which the user was forced to deal with to continue working. Today it shows discreetly with at the bottom and only if the user needs to work with this they have to, otherwise ignoring it.&lt;/li&gt;    &lt;li&gt;E (Explained) has had been done with the &lt;em&gt;What’s the risk?&lt;/em&gt; – which shows the dialog below. It is not perfect as it hasn't followed SPRUCE fully but it is a good improvement.&lt;/li&gt;    &lt;li&gt;A (Actionable) has been applied – previously you had both a yes &amp;amp; no, now we have one action that can be done. Close or ignore and nothing happens.&lt;/li&gt;    &lt;li&gt;T (Tested) there is some weird language issues with the old one especially if English isn’t your primary language because of the yes/no not being perfectly clear. The new dialog has a single very clear labelled button!&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.sadev.co.za/files/whats-the-risk.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="whats the risk" border="0" alt="whats the risk" src="/files/whats-the-risk_thumb.png" width="286" height="570" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h4&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/h4&gt;  &lt;h4&gt;Takeaways&lt;/h4&gt;  &lt;p&gt;Now that we have looked at how it can help you and how to do it, attached is a nice simple 3 page document with more details and reminders about this. GO IMPROVE YOUR APPLICATIONS!&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;font face="Calibri"&gt;&lt;/font&gt;&lt;/p&gt;&lt;table id="attachments" class="sticky-enabled"&gt;
 &lt;thead&gt;&lt;tr&gt;&lt;th&gt;Attachment&lt;/th&gt;&lt;th&gt;Size&lt;/th&gt; &lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
 &lt;tr class="odd"&gt;&lt;td&gt;&lt;a href="http://www.sadev.co.za/files/NEATandSPRUCEatMicrosoft-final.docx"&gt;NEATandSPRUCEatMicrosoft-final.docx&lt;/a&gt;&lt;/td&gt;&lt;td&gt;68.68 KB&lt;/td&gt; &lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=Z02m2cKP2rg:7rM3VO83ri8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=Z02m2cKP2rg:7rM3VO83ri8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=Z02m2cKP2rg:7rM3VO83ri8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=Z02m2cKP2rg:7rM3VO83ri8:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=Z02m2cKP2rg:7rM3VO83ri8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=Z02m2cKP2rg:7rM3VO83ri8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=Z02m2cKP2rg:7rM3VO83ri8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=Z02m2cKP2rg:7rM3VO83ri8:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=Z02m2cKP2rg:7rM3VO83ri8:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=Z02m2cKP2rg:7rM3VO83ri8:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=Z02m2cKP2rg:7rM3VO83ri8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=Z02m2cKP2rg:7rM3VO83ri8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=Z02m2cKP2rg:7rM3VO83ri8:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Sadevcoza-Sharepoint/~4/Z02m2cKP2rg" height="1" width="1"/&gt;</description>
 <comments>http://www.sadev.co.za/content/security-hard-users-so-let-us-clean-neat-spruce#comments</comments>
 <category domain="http://www.sadev.co.za/taxonomy/term/12">.NET</category>
 <category domain="http://www.sadev.co.za/category/blog/alm">ALM</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/38">Development</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/30">Internet Explorer</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/18">Microsoft</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/64">SharePoint</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/16">Something Different</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/49">SQL</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/31">Tools &amp; Apps</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/56">Windows</category>
 <enclosure url="http://www.sadev.co.za/files/NEATandSPRUCEatMicrosoft-final.docx" length="70328" type="application/vnd.openxmlformats-officedocument.wordprocessingml.document" />
 <pubDate>Mon, 11 Jul 2011 11:34:35 +0000</pubDate>
 <dc:creator>Robert MacLean</dc:creator>
 <guid isPermaLink="false">604 at http://www.sadev.co.za</guid>
<feedburner:origLink>http://www.sadev.co.za/content/security-hard-users-so-let-us-clean-neat-spruce</feedburner:origLink></item>
<item>
 <title>Rapid Business Development: Lightswitch vs. Dynamics CRM vs. SharePoint 2010 vs. ASP.NET MVC 3</title>
 <link>http://feedproxy.google.com/~r/Sadevcoza-Sharepoint/~3/_c-ww8Qd8mo/rapid-business-development-lightswitch-vs-dynamics-crm-vs-sharepoint-2010-vs-aspnet-mvc-3</link>
 <description>&lt;p&gt;In this post I am going to look at comparing four technologies that can be used to build business applications easily. This post was inspired by how similar a number of products have become over the last few years and more importantly how the new kid on the block &lt;a href="http://www.microsoft.com/visualstudio/en-us/lightswitch" target="_blank"&gt;Visual Studio Lightswitch&lt;/a&gt;, which is a specialised rapid business tool development platform built on top of Visual Studio, is going to affect this eco-system. It is important to also remember that this is being written in the Lightswitch Beta 2 timeframe, so some details may change by launch.&lt;/p&gt;  &lt;p&gt;Lightswitch feels very similar to me, to another product I have worked with in the past: &lt;a href="http://crm.dynamics.com" target="_blank"&gt;Dynamics CRM&lt;/a&gt;, which is a &lt;strong&gt;C&lt;/strong&gt;ustomer &lt;strong&gt;R&lt;/strong&gt;elationship &lt;strong&gt;M&lt;/strong&gt;anagement tool from Microsoft. CRM does very well in the &lt;a href="http://blogs.msdn.com/b/crm/archive/2010/05/11/three-new-xrm-white-papers.aspx" target="_blank"&gt;xRM&lt;/a&gt; (x = extensible) scenario, where I think it will come up against Lightswitch a lot. I haven’t had an opportunity to use the latest CRM release yet, so I have had to rely on the help of experts to fill in my gaps!&lt;/p&gt;  &lt;p&gt;SharePoint 2010 is another product I have worked with, can of course be used for building business applications quickly cause it is the “operating system of the enterprise” and has good features for these types of applications. &lt;/p&gt;  &lt;p&gt;Finally, while watching &lt;a href="http://www.hanselman.com" target="_blank"&gt;Scott Hanselman&lt;/a&gt; do the ASP.NET MVC 3 demo in the &lt;a href="http://channel9.msdn.com/Events/MIX/MIX11/KEY01" target="_blank"&gt;MIX 11 Keynote&lt;/a&gt;, I was struck with how that is very close to a rapid business user development tool with all the new scaffolding features. ASP.NET MVC is a real outsider in this group because it is first a development toolset for web development and, maybe a rapid tool second where the rest are rapid development platforms or tools first.&lt;/p&gt;  &lt;p&gt;I think the differences between these four are very interesting and while each has it’s strong &amp;amp; weak points, this should definitely not be looked at as a pick one only post. There are many scenarios where you want to combine them for even better experiences. &lt;/p&gt;  &lt;p&gt;I have broken down the issues into twenty one(!) aspects (key points we can compare them against each other) which are grouped into six scenarios to make it easier to digest. Each scenario starts with a list of the aspects and a brief description followed by a comparison table of those aspects.&lt;/p&gt;  &lt;h4&gt;Starting&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;Ready to go out of the box: Once installed, can it do anything? Seems silly, but quick turn around at the start, even if actual development is longer is important as it helps with prototyping, shows some rapid development and hints at how hard it is to learn (for me at least, if it does something I find I can experiment and learn quickly). Important to note, we are not looking at making it align with your company needs here, we just want it to do something. Eating CPU cycles &amp;amp; RAM is not something either. &lt;/li&gt;    &lt;li&gt;Northwind Style Sample development costs: This aspect looks further than the above aspect and looks at how much more would it take to get it tailored for a company, like the fictional Northwind, to have a XRM type system as it can be done across all four. Fewer $ signs means less time and/or resources for the functionality. &lt;/li&gt; &lt;/ul&gt;  &lt;table border="1" cellspacing="0" cellpadding="2" width="218"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top"&gt;&amp;#160;&lt;/td&gt;        &lt;td valign="top" width="109"&gt;Lightswitch (LS)&lt;/td&gt;        &lt;td valign="top" width="107"&gt;Dynamics CRM&lt;/td&gt;        &lt;td valign="top"&gt;SharePoint 2010 (SP)&lt;/td&gt;        &lt;td valign="top"&gt;ASP.NET MVC&lt;/td&gt;        &lt;td valign="top"&gt;My Thoughts&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;Ready to go out of the box&lt;/td&gt;        &lt;td valign="top" width="109"&gt;Fast&lt;/td&gt;        &lt;td valign="top" width="107"&gt;Fastest&lt;/td&gt;        &lt;td valign="top"&gt;Fast&lt;/td&gt;        &lt;td valign="top"&gt;Slowest&lt;/td&gt;        &lt;td valign="top"&gt;LS &amp;amp; MVC need development, while SP needs at least 5min of tailoring. CRM, is ready to go once installed.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;Northwind Style Sample development costs &lt;/td&gt;        &lt;td valign="top" width="109"&gt;$&lt;/td&gt;        &lt;td valign="top" width="107"&gt;$$&lt;/td&gt;        &lt;td valign="top"&gt;$$&lt;/td&gt;        &lt;td valign="top"&gt;$$$&lt;/td&gt;        &lt;td valign="top"&gt;ASP.NET MVC has the highest development costs as so little is out of the box. Lightswitch excels in this scenario.&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;h4&gt;Finishing&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;Cost for on-premise deployments: This looks at the money cost for licensing to get the solution up and running on premise (i.e. in your company). Licensing is, of course, flexible and this will vary based on who you are – so this is not indicative for all. It does not include such things as server hardware or common costs, for example operating system licensing. &lt;/li&gt;    &lt;li&gt;Deployment Complexity: Getting a solution up and running shouldn’t be difficult for an organisation and a lot of time can be lost (and costs incurred) changing, upgrading and troubleshooting systems that do not want to be deployed. &lt;/li&gt;    &lt;li&gt;Deployment Documentation: When it happens that you need to deploy, having a wealth of documentation (be that video’s, best practice guides, troubleshooting material) is vital and plays a large part in getting a solution up that works every time. &lt;/li&gt; &lt;/ul&gt;  &lt;table border="1" cellspacing="0" cellpadding="2" width="218"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top"&gt;&amp;#160;&lt;/td&gt;        &lt;td valign="top" width="109"&gt;Lightswitch (LS)&lt;/td&gt;        &lt;td valign="top" width="107"&gt;Dynamics CRM&lt;/td&gt;        &lt;td valign="top"&gt;SharePoint 2010 (SP)&lt;/td&gt;        &lt;td valign="top"&gt;ASP.NET MVC&lt;/td&gt;        &lt;td valign="top"&gt;My Thoughts&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;Cost for on premise deployments&lt;/td&gt;        &lt;td valign="top" width="109"&gt;$$$          &lt;br /&gt;          &lt;br /&gt;Unknown.           &lt;br /&gt;Likely cost per developer seat.           &lt;br /&gt;No per user costs. &lt;/td&gt;        &lt;td valign="top" width="107"&gt;$ to $$$          &lt;br /&gt;          &lt;br /&gt;Cost per user &amp;amp; cost per server. Visual Studio only if you are doing integrations or custom workflows.&lt;/td&gt;        &lt;td valign="top"&gt;$$$$ to $$$$+          &lt;br /&gt;          &lt;br /&gt;Cost per user &amp;amp; cost per server. Visual Studio licenses for any serious work.&lt;/td&gt;        &lt;td valign="top"&gt;$$          &lt;br /&gt;          &lt;br /&gt;Visual Studio licenses.No per user costs.&lt;/td&gt;        &lt;td valign="top"&gt;CRM on the small scale with low development is very cheap but since you pay per user can get expensive. LS &amp;amp; MVC only have development software costs, which is more expensive up front but do not increase as you add users to the system.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;Deployment Complexity&lt;/td&gt;        &lt;td valign="top" width="109"&gt;Medium&lt;/td&gt;        &lt;td valign="top" width="107"&gt;Hard&lt;/td&gt;        &lt;td valign="top"&gt;Hardest&lt;/td&gt;        &lt;td valign="top"&gt;Easy&lt;/td&gt;        &lt;td valign="top"&gt;LS, CRM &amp;amp; SP all have requirements that they need to work, in increasing deployment complexity, but CRM &amp;amp; SP are significantly harder than LS though due to their more complete product nature. MVC is easy because there is no constraints from it (other than a web server).&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;Deployment Documentation&lt;/td&gt;        &lt;td valign="top" width="109"&gt;Yes&lt;/td&gt;        &lt;td valign="top" width="107"&gt;Yes&lt;/td&gt;        &lt;td valign="top"&gt;Yes&lt;/td&gt;        &lt;td valign="top"&gt;No&lt;/td&gt;        &lt;td valign="top"&gt;Only MVC has no official documentation, which makes sense as it is a development tool. All four have GREAT communities to help as well!&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;ul&gt;&lt;!--EndFragment--&gt;&lt;/ul&gt;  &lt;h4&gt;User Experience &lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;Front End Technology: A good looking, feature rich UI can seriously ease adoption, and what we are looking at here is the richness level of technology used for the out of the box front end user interface. &lt;/li&gt;    &lt;li&gt;How good the standard UI looks: Completely subjective and really this is based on what I think looks best. &lt;/li&gt;    &lt;li&gt;Flexibility of out of box front end: In this aspect we are concerned about how easy it is to adjust and tweak the out of the box front end. &lt;/li&gt;    &lt;li&gt;Themability : Corporate branding is massive business and making sure the application out of the box looks like it is part of your business is important. It is important to note that both CRM &amp;amp; SharePoint can have custom front ends built which enable this scenario, but that requires extra development, and we are focusing on the out of the box options here and assuming you have the theme built already. &lt;/li&gt; &lt;/ul&gt;  &lt;table border="1" cellspacing="0" cellpadding="2" width="218"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top"&gt;&amp;#160;&lt;/td&gt;        &lt;td valign="top" width="109"&gt;Lightswitch (LS)&lt;/td&gt;        &lt;td valign="top" width="107"&gt;Dynamics CRM&lt;/td&gt;        &lt;td valign="top"&gt;SharePoint 2010 (SP)&lt;/td&gt;        &lt;td valign="top"&gt;ASP.NET MVC&lt;/td&gt;        &lt;td valign="top"&gt;My Thoughts&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;Front End Technology&lt;/td&gt;        &lt;td valign="top" width="109"&gt;Silverlight.          &lt;br /&gt;          &lt;br /&gt;Supports out of browser (desktop) &amp;amp; in browser&lt;/td&gt;        &lt;td valign="top" width="107"&gt;Web          &lt;br /&gt;          &lt;br /&gt;Just ASP.NET &lt;/td&gt;        &lt;td valign="top"&gt;Web          &lt;br /&gt;          &lt;br /&gt;ASP.NET under the covers with sprinklings of Silverlight&lt;/td&gt;        &lt;td valign="top"&gt;ASP.NET&lt;/td&gt;        &lt;td valign="top"&gt;LS clearly best here, since it will give the richest UI out of the box. ASP.NET MVC out of the box scaffolding isn’t pretty but can easily be improved. &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;How good the standard UI looks (very subjective)&lt;/td&gt;        &lt;td valign="top" width="109"&gt;Low&lt;/td&gt;        &lt;td valign="top" width="107"&gt;Medium&lt;/td&gt;        &lt;td valign="top"&gt;Very. Low&lt;/td&gt;        &lt;td valign="top"&gt;Depends on your web designer&lt;/td&gt;        &lt;td valign="top"&gt;This is the most subjective aspect: LS &amp;amp; SP both have a fairly plain out of the box UI but SP has a bad UX to go with it. CRM is much better out of the box and if you are going down the MVC route you will likely be taking advantage of the best UI thanks to the complete flexibility – but that depends on how good your designers are.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;Flexibility of UI development in the tool &lt;/td&gt;        &lt;td valign="top" width="109"&gt;High&lt;/td&gt;        &lt;td valign="top" width="107"&gt;Medium&lt;/td&gt;        &lt;td valign="top"&gt;Medium&lt;/td&gt;        &lt;td valign="top"&gt;High&lt;/td&gt;        &lt;td valign="top"&gt;MVC &amp;amp; LS can almost do anything on the front end, especially if you combined MVC with Silverlight. SharePoint &amp;amp; CRM too have lots of options and work with Silverlight. &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;Themability &lt;/td&gt;        &lt;td valign="top" width="109"&gt;Medium&lt;/td&gt;        &lt;td valign="top" width="107"&gt;Low&lt;/td&gt;        &lt;td valign="top"&gt;Medium&lt;/td&gt;        &lt;td valign="top"&gt;High&lt;/td&gt;        &lt;td valign="top"&gt;The flexibility of MVC is highest as it is a pure programming, with LS following up thanks to it’s strong theme support. SharePoint can be themed but not the same level as LS. CRM will always look like CRM! &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;h4&gt;Extensibility&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;API for integration: In the short term having an API means it is easy to get data into your new solution, in the medium term it means more ways to sync data and mash up your systems and in the long term it gives you a way to get your data out. It is vital to have an API. &lt;/li&gt;    &lt;li&gt;Marketplace: Apple kicked the idea of having an AppStore into reality for many of us and now having a marketplace to get extensions, customisations or themes is an important aspect. I am ignoring public sites, like Codeplex for example, and only focusing on an official marketplaces. Galleries are just marketplaces with no vetting, which means they are bigger but the quality bar is not guaranteed. &lt;/li&gt;    &lt;li&gt;Additional Authentication Options: Only your employees or customers (which may be everyone if you are lucky enough) should access your solutions. What do we get out of the box to limit access to the system? All four systems support Windows &amp;amp; Forms based authentication so I am only listing other options which are available. &lt;/li&gt;    &lt;li&gt;Permission Structure (Authorisation): Being able to control what parts of a solution you can access, once you have logged in is also vital and having a lot of flexibility in this space is also important as very seldom will one structure work for everyone. &lt;/li&gt; &lt;/ul&gt;  &lt;table border="1" cellspacing="0" cellpadding="2" width="218"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top"&gt;&amp;#160;&lt;/td&gt;        &lt;td valign="top" width="109"&gt;Lightswitch (LS)&lt;/td&gt;        &lt;td valign="top" width="107"&gt;Dynamics CRM&lt;/td&gt;        &lt;td valign="top"&gt;SharePoint 2010 (SP)&lt;/td&gt;        &lt;td valign="top"&gt;ASP.NET MVC&lt;/td&gt;        &lt;td valign="top"&gt;My Thoughts&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;API for integration&lt;/td&gt;        &lt;td valign="top" width="109"&gt;Yes&lt;/td&gt;        &lt;td valign="top" width="107"&gt;Yes &lt;/td&gt;        &lt;td valign="top"&gt;Yes - at least 5 of them.&lt;/td&gt;        &lt;td valign="top"&gt;N/A&lt;/td&gt;        &lt;td valign="top"&gt;In MVC you could build one, oData for instance, but it doesn’t have one out of the box. LS creates a WCF RIA Service for us. CRM &amp;amp; SP both have API’s, but SP is more complex as it supports so many different API’s with different subsets of features supported.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;Marketplace&lt;/td&gt;        &lt;td valign="top" width="109"&gt;Once it is released a gallery will exist.&lt;/td&gt;        &lt;td valign="top" width="107"&gt;Yes&lt;/td&gt;        &lt;td valign="top"&gt;Nope&lt;/td&gt;        &lt;td valign="top"&gt;Gallery available&lt;/td&gt;        &lt;td valign="top"&gt;CRM leads here in a big way with a REAL marketplace. ASP.NET MVC has it’s own gallery plus a strong 3rd party marketplace ecosystem.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;Additional Authentication Options&lt;/td&gt;        &lt;td valign="top" width="109"&gt;Anonymous and more available through custom development (e.g. Windows Live). Claims based authentication(custom development required).&lt;/td&gt;        &lt;td valign="top" width="107"&gt;Claims based authentication via STS&lt;/td&gt;        &lt;td valign="top"&gt;Anonymous and more available through custom development (e.g. Windows Live). Claims based authentication(custom development required).&lt;/td&gt;        &lt;td valign="top"&gt;Anonymous and more available through custom development (e.g. Windows Live). Claims based authentication(custom development required).&lt;/td&gt;        &lt;td valign="top"&gt;&amp;#160;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;Permission Structure (Authorisation)&lt;/td&gt;        &lt;td valign="top" width="109"&gt;Very basic and really just a half a step ahead of editing XML that MVC needs.&lt;/td&gt;        &lt;td valign="top" width="107"&gt;Fantastic out of the box option, plus plenty of extensibility if needed.&lt;/td&gt;        &lt;td valign="top"&gt;Good structure with many levels of customisation.          &lt;br /&gt;Out of the box is very simple.&lt;/td&gt;        &lt;td valign="top"&gt;Basic support for it but can be extended through development. A lot of XML work though may be needed. &lt;/td&gt;        &lt;td valign="top"&gt;LS &amp;amp; MVC are the lightest here, both supports authorisation options but enforcing it is up to the developer to implement. LS is better slightly better at guiding the developer and needs no XML editing. SP authorisation is as varied &amp;amp; powerful as what CRM offers. However SP can easily get messy, users can break permission inheritance, while CRM enforces authorisation all the time and makes for a better structured environment. &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;h4&gt;Information Worker Features&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;Offline support: Being able to work when you are not in the office is a vital need for many people. So how do these platforms enable that scenario. In theory it is always possible to build this, so we are just looking at the out of box offering. &lt;/li&gt;    &lt;li&gt;Easily Import Data: How do we get information into the solution, besides the API? Does the product make this easy with out of the box tooling? &lt;/li&gt;    &lt;li&gt;Printing: Despite the promise of a paperless office, it still is not the case and being able to print is important, even if it is just to XPS or PDF for invoicing. &lt;/li&gt;    &lt;li&gt;Office Integration: Integration into Microsoft Office products (i.e. Word, Excel, Outlook, PowerPoint, Access, Publisher, InfoPath &amp;amp; OneNote) means that your IW’s will be able to work in the tools that they are comfortable with, easing adoption and productivity. &lt;/li&gt; &lt;/ul&gt;  &lt;table border="1" cellspacing="0" cellpadding="2" width="218"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top"&gt;&amp;#160;&lt;/td&gt;        &lt;td valign="top" width="109"&gt;Lightswitch (LS)&lt;/td&gt;        &lt;td valign="top" width="107"&gt;Dynamics CRM&lt;/td&gt;        &lt;td valign="top"&gt;SharePoint 2010 (SP)&lt;/td&gt;        &lt;td valign="top"&gt;ASP.NET MVC&lt;/td&gt;        &lt;td valign="top"&gt;My Thoughts&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;Offline support&lt;/td&gt;        &lt;td valign="top" width="109"&gt;No&lt;/td&gt;        &lt;td valign="top" width="107"&gt;Yes&lt;/td&gt;        &lt;td valign="top"&gt;Yes&lt;/td&gt;        &lt;td valign="top"&gt;No&lt;/td&gt;        &lt;td valign="top"&gt;Being able to work offline is important if you are a roaming user. LS &amp;amp; MVC offer nothing in this space while CRM &amp;amp; SP both offer offline via Outlook.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;Easily Import Data (out of the box)&lt;/td&gt;        &lt;td valign="top" width="109"&gt;Nope&lt;/td&gt;        &lt;td valign="top" width="107"&gt;Yes, from CVS.&lt;/td&gt;        &lt;td valign="top"&gt;Yes. Multiple options.&lt;/td&gt;        &lt;td valign="top"&gt;Nope&lt;/td&gt;        &lt;td valign="top"&gt;In all cases there are tools and other ways to import data but CRM &amp;amp; SP have an out of the box options.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;Printing (out of the box)&lt;/td&gt;        &lt;td valign="top" width="109"&gt;Nope&lt;/td&gt;        &lt;td valign="top" width="107"&gt;Yes&lt;/td&gt;        &lt;td valign="top"&gt;Yes – Poor&lt;/td&gt;        &lt;td valign="top"&gt;Browser Level&lt;/td&gt;        &lt;td valign="top"&gt;LS &amp;amp; MVC can have custom development solutions for printing,&amp;#160; other than that they both offer nothing out of the box. As browser printing has improved MVC has a slight advantage being HTML based normally. SP has printing, but it is very poor. CRM leads the way here with a great print scenario.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;Office Integration&lt;/td&gt;        &lt;td valign="top" width="109"&gt;Low          &lt;br /&gt;          &lt;br /&gt;One way export to Excel.           &lt;br /&gt;          &lt;br /&gt;Others can be custom developed&lt;/td&gt;        &lt;td valign="top" width="107"&gt;Medium          &lt;br /&gt;          &lt;br /&gt;One way to Excel. Mail merge with Word &amp;amp; Outlook.           &lt;br /&gt;Deep integration with Outlook is available too.&lt;/td&gt;        &lt;td valign="top"&gt;High          &lt;br /&gt;          &lt;br /&gt;Only Publisher doesn’t have some integration with SharePoint.           &lt;br /&gt;Every other Office product does, some like Excel are one way while others like Access are two way.           &lt;br /&gt;          &lt;br /&gt;SP internally has features that understand Office files too, for example PowerPoint Libraries show thumbnails.&lt;/td&gt;        &lt;td valign="top"&gt;None          &lt;br /&gt;          &lt;br /&gt;Can be custom developed.&lt;/td&gt;        &lt;td valign="top"&gt;&amp;#160;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;ul&gt;&lt;!--EndFragment--&gt;&lt;/ul&gt;  &lt;ul&gt;&lt;!--EndFragment--&gt;&lt;/ul&gt;  &lt;h4&gt;Other&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;Databases Supported: Where the data can come from for your application is a critical piece of the puzzle because it means the difference between building ETL solutions to handle moving it around if the source is supported or having it just work. &lt;/li&gt;    &lt;li&gt;Minimum Skills For Tailoring: Tailoring is what I refer to when I think of customisation of a system, without the need for a programming language. At some point you will need a developer but how far away that is and what can be done by a analyst or super user early on is important from a time to solution and cost perspective. Lower is better here. &lt;/li&gt;    &lt;li&gt;Can run in the cloud?: If you not thinking about how you can leverage the cloud, then you are not thinking. Making sure the solutions can cater for the cloud is an important consideration. All four solutions can run in the cloud but how do they run is also important &lt;/li&gt;    &lt;li&gt;ALM Experience: How does this tool work with a full ALM experience? Can I unit test it easily? Will it go into source control easily and what happens when multiple developers are updating the same files? How about build server and development tool integration? All important questions in understanding a complete picture of that these tools cost or what you sacrfice with some of them. &lt;/li&gt;    &lt;li&gt;Requires Silverlight: Despite decent market penetration and ease of deployment in corporate scenarios, the requirement for Silverlight can be a deterrent to business, especially those where the CEO uses an iPad2 &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smilewithtongueout" alt="Smile with tongue out" src="http://www.sadev.co.za/files/wlEmoticon-smilewithtongueout_1.png" /&gt;. This is not answered in the table as only Lightswitch requires Silverlight. CRM has no dependencies, SharePoint has a fall back mode and if you used Silverlight with MVC it would be possible to have a fallback mode, provided you developed it. &lt;/li&gt;    &lt;li&gt;Data performance: This is also not in the table since it only applies to Lightswitch. For CRM, MVC &amp;amp; SharePoint I assume your front end (web) is always close enough, for example the same LAN, to the database but in Lightswitch you can really separate them. Here it is important to note Lightswitch is NOT great with data performance between backend &amp;amp; frontend. It sends massive amounts of data around. In my view it really does not feel optimised for WAN scenarios. &lt;/li&gt; &lt;/ul&gt;  &lt;table border="1" cellspacing="0" cellpadding="2" width="218"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top"&gt;&amp;#160;&lt;/td&gt;        &lt;td valign="top" width="109"&gt;Lightswitch (LS)&lt;/td&gt;        &lt;td valign="top" width="107"&gt;Dynamics CRM&lt;/td&gt;        &lt;td valign="top"&gt;SharePoint 2010 (SP)&lt;/td&gt;        &lt;td valign="top"&gt;ASP.NET MVC&lt;/td&gt;        &lt;td valign="top"&gt;My Thoughts&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;Databases Supported&lt;/td&gt;        &lt;td valign="top" width="109"&gt;SQL Server, SQL Azure, SharePoint or anything supported by WCF RIA services.&lt;/td&gt;        &lt;td valign="top" width="107"&gt;SQL Server&lt;/td&gt;        &lt;td valign="top"&gt;SQL Server normally.          &lt;br /&gt;          &lt;br /&gt;With advanced skills can use external data sources.&lt;/td&gt;        &lt;td valign="top"&gt;For scaffolding anything supported by LinqToSQL or Entity Framework.&lt;/td&gt;        &lt;td valign="top"&gt;LS &amp;amp; MVC feel very close here, however LS has it’s own OM which MVC uses established ones meaning more options in the MVC camp. &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;Minimum Skills For Tailoring&lt;/td&gt;        &lt;td valign="top" width="109"&gt;Intermediate          &lt;br /&gt;&lt;/td&gt;        &lt;td valign="top" width="107"&gt;Lowest          &lt;br /&gt;&lt;/td&gt;        &lt;td valign="top"&gt;Low&lt;/td&gt;        &lt;td valign="top"&gt;Highest&lt;/td&gt;        &lt;td valign="top"&gt;Being able to tailor with less skill is a big plus for CRM &amp;amp; SP. MVC doesn’t have tailoring as it is all development. LS really stuck in the middle ground here – for setting it up I suspect nothing more than power user but that ends much sooner and moves to needed a developer than with CRM and SharePoint.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;Can run in the cloud?&lt;/td&gt;        &lt;td valign="top" width="109"&gt;Platform as a service using SQL Azure for database &amp;amp; compute instances for front end.&lt;/td&gt;        &lt;td valign="top" width="107"&gt;Software as a service: Can get it from Microsoft &amp;amp; Partners at a cost per user per month.&lt;/td&gt;        &lt;td valign="top"&gt;Software as a service: Can get it from Microsoft &amp;amp; Partners at a cost per user per month. Recently launched in beta with Microsoft.&lt;/td&gt;        &lt;td valign="top"&gt;Platform as a service using SQL Azure for database &amp;amp; compute instances for front end.&lt;/td&gt;        &lt;td valign="top"&gt;&amp;#160;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;ALM Experience&lt;/td&gt;        &lt;td valign="top" width="109"&gt;Medium&lt;/td&gt;        &lt;td valign="top" width="107"&gt;Low&lt;/td&gt;        &lt;td valign="top"&gt;High&lt;/td&gt;        &lt;td valign="top"&gt;Highest&lt;/td&gt;        &lt;td valign="top"&gt;ASP.NET MVC is a pure development experience and so works well with ALM. SP2010 plus VS2010 is a great ALM experience (although mocking is difficult). LS &amp;amp; CRM are oddly very similar with customisations in XML though so expect some source control pain. Plugin’s for CRM and LS Extensions are a great ALM scenario. CRM falls short in the unit testing scenario though.          &lt;br /&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;h3&gt;Special Thanks&lt;/h3&gt;  &lt;p&gt;A post this in depth could not have been done without input from my “brain trust”, and I thank each one of you for your help:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Bruce Nicholson &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/b/modonovan/" target="_blank"&gt;Michael o’ Donovan&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.adamcogan.com/" target="_blank"&gt;Adam Cogan&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://zlatandzinic.net" target="_blank"&gt;Zlatan Dzinic&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://crm.georged.id.au/" target="_blank"&gt;George Doubinski&lt;/a&gt; (he has an awesome site, just go an admire the work he put in it) &lt;/li&gt; &lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=_c-ww8Qd8mo:VkLuOJX6GEI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=_c-ww8Qd8mo:VkLuOJX6GEI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=_c-ww8Qd8mo:VkLuOJX6GEI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=_c-ww8Qd8mo:VkLuOJX6GEI:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=_c-ww8Qd8mo:VkLuOJX6GEI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=_c-ww8Qd8mo:VkLuOJX6GEI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=_c-ww8Qd8mo:VkLuOJX6GEI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=_c-ww8Qd8mo:VkLuOJX6GEI:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=_c-ww8Qd8mo:VkLuOJX6GEI:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=_c-ww8Qd8mo:VkLuOJX6GEI:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=_c-ww8Qd8mo:VkLuOJX6GEI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=_c-ww8Qd8mo:VkLuOJX6GEI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=_c-ww8Qd8mo:VkLuOJX6GEI:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Sadevcoza-Sharepoint/~4/_c-ww8Qd8mo" height="1" width="1"/&gt;</description>
 <comments>http://www.sadev.co.za/content/rapid-business-development-lightswitch-vs-dynamics-crm-vs-sharepoint-2010-vs-aspnet-mvc-3#comments</comments>
 <category domain="http://www.sadev.co.za/taxonomy/term/12">.NET</category>
 <category domain="http://www.sadev.co.za/category/blog/alm">ALM</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/38">Development</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/18">Microsoft</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/7">MSCRM</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/64">SharePoint</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/49">SQL</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/31">Tools &amp; Apps</category>
 <pubDate>Tue, 03 May 2011 07:00:20 +0000</pubDate>
 <dc:creator>Robert MacLean</dc:creator>
 <guid isPermaLink="false">591 at http://www.sadev.co.za</guid>
<feedburner:origLink>http://www.sadev.co.za/content/rapid-business-development-lightswitch-vs-dynamics-crm-vs-sharepoint-2010-vs-aspnet-mvc-3</feedburner:origLink></item>
<item>
 <title>Community Night: BE THERE</title>
 <link>http://feedproxy.google.com/~r/Sadevcoza-Sharepoint/~3/1lwiwXD6IRk/community-night-be-there</link>
 <description>&lt;p&gt;&lt;a href="http://www.sadev.co.za/files/Clipboard01_8.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top: 0px; border-right: 0px; padding-top: 0px" title="Clipboard01" border="0" alt="Clipboard01" align="right" src="http://www.sadev.co.za/files/Clipboard01_thumb_11.png" width="234" height="191" /&gt;&lt;/a&gt;Tomorrow is another community night, and I realised that there is MANY people who do not know about this fun event. This is a gathering of communities (or user groups or interest groups if you prefer) who meet on a regular basis. This is a totally free event which takes place the 2nd Tuesday of every month at Microsoft’s offices in Bryanston. &lt;/p&gt;  &lt;p&gt;*Yawn* another Microsoft marketing session? WRONG! This is run by communities and Microsoft has NO say in the content or agenda, unless a community allows them &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smilewithtongueout" alt="Smile with tongue out" src="http://www.sadev.co.za/files/wlEmoticon-smilewithtongueout_0.png" /&gt; Microsoft is really trying to help all communities by providing the facilities – not the content!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.sadev.co.za/files/MobiZA.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top: 0px; border-right: 0px; padding-top: 0px" title="MobiZA" border="0" alt="MobiZA" align="left" src="http://www.sadev.co.za/files/MobiZA_thumb.jpg" width="148" height="44" /&gt;&lt;/a&gt;To give a concrete example &lt;a href="http://www.rudigrobler.net/mobiza"&gt;MobiZA&lt;/a&gt;, a user group focused on mobile development is doing a session on Android! talk about not Microsoft marketing there!&lt;/p&gt;  &lt;p&gt;There is also a variety of communities in a attendance so you can also see things you would not have seen before, for example the business user group or the game developer group! And of course there is plenty of corridors for interesting discussions and some even contain food &amp;amp; drinks!&lt;/p&gt;  &lt;p&gt;Hopefully I have given you a taste of what is in store and why you should attend and you can find more details on the &lt;a href="http://blogs.msdn.com/b/southafrica/" target="_blank"&gt;DPE team blog&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.sadev.co.za/files/map.gif"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top: 0px; border-right: 0px; padding-top: 0px" title="map" border="0" alt="map" align="right" src="http://www.sadev.co.za/files/map_thumb.gif" width="247" height="244" /&gt;&lt;/a&gt;Finally, if you have a user group maybe you should think of joining us at community night? Free venue, projectors, seating, food &amp;amp; drink. Plus plenty of people attend, could be a great way to grow your group. I would personally love to see some Linux &amp;amp; PHP groups there because it would allow those who have not had a chance to see the non-Microsoft world an opportunity and hopefully learn that it isn’t so cut &amp;amp; dry out there.&lt;/p&gt;  &lt;p&gt;Remember, tomorrow 12th April 2011 @ Microsoft (map to the left) from first sessions kick off at 16:30 and second sessions get started between 17:30 &amp;amp; 18:00!&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=1lwiwXD6IRk:NRIaj1tkweg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=1lwiwXD6IRk:NRIaj1tkweg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=1lwiwXD6IRk:NRIaj1tkweg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=1lwiwXD6IRk:NRIaj1tkweg:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=1lwiwXD6IRk:NRIaj1tkweg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=1lwiwXD6IRk:NRIaj1tkweg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=1lwiwXD6IRk:NRIaj1tkweg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=1lwiwXD6IRk:NRIaj1tkweg:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=1lwiwXD6IRk:NRIaj1tkweg:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=1lwiwXD6IRk:NRIaj1tkweg:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=1lwiwXD6IRk:NRIaj1tkweg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=1lwiwXD6IRk:NRIaj1tkweg:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=1lwiwXD6IRk:NRIaj1tkweg:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Sadevcoza-Sharepoint/~4/1lwiwXD6IRk" height="1" width="1"/&gt;</description>
 <comments>http://www.sadev.co.za/content/community-night-be-there#comments</comments>
 <category domain="http://www.sadev.co.za/taxonomy/term/12">.NET</category>
 <category domain="http://www.sadev.co.za/category/blog/alm">ALM</category>
 <category domain="http://www.sadev.co.za/category/blog/community-night">Community Night</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/38">Development</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/66">Events</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/23">Gaming</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/30">Internet Explorer</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/18">Microsoft</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/7">MSCRM</category>
 <category domain="http://www.sadev.co.za/category/blog/presentations-posters-cheat-sheets">Presentations, Posters &amp; Cheat Sheets</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/64">SharePoint</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/49">SQL</category>
 <pubDate>Mon, 11 Apr 2011 06:54:21 +0000</pubDate>
 <dc:creator>Robert MacLean</dc:creator>
 <guid isPermaLink="false">588 at http://www.sadev.co.za</guid>
<feedburner:origLink>http://www.sadev.co.za/content/community-night-be-there</feedburner:origLink></item>
<item>
 <title>SharePoint Holiday Loader</title>
 <link>http://feedproxy.google.com/~r/Sadevcoza-Sharepoint/~3/Gsldd7OBlXE/sharepoint-holiday-loader</link>
 <description>&lt;p&gt;&lt;a href="http://www.sadev.co.za/files/logo.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="logo" border="0" alt="logo" align="right" src="http://www.sadev.co.za/files/logo_thumb.png" width="106" height="104" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I’m sure, as a SharePoint power user, you’ve had the fun of your boss walking up to you and asking why the public holidays aren’t in your SharePoint calendar? (guess what happened to me last week)&lt;/p&gt;  &lt;p&gt;You would think this would be easy, in fact Outlook supports adding holidays to calendars easily. So why isn’t SharePoint easy like that too? &lt;/p&gt;  &lt;p&gt;I’ve had this asked a few times and never had a good answer to do it, so I decided that a simple tool needed to be built to solve this once and for all – Let me introduce SharePoint Holiday Loader (SHL).&lt;/p&gt;  &lt;p&gt;SHL takes a standard holiday file (.hol) and allows you to publish that to a SharePoint list!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.sadev.co.za/files/Clipboard01_7.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Clipboard01" border="0" alt="Clipboard01" src="http://www.sadev.co.za/files/Clipboard01_thumb_10.png" width="512" height="287" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This tool is very easy to use (just need the file, the server and the calendar name) and it is free and open source. You can get the download the tool, source code, leave comments (or complaints) at: &lt;a href="http://shl.codeplex.com"&gt;http://shl.codeplex.com&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=Gsldd7OBlXE:OaHkwLqEkNQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=Gsldd7OBlXE:OaHkwLqEkNQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=Gsldd7OBlXE:OaHkwLqEkNQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=Gsldd7OBlXE:OaHkwLqEkNQ:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=Gsldd7OBlXE:OaHkwLqEkNQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=Gsldd7OBlXE:OaHkwLqEkNQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=Gsldd7OBlXE:OaHkwLqEkNQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=Gsldd7OBlXE:OaHkwLqEkNQ:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=Gsldd7OBlXE:OaHkwLqEkNQ:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=Gsldd7OBlXE:OaHkwLqEkNQ:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=Gsldd7OBlXE:OaHkwLqEkNQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=Gsldd7OBlXE:OaHkwLqEkNQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=Gsldd7OBlXE:OaHkwLqEkNQ:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Sadevcoza-Sharepoint/~4/Gsldd7OBlXE" height="1" width="1"/&gt;</description>
 <comments>http://www.sadev.co.za/content/sharepoint-holiday-loader#comments</comments>
 <category domain="http://www.sadev.co.za/taxonomy/term/12">.NET</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/38">Development</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/64">SharePoint</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/31">Tools &amp; Apps</category>
 <pubDate>Mon, 21 Feb 2011 10:33:48 +0000</pubDate>
 <dc:creator>Robert MacLean</dc:creator>
 <guid isPermaLink="false">571 at http://www.sadev.co.za</guid>
<feedburner:origLink>http://www.sadev.co.za/content/sharepoint-holiday-loader</feedburner:origLink></item>
<item>
 <title>Source Code Management for the Individual SharePoint Developer</title>
 <link>http://feedproxy.google.com/~r/Sadevcoza-Sharepoint/~3/tHpdM66y7wM/source-code-management-individual-sharepoint-developer</link>
 <description>&lt;p&gt;&lt;a href="http://www.sadev.co.za/files/image_124.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" align="right" src="http://www.sadev.co.za/files/image_thumb_148.png" width="371" height="209" /&gt;&lt;/a&gt;With SharePoint 2010 and Visual Studio 2010 the ability to be a productive developer was key and there is tight out-of-the-box integration and this means that it is easy for SharePoint developers to put code into source control easily. &lt;a href="http://www.themossshow.com"&gt;Hilton Giesnow&lt;/a&gt; covers this brilliantly in a video he has: &lt;a title="http://bit.ly/g71Gnb" href="http://bit.ly/g71Gnb"&gt;http://bit.ly/g71Gnb&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Imagine a number of dedicated SharePoint developers, they may have an enterprise ALM solution like TFS and on their own machines have SharePoint 2010 Developer and VS2010 installed and life is good – but what about the individual, or ad-hoc, developer?&lt;/p&gt;  &lt;p&gt;The problem for him is that installing SharePoint 2010 is a resource hog and you may not want it running all the time (what Hilton nicely calls the 9 to 12 development) and what about if you switching between projects, how do you switch SharePoint? The solution I found, is to have a virtual machine (VM) for SharePoint with the dev tools installed and do all work on the VM. This is great because the overhead is only there when you need it and you can easily switch between different virtual environments. The downside: source code management.&lt;/p&gt;  &lt;p&gt;Sure you can hook up the VM to the network and manage code using the source control as you are used too, but this isn’t always easy or possible, so what else you can do? I had this problem recently where the source control is on one domain and my development was another domain. I choose to use the &lt;a href="http://mercurial.selenic.com/"&gt;Mercurial&lt;/a&gt; Distributed Version Control System (&lt;a href="http://en.wikipedia.org/wiki/Distributed_Version_Control_System"&gt;DVCS&lt;/a&gt;) and I thought I would share this experience with you.&lt;a href="http://www.sadev.co.za/files/image_125.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.sadev.co.za/files/image_thumb_149.png" width="700" height="169" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;DVCS differs from “traditional” source control like TFS or SubVersion which has a client/server model where each developer is a client talking to a central server, however in DVCS every developer is their own server and does pushes/pulls (think like a sync) between other developers. &lt;/p&gt;  &lt;p&gt;What this enables is a very lightweight set of tools installed along side SharePoint and the developer tools on the VM. At the end of each day I could run Mercurial on my machine and pull the source control down to my own machine. This meant the VM had the code and my “real” machine had the code. Then this code could easily be checked into the corporate source control system creating another backup and ensuring compliance with source management policies!&lt;/p&gt;  &lt;p&gt;This has been a very exciting project and this configuration really made the management of the source code very smooth.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=tHpdM66y7wM:n91sDq_MNFc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=tHpdM66y7wM:n91sDq_MNFc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=tHpdM66y7wM:n91sDq_MNFc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=tHpdM66y7wM:n91sDq_MNFc:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=tHpdM66y7wM:n91sDq_MNFc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=tHpdM66y7wM:n91sDq_MNFc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=tHpdM66y7wM:n91sDq_MNFc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=tHpdM66y7wM:n91sDq_MNFc:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=tHpdM66y7wM:n91sDq_MNFc:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=tHpdM66y7wM:n91sDq_MNFc:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=tHpdM66y7wM:n91sDq_MNFc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=tHpdM66y7wM:n91sDq_MNFc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=tHpdM66y7wM:n91sDq_MNFc:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Sadevcoza-Sharepoint/~4/tHpdM66y7wM" height="1" width="1"/&gt;</description>
 <comments>http://www.sadev.co.za/content/source-code-management-individual-sharepoint-developer#comments</comments>
 <category domain="http://www.sadev.co.za/category/blog/alm">ALM</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/38">Development</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/64">SharePoint</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/31">Tools &amp; Apps</category>
 <pubDate>Mon, 24 Jan 2011 07:39:20 +0000</pubDate>
 <dc:creator>Robert MacLean</dc:creator>
 <guid isPermaLink="false">569 at http://www.sadev.co.za</guid>
<feedburner:origLink>http://www.sadev.co.za/content/source-code-management-individual-sharepoint-developer</feedburner:origLink></item>
<item>
 <title>Bring your hard drive to Community Night</title>
 <link>http://feedproxy.google.com/~r/Sadevcoza-Sharepoint/~3/01R31kli2pQ/bring-your-hard-drive-community-night</link>
 <description>&lt;p&gt;&lt;a href="http://www.sadev.co.za/files/CLIPART_OF_10887_SM.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top: 0px; border-right: 0px; padding-top: 0px" title="Blue Male Student in a Graduation Cap, Reading a Book and Leaning Against a Stack of Books Clipart Illustration" border="0" alt="Blue Male Student in a Graduation Cap, Reading a Book and Leaning Against a Stack of Books Clipart Illustration" align="right" src="http://www.sadev.co.za/files/CLIPART_OF_10887_SM_thumb.jpg" width="189" height="189" /&gt;&lt;/a&gt;If you are coming to &lt;a href="http://www.sadev.co.za/content/commnight-december-ndash-some-interesting-events"&gt;tomorrow’s community night&lt;/a&gt;, you want to bring your hard drive along because I will have some stuff to fill it up with:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.sadev.co.za/content/visual-studio-service-pack-1-ndash-beta-field-guide"&gt;Visual Studio 2010 &amp;amp; TFS 2010 Service Pack 1 Beta Bits&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;Over 8Gb of &lt;a href="http://www.devexpress.com"&gt;DevExpress&lt;/a&gt; videos (csv list below) which has something for everyone:&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;If you use any of their tools or components there is plenty of short videos on using features in them.&lt;/li&gt;      &lt;li&gt;If you like to learn from experts they have great videos where they interview people like &lt;a href="http://www.codinghorror.com"&gt;Jeff Atwood&lt;/a&gt;, &lt;a href="http://www.dotnetconsult.co.uk/weblog2/"&gt;Richard Blewitt&lt;/a&gt;, &lt;a href="http://saraford.net/"&gt;Sara Ford&lt;/a&gt; and &lt;a href="http://timheuer.com/blog/"&gt;Tim Heuer&lt;/a&gt;.&lt;/li&gt;      &lt;li&gt;Maybe you just want some less technical learning’s so how about, learning the &lt;a href="http://en.wikipedia.org/wiki/Getting_Things_Done"&gt;GTD methodology&lt;/a&gt; or the science of making great user interfaces!&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;The &lt;a href="http://www.silverlight.net/news/events/firestarter"&gt;Silverlight fire starter&lt;/a&gt; keynote in HD, so if you care about the future of Silverlight this is a much see video.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Plus I hear that some prizes may be given away at the events too &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-winkingsmile" alt="Winking smile" src="http://www.sadev.co.za/files/wlEmoticon-winkingsmile_2.png" /&gt;&lt;/p&gt;&lt;table id="attachments" class="sticky-enabled"&gt;
 &lt;thead&gt;&lt;tr&gt;&lt;th&gt;Attachment&lt;/th&gt;&lt;th&gt;Size&lt;/th&gt; &lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
 &lt;tr class="odd"&gt;&lt;td&gt;&lt;a href="http://www.sadev.co.za/files/DevExpress.csv"&gt;DevExpress.csv&lt;/a&gt;&lt;/td&gt;&lt;td&gt;3 KB&lt;/td&gt; &lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=01R31kli2pQ:4Mka0sjadpI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=01R31kli2pQ:4Mka0sjadpI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=01R31kli2pQ:4Mka0sjadpI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=01R31kli2pQ:4Mka0sjadpI:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=01R31kli2pQ:4Mka0sjadpI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=01R31kli2pQ:4Mka0sjadpI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=01R31kli2pQ:4Mka0sjadpI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=01R31kli2pQ:4Mka0sjadpI:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=01R31kli2pQ:4Mka0sjadpI:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=01R31kli2pQ:4Mka0sjadpI:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=01R31kli2pQ:4Mka0sjadpI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=01R31kli2pQ:4Mka0sjadpI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=01R31kli2pQ:4Mka0sjadpI:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Sadevcoza-Sharepoint/~4/01R31kli2pQ" height="1" width="1"/&gt;</description>
 <comments>http://www.sadev.co.za/content/bring-your-hard-drive-community-night#comments</comments>
 <category domain="http://www.sadev.co.za/taxonomy/term/12">.NET</category>
 <category domain="http://www.sadev.co.za/category/blog/alm">ALM</category>
 <category domain="http://www.sadev.co.za/category/blog/community-night">Community Night</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/38">Development</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/66">Events</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/18">Microsoft</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/64">SharePoint</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/49">SQL</category>
 <enclosure url="http://www.sadev.co.za/files/DevExpress.csv" length="3071" type="text/csv" />
 <pubDate>Mon, 13 Dec 2010 10:48:13 +0000</pubDate>
 <dc:creator>Robert MacLean</dc:creator>
 <guid isPermaLink="false">551 at http://www.sadev.co.za</guid>
<feedburner:origLink>http://www.sadev.co.za/content/bring-your-hard-drive-community-night</feedburner:origLink></item>
<item>
 <title>Visual Studio Service Pack 1 - Beta: Field Guide</title>
 <link>http://feedproxy.google.com/~r/Sadevcoza-Sharepoint/~3/0QQHD1qvCf4/visual-studio-service-pack-1-beta-field-guide</link>
 <description>&lt;p&gt;&lt;a href="http://blogs.msdn.com/b/bharry/"&gt;Brian Harry&lt;/a&gt; announced the availability of the &lt;a href="http://blogs.msdn.com/b/bharry/archive/2010/12/07/vs-tfs-2010-sp1-beta-has-released.aspx"&gt;service pack 1 beta&lt;/a&gt; which is fantastic news for all developers. This post is a field guide of me doing the installs. &lt;/p&gt;  &lt;p&gt;Before that I wanted to point out a few key things included in this SP:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;This can installed in production – this beta includes a “go live” license so it is supported and upgrades to the RTM of the SP will be supported. &lt;/li&gt;    &lt;li&gt;This includes over 80 hotfixes for between 800 and 1000 bugs and many new features. For a full list see the link above, but here is a brief list:      &lt;ul&gt;       &lt;li&gt;Silverlight 4 tool support! &lt;/li&gt;        &lt;li&gt;Unit testing can target the 3.5 framework now. &lt;/li&gt;        &lt;li&gt;IntelliTrace support for 64bit and SharePoint! &lt;/li&gt;        &lt;li&gt;Performance Wizard for Silverlight! &lt;/li&gt;        &lt;li&gt;HTML 5 support&lt;/li&gt;        &lt;li&gt;IIS Express support&lt;/li&gt;        &lt;li&gt;SQL Compact Edition 4 Tooling&lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Details on the last three can be found on &lt;a href="http://www.hanselman.com/blog/VisualStudioExplosionVS2010SP1BETAReleasedAndContext.aspx?utm_source=feedburner&amp;amp;utm_medium=twitter&amp;amp;utm_campaign=Feed%3A+ScottHanselman+%28Scott+Hanselman+-+ComputerZen.com%29"&gt;Hanselman’s blog.&lt;/a&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Some third party systems may break with this, at this time known ones are:      &lt;ul&gt;       &lt;li&gt;&lt;a href="http://twitter.com/#!/shanselman/statuses/12433075833151488"&gt;ASP.NET MVC 3 RC 1&lt;/a&gt; – this will be fixed in the next update. &lt;/li&gt;        &lt;li&gt;Visual Studio Async CTP – this will break completely! No news, yet, on when it will be fixed.&lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;The Process&lt;/h3&gt;  &lt;p&gt;For me there are three files you need to get:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Update for .NET 4 &lt;/li&gt;    &lt;li&gt;Update for Visual Studio &lt;/li&gt;    &lt;li&gt;Update for Team Foundation Server (not covered in this post) &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;Step 1&lt;/h4&gt;  &lt;p&gt;&lt;a href="/files/_NET-4-install.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title=".NET 4 install" border="0" alt=".NET 4 install" align="right" src="http://www.sadev.co.za/files/_NET-4-install_thumb.png" width="186" height="174" /&gt;&lt;/a&gt;Install the .NET 4 update first – this took on my machine 24 minutes to do. It is important to note that I did shutdown Visual Studio first but I had some other applications open, including &lt;a href="http://pull.codeplex.com/"&gt;Pull&lt;/a&gt; which is .NET 4. &lt;/p&gt;  &lt;p&gt;At the end of the process I needed to restart!&lt;/p&gt;  &lt;p&gt;&lt;a href="/files/image_89.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.sadev.co.za/files/image_thumb_113.png" width="324" height="125" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This step is no specifically needed as the VS SP will include this automatically, however I personally like the idea of doing it manually and making sure .NET 4 apps continue to work before I continue to the VS install.&lt;/p&gt;  &lt;h4&gt;Step 2&lt;/h4&gt;  &lt;p&gt;&lt;a href="/files/image_90.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" align="right" src="http://www.sadev.co.za/files/image_thumb_114.png" width="185" height="173" /&gt;&lt;/a&gt;On to the Visual Studio install which after a few minutes tells you what will be updated and then, tells you that it wants to download 490Mb!&lt;/p&gt;  &lt;p&gt;&lt;a href="/files/image_91.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.sadev.co.za/files/image_thumb_115.png" width="261" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;What I had done was to download the smaller installer version (less than 1Mb) which means it first figures out what is needed and then downloads the rest. This is great for some people as the download size is less, however since I live in South Africa (read: bandwidth is a luxury) and I work with 300+ other developers it is better for me to get the “DVD” labelled one which is bigger (in my case 103Mb bigger) but contains everything in one go so it can be shared easily and the bandwidth hit just once!&lt;/p&gt;  &lt;p&gt;&lt;a href="/files/image_92.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.sadev.co.za/files/image_thumb_116.png" width="412" height="61" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h4&gt;Step 3 &lt;/h4&gt;  &lt;p&gt;We re-join the action a while later (when the “DVD” edition downloaded, approx. 1 hour 21 min later) we start process again and this time the download size is 0Mb &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-openmouthedsmile" alt="Open-mouthed smile" src="http://www.sadev.co.za/files/wlEmoticon-openmouthedsmile_0.png" /&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="/files/image_93.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.sadev.co.za/files/image_thumb_117.png" width="261" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This took 29 min to process (remember this is without the download) this install and success!&lt;/p&gt;  &lt;p&gt;&lt;a href="/files/image_94.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.sadev.co.za/files/image_thumb_118.png" width="260" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h4&gt;Notes&lt;/h4&gt;  &lt;p&gt;I haven’t found anything in the many extensions I use daily that has broken! In particular my favourites all work&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.devexpress.com/Products/Visual_Studio_Add-in/Coding_Assistance/"&gt;CodeRush&lt;/a&gt; still working! &lt;/li&gt;    &lt;li&gt;&lt;a href="http://submain.com/products/ghostdoc.aspx"&gt;Ghost Doc&lt;/a&gt; 2.5 still works.&lt;/li&gt;    &lt;li&gt;I did have one of the &lt;a href="http://gallery.msdn.microsoft.com/en-us/60a86afe-159b-4940-a22f-4fef055cbd63"&gt;help extensions&lt;/a&gt; installed and VS just handled that fine (ie.e. no conflict with the new help viewer). &lt;/li&gt;    &lt;li&gt;&lt;a href="http://sqlite.phxsoftware.com/"&gt;SQLite development tools&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://visualstudiogallery.msdn.microsoft.com/en-us/e5f41ad9-4edc-4912-bca3-91147db95b99"&gt;Power Command for VS&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://visualstudiogallery.msdn.microsoft.com/en-us/d0d33361-18e2-46c0-8ff2-4adea1e34fef"&gt;Pro Power Tools for VS&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://visualstudiogallery.msdn.microsoft.com/en-us/dc06b54c-b6c4-4cf5-8203-a09c6979e881"&gt;WoVS Quick Add Reference&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=0QQHD1qvCf4:0F1BscEKWdA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=0QQHD1qvCf4:0F1BscEKWdA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=0QQHD1qvCf4:0F1BscEKWdA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=0QQHD1qvCf4:0F1BscEKWdA:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=0QQHD1qvCf4:0F1BscEKWdA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=0QQHD1qvCf4:0F1BscEKWdA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=0QQHD1qvCf4:0F1BscEKWdA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=0QQHD1qvCf4:0F1BscEKWdA:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=0QQHD1qvCf4:0F1BscEKWdA:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=0QQHD1qvCf4:0F1BscEKWdA:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=0QQHD1qvCf4:0F1BscEKWdA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=0QQHD1qvCf4:0F1BscEKWdA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=0QQHD1qvCf4:0F1BscEKWdA:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Sadevcoza-Sharepoint/~4/0QQHD1qvCf4" height="1" width="1"/&gt;</description>
 <comments>http://www.sadev.co.za/content/visual-studio-service-pack-1-beta-field-guide#comments</comments>
 <category domain="http://www.sadev.co.za/taxonomy/term/12">.NET</category>
 <category domain="http://www.sadev.co.za/category/blog/alm">ALM</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/38">Development</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/64">SharePoint</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/49">SQL</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/31">Tools &amp; Apps</category>
 <pubDate>Fri, 10 Dec 2010 07:24:13 +0000</pubDate>
 <dc:creator>Robert MacLean</dc:creator>
 <guid isPermaLink="false">549 at http://www.sadev.co.za</guid>
<feedburner:origLink>http://www.sadev.co.za/content/visual-studio-service-pack-1-beta-field-guide</feedburner:origLink></item>
<item>
 <title>Upgrade to SharePoint 2010 on Small Business Server: Field Guide</title>
 <link>http://feedproxy.google.com/~r/Sadevcoza-Sharepoint/~3/eydaLvAg7YA/upgrade-sharepoint-2010-small-business-server-field-guide</link>
 <description>&lt;p&gt;&lt;a href="http://www.sadev.co.za/files/SharePoint2010_Logo.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SharePoint2010_Logo" border="0" alt="SharePoint2010_Logo" align="right" src="http://www.sadev.co.za/files/SharePoint2010_Logo_thumb.png" width="245" height="84" /&gt;&lt;/a&gt;Recently I needed to do an upgrade from SharePoint 2007, to be exact WSS 3.0, to SharePoint 2010 – “No big deal” I thought, “I’ve done it before”. Assumptions, they do make for interesting life experiences, because this was something different – this was an upgrade on a Small Business Server (SBS) deployment.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.sadev.co.za/files/logo-ms-sbs.gif"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="logo-ms-sbs" border="0" alt="logo-ms-sbs" align="right" src="http://www.sadev.co.za/files/logo-ms-sbs_thumb.gif" width="375" height="94" /&gt;&lt;/a&gt;For those who do not know, SBS is a lightweight all in one server product. So when you install it you get Windows Server 2008, plus Exchange Server, plus ISA, plus SharePoint, plus plus plus – ALL PRE-CONFIGURED! It is fantastic to use in small companies. &lt;/p&gt;  &lt;p&gt;Microsoft has produced a fantastic upgrade guide for this very scenario: &lt;a href="http://technet.microsoft.com/en-us/library/ff959273(WS.10).aspx"&gt;http://technet.microsoft.com/en-us/library/ff959273(WS.10).aspx&lt;/a&gt; but I think is missing a few footnotes of things I found during my upgrades, which this blog post aims to share.&lt;/p&gt;  &lt;h3&gt;Check Lists&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://www.sadev.co.za/files/CLIPART_OF_13165_SM.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Blue Man Holding a Clipboard While Reviewing Employess Clipart Illustration" border="0" alt="Blue Man Holding a Clipboard While Reviewing Employess Clipart Illustration" align="right" src="http://www.sadev.co.za/files/CLIPART_OF_13165_SM_thumb.jpg" width="196" height="240" /&gt;&lt;/a&gt;I’ve made two check lists of things you should do ahead of time:&lt;/p&gt;  &lt;h4&gt;Software&lt;/h4&gt;  &lt;p&gt;This is the software that you will need during the upgrade.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;SharePoint 2010 Foundation Installation Media - &lt;a href="http://go.microsoft.com/fwlink/?LinkId=191959"&gt;http://go.microsoft.com/fwlink/?LinkId=191959&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;SQL Server 2008 R2 Express with Advanced Services x64 - &lt;a title="http://go.microsoft.com/?linkid=9729749" href="http://go.microsoft.com/?linkid=9729749"&gt;http://go.microsoft.com/?linkid=9729749&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;SBS Update rollup 4 (from Step 14) – Download details can be found in the Microsoft Guide &lt;/li&gt;    &lt;li&gt;WSS Service Pack 2&amp;#160; x64 - &lt;a href="http://go.microsoft.com/fwlink/?LinkID=196490"&gt;http://go.microsoft.com/fwlink/?LinkID=196490&lt;/a&gt;&amp;#160; &lt;/li&gt;    &lt;li&gt;.NET Framework 3.5 SP 1 -&amp;#160; &lt;a title="http://download.microsoft.com/download/2/0/e/20e90413-712f-438c-988e-fdaa79a8ac3d/dotnetfx35.exe" href="http://download.microsoft.com/download/2/0/e/20e90413-712f-438c-988e-fdaa79a8ac3d/dotnetfx35.exe"&gt;http://download.microsoft.com/download/2/0/e/20e90413-712f-438c-988e-fdaa79a8ac3d/dotnetfx35.exe&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;Environment&lt;/h4&gt;  &lt;p&gt;This is some prep for the environment you can do a head of time.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Get a service account created on the domain for SharePoint to use. &lt;/li&gt;    &lt;li&gt;Get a service account created on the domain for SQL 2008 R2 to use as it can’t use network service on a domain controller. &lt;/li&gt;    &lt;li&gt;Check if there is a public internet FQDN setup and get the details of that, will need this when setting up the AAM. &lt;/li&gt;    &lt;li&gt;Get domain name used for email. &lt;/li&gt;    &lt;li&gt;Check for a local domain name for the site, normally companyweb. Verify this can be access on the server and also from a workstation on the network. &lt;/li&gt;    &lt;li&gt;Make sure it is a domain controller – there is some scenarios where you are not installing on a domain controller but it is SBS in which case a lot of the guide and process will be broken. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Notes&lt;/h3&gt;  &lt;p&gt;Here are my additional notes for the guide. For some steps I have no notes because there was nothing extra special about those processes that needed noting.&lt;/p&gt;  &lt;h4&gt;Step 1&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;It is easier to check the version number in add/remove programs by showing the version number column. Service Pack 2 has a version number of 12.0.0.6421 so we want that or higher. &lt;/li&gt;    &lt;li&gt;Alternatively turn on show updates in add/remove programs and see if SP 2 is installed. &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;Step 4&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;It is not important to disable the service during the copy, provided your server will not be rebooted during step 4 and no one is accessing the SharePoint site. &lt;/li&gt;    &lt;li&gt;It is VITAL to place these files in a backup location and then copy the content database files MDF/LDF to a secondary location. This location is where the database files will be used from in future. &lt;/li&gt;    &lt;li&gt;Make sure the database files are NOT read only. &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;Step 6&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;It is a complete farm install, not a stand alone farm install &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;Step 7&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;It is ok for the site not to exist &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;Step 8 &lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;If the Central Admin “Getting Started Wizard” pop’s up, it is ok to cancel it wizard &lt;/li&gt;    &lt;li&gt;Make sure the app pool is set to &lt;em&gt;Network Service&lt;/em&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;Step 13 &lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;If you get a &lt;em&gt;Default Web Error&lt;/em&gt; it is because the default and intranet names are the same – make sure they are not. &lt;/li&gt; &lt;/ul&gt;  &lt;h5&gt;Additional steps post upgrade&lt;/h5&gt;  &lt;ul&gt;   &lt;li&gt;Log on to the site and do the visual upgrade (Site settings -&amp;gt; Title, Description &amp;amp; Icon -&amp;gt; Update the user interface), else it looks like you did no work! &lt;/li&gt;    &lt;li&gt;Check the content database is setup with a timer and search server. &lt;/li&gt;    &lt;li&gt;BACKUPS! &lt;a href="http://technet.microsoft.com/en-us/library/ee428295.aspx"&gt;http://technet.microsoft.com/en-us/library/ee428295.aspx&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;If search is broken check for the loopback issue from WSSv3, however this should be resolved by the SBS rollup that was installed: &lt;a href="http://blogs.technet.com/b/sbs/archive/2009/05/07/event-2436-for-sharepoint-services-3-search.aspx"&gt;http://blogs.technet.com/b/sbs/archive/2009/05/07/event-2436-for-sharepoint-services-3-search.aspx&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=eydaLvAg7YA:BoEqEsRi-Mg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=eydaLvAg7YA:BoEqEsRi-Mg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=eydaLvAg7YA:BoEqEsRi-Mg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=eydaLvAg7YA:BoEqEsRi-Mg:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=eydaLvAg7YA:BoEqEsRi-Mg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=eydaLvAg7YA:BoEqEsRi-Mg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=eydaLvAg7YA:BoEqEsRi-Mg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=eydaLvAg7YA:BoEqEsRi-Mg:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=eydaLvAg7YA:BoEqEsRi-Mg:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=eydaLvAg7YA:BoEqEsRi-Mg:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=eydaLvAg7YA:BoEqEsRi-Mg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=eydaLvAg7YA:BoEqEsRi-Mg:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=eydaLvAg7YA:BoEqEsRi-Mg:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Sadevcoza-Sharepoint/~4/eydaLvAg7YA" height="1" width="1"/&gt;</description>
 <comments>http://www.sadev.co.za/content/upgrade-sharepoint-2010-small-business-server-field-guide#comments</comments>
 <category domain="http://www.sadev.co.za/taxonomy/term/18">Microsoft</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/64">SharePoint</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/56">Windows</category>
 <pubDate>Thu, 09 Dec 2010 08:58:02 +0000</pubDate>
 <dc:creator>Robert MacLean</dc:creator>
 <guid isPermaLink="false">548 at http://www.sadev.co.za</guid>
<feedburner:origLink>http://www.sadev.co.za/content/upgrade-sharepoint-2010-small-business-server-field-guide</feedburner:origLink></item>
<item>
 <title>CommNight December - Some interesting events</title>
 <link>http://feedproxy.google.com/~r/Sadevcoza-Sharepoint/~3/U29-5b-qNSI/commnight-december-some-interesting-events</link>
 <description>&lt;p&gt;&lt;a href="/files/CLIPART_OF_10913_SM.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top: 0px; border-right: 0px; padding-top: 0px" title="Happy Blue Man Partying With a Party Hat, Confetti and a Bottle of Liquor Clipart Illustration" border="0" alt="Happy Blue Man Partying With a Party Hat, Confetti and a Bottle of Liquor Clipart Illustration" align="right" src="/files/CLIPART_OF_10913_SM_thumb.jpg" width="240" height="240" /&gt;&lt;/a&gt;In the middle of the company parties, you should take one night off to do some fantastic learning and networking at CommNight (Community Night) on the 14th December! You can read about all the details on the &lt;a href="http://blogs.msdn.com/b/southafrica/archive/2010/12/03/johannesburg-community-night-14-december-2010.aspx"&gt;Microsoft DPE Blog&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;There are two groups which I want to highlight which will be at CommNight:&lt;/p&gt;  &lt;h3&gt;S.A. Developer&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://sadeveloper.net/"&gt;S.A. Developer&lt;/a&gt; is a user group for developers and in December will be hosting the following topics:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Tool of the month: This short (10min to 15min) session is where someone can present their favourite developer focus tool or add-on. &lt;/li&gt;    &lt;li&gt;Unit Testing WPF &amp;amp; Silverlight – Tools &amp;amp; Techniques: Silverlight and WPF can be used to create truly immersive UI experiences for users.&amp;#160; Testing these UI components and the logic around it can become complex – especially when using frameworks like PRISM.&amp;#160; Join us in this session as we take a look at a few tools and techniques that can be used when unit testing WPF and Silverlight applications.&amp;#160; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Really looking forward to this session!&lt;/p&gt;  &lt;h3&gt;Information Worker&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://www.informationworker.co.za"&gt;Information Worker&lt;/a&gt; is a user group for those in the IW space, not just developers but everyone even people who job just involves Excel and Outlook! This month we are looking at:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Lync – Microsoft’s Unified Communication System&lt;/li&gt;    &lt;li&gt;Windows Phone 7 – What does this give the IW user? Things like Office and SharePoint integration will be discussed&lt;/li&gt; &lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=U29-5b-qNSI:8zAOhycuvAM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=U29-5b-qNSI:8zAOhycuvAM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=U29-5b-qNSI:8zAOhycuvAM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=U29-5b-qNSI:8zAOhycuvAM:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=U29-5b-qNSI:8zAOhycuvAM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=U29-5b-qNSI:8zAOhycuvAM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=U29-5b-qNSI:8zAOhycuvAM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=U29-5b-qNSI:8zAOhycuvAM:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=U29-5b-qNSI:8zAOhycuvAM:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=U29-5b-qNSI:8zAOhycuvAM:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=U29-5b-qNSI:8zAOhycuvAM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=U29-5b-qNSI:8zAOhycuvAM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=U29-5b-qNSI:8zAOhycuvAM:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Sadevcoza-Sharepoint/~4/U29-5b-qNSI" height="1" width="1"/&gt;</description>
 <comments>http://www.sadev.co.za/content/commnight-december-some-interesting-events#comments</comments>
 <category domain="http://www.sadev.co.za/taxonomy/term/12">.NET</category>
 <category domain="http://www.sadev.co.za/category/blog/alm">ALM</category>
 <category domain="http://www.sadev.co.za/category/blog/community-night">Community Night</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/38">Development</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/66">Events</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/18">Microsoft</category>
 <category domain="http://www.sadev.co.za/category/blog/presentations-posters-cheat-sheets">Presentations, Posters &amp; Cheat Sheets</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/64">SharePoint</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/31">Tools &amp; Apps</category>
 <pubDate>Tue, 07 Dec 2010 08:07:03 +0000</pubDate>
 <dc:creator>Robert MacLean</dc:creator>
 <guid isPermaLink="false">546 at http://www.sadev.co.za</guid>
<feedburner:origLink>http://www.sadev.co.za/content/commnight-december-some-interesting-events</feedburner:origLink></item>
<item>
 <title>SharePint @ Tech·Ed 2010!</title>
 <link>http://feedproxy.google.com/~r/Sadevcoza-Sharepoint/~3/ImLwVUU_GyU/sharepint-teched-2010</link>
 <description>&lt;p&gt;After a full day of learning new and interesting SharePoint tips, tricks and ideas, come and hang out with fellow SharePoint enthusiasts to help digest your new knowledge and a pint or two of anything else you like.   &lt;br /&gt;Hosted by The MOSS Show, with with some prizes to give away, it should be a fun evening for all.    &lt;br /&gt;&lt;a href="http://techedafricasharepint2010.eventbrite.com/"&gt;&lt;b&gt;RSVP essential as we need to finalise venue bookings!&lt;/b&gt;&lt;/a&gt;    &lt;br /&gt;&lt;b&gt;Date&lt;/b&gt;: Monday, 18 Oct.    &lt;br /&gt;&lt;b&gt;Venue&lt;/b&gt;: Cubana Durban, 128 Florida Road    &lt;br /&gt;&lt;b&gt;Time&lt;/b&gt;: 7:00 p.m.    &lt;br /&gt;&lt;b&gt;Dress&lt;/b&gt;: Collared shirts &amp;amp; smart shoes for gents    &lt;br /&gt;&lt;b&gt;Map &amp;amp; Directions from the CCI&lt;/b&gt;: &lt;a href="http://maps.google.com/maps?f=d&amp;amp;source=embed&amp;amp;saddr=12-14+Walnut+Road,+Durban+4001,+South+Africa+%28Hilton+Durban+Hotel%29&amp;amp;daddr=128+Florida+Rd,+Durban,+South+Africa&amp;amp;hl=en&amp;amp;geocode=FVB8OP4dAHXZASHiivq7bq3s3Cmxg0zsy6n3HjH-BDBJ3V25RQ%3BFZHEOP4dI0rZASG2T_taFo491ynrhVVtZAf3HjFRjduTxqu74A&amp;amp;mra=pd&amp;amp;mrcr=0&amp;amp;sll=-29.749973,30.74636&amp;amp;sspn=0.65218,1.320419&amp;amp;ie=UTF8&amp;amp;t=h&amp;amp;ll=-29.845005,31.02443&amp;amp;spn=0.02179,0.01388"&gt;View Map&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://techedafricasharepint2010.eventbrite.com/"&gt;Click to Register Here&lt;/a&gt;    &lt;br /&gt;A special thanks to our Sponsors:    &lt;br /&gt;&lt;img title="Sponsors" alt="Sponsors" src="http://www.informationworker.co.za/PublishingImages/Event%20Banners/sharepintspons.JPG" width="612" height="381" /&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=ImLwVUU_GyU:a6RNpOGYoqk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=ImLwVUU_GyU:a6RNpOGYoqk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=ImLwVUU_GyU:a6RNpOGYoqk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=ImLwVUU_GyU:a6RNpOGYoqk:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=ImLwVUU_GyU:a6RNpOGYoqk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=ImLwVUU_GyU:a6RNpOGYoqk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=ImLwVUU_GyU:a6RNpOGYoqk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=ImLwVUU_GyU:a6RNpOGYoqk:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=ImLwVUU_GyU:a6RNpOGYoqk:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=ImLwVUU_GyU:a6RNpOGYoqk:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=ImLwVUU_GyU:a6RNpOGYoqk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=ImLwVUU_GyU:a6RNpOGYoqk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=ImLwVUU_GyU:a6RNpOGYoqk:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Sadevcoza-Sharepoint/~4/ImLwVUU_GyU" height="1" width="1"/&gt;</description>
 <comments>http://www.sadev.co.za/content/sharepint-teched-2010#comments</comments>
 <category domain="http://www.sadev.co.za/taxonomy/term/66">Events</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/64">SharePoint</category>
 <pubDate>Fri, 08 Oct 2010 07:43:29 +0000</pubDate>
 <dc:creator>Robert MacLean</dc:creator>
 <guid isPermaLink="false">535 at http://www.sadev.co.za</guid>
<feedburner:origLink>http://www.sadev.co.za/content/sharepint-teched-2010</feedburner:origLink></item>
<item>
 <title>Upload files to SharePoint using OData!</title>
 <link>http://feedproxy.google.com/~r/Sadevcoza-Sharepoint/~3/RP7_oebyvww/upload-files-sharepoint-using-odata</link>
 <description>&lt;p&gt;I &lt;a href="http://www.sadev.co.za/content/cannot-add-service-reference-sharepoint-2010-odata"&gt;posted yesterday&lt;/a&gt; about some pain I felt when working with SharePoint and the &lt;a href="http://www.odata.org/"&gt;OData&lt;/a&gt; API, to balance the story this post cover some pleasure of working with it – that being uploading a file to document library using OData!&lt;/p&gt;  &lt;p&gt;This is really easy to do, once you know how – but it’s the learning curve of Everest here which makes this really hard to get right, as you have both OData specialisations and SharePoint quirks to contend with. The requirements before we start is we need a file (as a stream), we need to know it’s filename, we need it’s content type and we need to know where it will go.&lt;/p&gt;  &lt;p&gt;For this post I am posting to a document library called &lt;em&gt;Demo&lt;/em&gt; (which is why OData generated the name of &lt;em&gt;DemoItem&lt;/em&gt;) and the item is a text file called &lt;em&gt;Lorem ipsum.txt. &lt;/em&gt;I know it is a text file, which means I also know it’s Content Type is &lt;em&gt;plain/text&lt;/em&gt;. &lt;/p&gt;  &lt;p&gt;The code, below, is really simple and here are what is going on:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Line 1: I am opening the file using the &lt;em&gt;System.IO.File&lt;/em&gt; class, this gives me the stream I need. &lt;/li&gt;    &lt;li&gt;Line 3: To communicate with the OData service I use the &lt;em&gt;DataContext&lt;/em&gt; class which was generated when I added the service reference to the OData service and passed in the URI to the OData service. &lt;/li&gt;    &lt;li&gt;Line 8: Here I create a &lt;em&gt;DemoItem - &lt;/em&gt;remember in SharePoint everything is a list or a list item, even a document which means I need to create the item first. I set the properties of the item over the next few lines. It is vital you set these and set them correctly or it will fail. &lt;/li&gt;    &lt;li&gt;Line 16: I add the item to the context, this means that it is being tracked now locally – it is not in SharePoint yet. It is vital that this be done prior to you associating the stream. &lt;/li&gt;    &lt;li&gt;Line 18: I associate the stream of the file to the item. Once again, this is still only happening locally – SharePoint has not been touched yet. &lt;/li&gt;    &lt;li&gt;Line 20: &lt;em&gt;SaveChanges &lt;/em&gt;handles the actual writing to SharePoint. &lt;/li&gt; &lt;/ul&gt;  &lt;pre class="brush: csharp;"&gt;using (FileStream file = File.Open(@&amp;quot;C:\Users\Robert MacLean\Documents\Lorem ipsum.txt&amp;quot;, FileMode.Open))
{
    DataContext sharePoint = new DataContext(new Uri(&amp;quot;http://&amp;lt;sharepoint&amp;gt;/sites/ATC/_vti_bin/listdata.svc&amp;quot;));                

    string path = &amp;quot;/sites/ATC/Demo/Lorem ipsum.txt&amp;quot;;
    string contentType = &amp;quot;plain/text&amp;quot;;
    DemoItem documentItem = new DemoItem()
    {
        ContentType = contentType,
        Name = &amp;quot;Lorem ipsum&amp;quot;,
        Path = path,
        Title = &amp;quot;Lorem ipsum&amp;quot;
    };

    sharePoint.AddToDemo(documentItem);

    sharePoint.SetSaveStream(documentItem, file, false, contentType, path);

    sharePoint.SaveChanges();
}&lt;/pre&gt;

&lt;h3&gt;Path Property&lt;/h3&gt;

&lt;p&gt;The path property which is set on the item (line 12) and when I associate the stream (line 18, final parameter) is vital. This must be the path to where the file will exist on the server. This is the relative path to the file regardless of what SharePoint site you are in for example:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Path: &lt;em&gt;/Documents/demo.txt &lt;/em&gt;

    &lt;ul&gt;
      &lt;li&gt;Server: &lt;em&gt;http://sharepoint1 &lt;/em&gt;&lt;/li&gt;

      &lt;li&gt;Site: / &lt;/li&gt;

      &lt;li&gt;Document Library: &lt;em&gt;Documents &lt;/em&gt;&lt;/li&gt;

      &lt;li&gt;Filename: &lt;em&gt;demo.txt&lt;/em&gt; &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;

  &lt;li&gt;Path: &lt;em&gt;/hrDept/CVs/abc.docx &lt;/em&gt;

    &lt;ul&gt;
      &lt;li&gt;Server: &lt;em&gt;http://sharepoint1 &lt;/em&gt;&lt;/li&gt;

      &lt;li&gt;Site: &lt;em&gt;/hrDept&lt;/em&gt; &lt;/li&gt;

      &lt;li&gt;Document Library: &lt;em&gt;CVs&lt;/em&gt; &lt;/li&gt;

      &lt;li&gt;Filename: &lt;em&gt;abc.docx&lt;/em&gt; &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Wrap-up&lt;/h3&gt;

&lt;p&gt;I &lt;a href="http://www.sadev.co.za/content/how-create-adapter-tfs-integration-platform-part-x-reflection-sharepoint"&gt;still think&lt;/a&gt; you need to still look at WebDav as a viable way to handle documents that do not have metadata requirements, but if you have metadata requirements this is a great alternative to the standard web services. &lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=RP7_oebyvww:Rmn2gpTrI8w:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=RP7_oebyvww:Rmn2gpTrI8w:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=RP7_oebyvww:Rmn2gpTrI8w:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=RP7_oebyvww:Rmn2gpTrI8w:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=RP7_oebyvww:Rmn2gpTrI8w:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=RP7_oebyvww:Rmn2gpTrI8w:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=RP7_oebyvww:Rmn2gpTrI8w:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=RP7_oebyvww:Rmn2gpTrI8w:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=RP7_oebyvww:Rmn2gpTrI8w:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=RP7_oebyvww:Rmn2gpTrI8w:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=RP7_oebyvww:Rmn2gpTrI8w:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=RP7_oebyvww:Rmn2gpTrI8w:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=RP7_oebyvww:Rmn2gpTrI8w:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Sadevcoza-Sharepoint/~4/RP7_oebyvww" height="1" width="1"/&gt;</description>
 <comments>http://www.sadev.co.za/content/upload-files-sharepoint-using-odata#comments</comments>
 <category domain="http://www.sadev.co.za/taxonomy/term/12">.NET</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/38">Development</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/64">SharePoint</category>
 <pubDate>Tue, 28 Sep 2010 07:07:39 +0000</pubDate>
 <dc:creator>Robert MacLean</dc:creator>
 <guid isPermaLink="false">528 at http://www.sadev.co.za</guid>
<feedburner:origLink>http://www.sadev.co.za/content/upload-files-sharepoint-using-odata</feedburner:origLink></item>
<item>
 <title>Cannot add a Service Reference to SharePoint 2010 OData!</title>
 <link>http://feedproxy.google.com/~r/Sadevcoza-Sharepoint/~3/uASxkdIHniA/cannot-add-service-reference-sharepoint-2010-odata</link>
 <description>&lt;p&gt;SharePoint 2010 has a number of API’s (an API is a way we communicate with SharePoint), some we have had for a while like the web services but one is new – &lt;a href="http://www.odata.org/"&gt;OData&lt;/a&gt;. What is OData?&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;The Open Data Protocol (OData) is a Webprotocol for querying and updating data that provides a way tounlock your data and free it from silos that exist in applicationstoday. OData does this by applying and building upon Webtechnologies such as &lt;a href="http://www.w3.org/Protocols/"&gt;HTTP&lt;/a&gt;, &lt;a href="http://www.ietf.org/rfc/rfc4287.txt"&gt;Atom PublishingProtocol&lt;/a&gt; (AtomPub) and &lt;a href="http://json.org/"&gt;JSON&lt;/a&gt; toprovide access to information from a variety of applications,services, and stores.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;The main reason I like OData over the web services is that it is lightweight, works well in Visual Studio and works easily across platform, thanks to all the &lt;a href="http://www.odata.org/developers/odata-sdk"&gt;SDK’s&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.sadev.co.za/files/Clipboard01_5.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Clipboard01" border="0" alt="Clipboard01" align="right" src="http://www.sadev.co.za/files/Clipboard01_thumb_9.png" width="201" height="163" /&gt;&lt;/a&gt;SharePoint 2010 exposes these on the following URL &lt;em&gt;http(s)://&amp;lt;site&amp;gt;/_vti_bin/listdata.svc &lt;/em&gt;and you can add this to Visual Studio to consume using the exact same as a web service to SharePoint, right click on the project and select &lt;em&gt;Add Service Reference&lt;/em&gt;.&lt;/p&gt;  &lt;p&gt;Once loaded, each list is a contract and listed on the left and to add it to code, you just hit OK and start using it. &lt;/p&gt;  &lt;h3&gt;Add Service Reference Failed&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://www.sadev.co.za/files/Clipboard03_0.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Clipboard03" border="0" alt="Clipboard03" align="right" src="http://www.sadev.co.za/files/Clipboard03_thumb_1.png" width="182" height="56" /&gt;&lt;/a&gt;The procedure above works well, until it doesn’t and oddly enough my current work found a situation which one which caused the add reference to fail! The experience isn’t great when it does fail – the Add dialog closes and pops back up blank! Try it again and it disappears again but stays away. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.sadev.co.za/files/Clipboard04.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Clipboard04" border="0" alt="Clipboard04" align="right" src="http://www.sadev.co.za/files/Clipboard04_thumb_0.png" width="244" height="128" /&gt;&lt;/a&gt;If you check the status bar in VS, you will see the error message indicating it has failed – but by this point you may see the service reference is listed there but no code works, because the adding failed. &lt;/p&gt;  &lt;p&gt;If you right click and say delete, it will also refuse to delete because the adding failed. The only way to get rid of it is to close Visual Studio, go to the service reference folder (&lt;em&gt;&amp;lt;Solution Folder&amp;gt;\&amp;lt;Project Folder&amp;gt;\Service References&lt;/em&gt;) and delete the folder in there which matches the name of your service. You will now be able to launch Visual Studio again, and will be able to delete the service reference. &lt;/p&gt;  &lt;h3&gt;&lt;/h3&gt;  &lt;h3&gt;What went wrong?&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://www.sadev.co.za/files/Clipboard06.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Clipboard06" border="0" alt="Clipboard06" align="right" src="http://www.sadev.co.za/files/Clipboard06_thumb.png" width="199" height="150" /&gt;&lt;/a&gt;Since we have no way to know what went wrong, we need to get a lot more low level. We start off by launching a web browser and going to the meta data URL for the service: &lt;em&gt;http(s)://&amp;lt;site&amp;gt;/_vti_bin/listdata.svc/$metadata&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;In &lt;a href="http://www.beautyoftheweb.com/"&gt;Internet Explorer 9&lt;/a&gt; this just gives a useless blank page &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-sadsmile" alt="Sad smile" src="http://www.sadev.co.za/files/wlEmoticonsadsmile_2.png" /&gt; but if you use the right click menu option in IE 9, &lt;em&gt;View Source&lt;/em&gt;, it will show you the XML in notepad. This XML is what Visual Studio is taking, trying to parse and failing on. For us to diagnose the cause we need to work with this XML, so save it to your machine and save it with a .csdl file extension. We need this special extension for the next tool we will use which refuses to work with files without it.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.sadev.co.za/files/Clipboard07.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Clipboard07" border="0" alt="Clipboard07" align="right" src="http://www.sadev.co.za/files/Clipboard07_thumb.png" width="279" height="187" /&gt;&lt;/a&gt;The next step is to open the &lt;em&gt;Visual Studio Command Prompt&lt;/em&gt; and navigate to where you saved the CSDL file. We will use a command line tool called &lt;em&gt;DataSvcUtil.exe. &lt;/em&gt;This may be familiar to WCF people who know &lt;em&gt;SvcUtil.exe&lt;/em&gt; which is very similar, but this one is specifically for OData services. All it does is take the CSDL file and produce a code contract from it, the syntax is very easy: &lt;em&gt;datasvcutil.exe /out:&amp;lt;file.cs&amp;gt; /in:&amp;lt;file.csdl&amp;gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Immediately you will see a mass of red, and you know that red means error. In my case I have a list called &lt;em&gt;1 History&lt;/em&gt; which in the OData service is known by it’s gangster name &lt;em&gt;_1History. &lt;/em&gt;This problem child is breaking my ability to generate code, which you can figure out by reading the errors.&amp;#160; &lt;/p&gt;  &lt;h3&gt;&lt;/h3&gt;  &lt;h3&gt;&lt;/h3&gt;  &lt;h3&gt;Solving the problem!&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://www.sadev.co.za/files/Clipboard09.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Clipboard09" border="0" alt="Clipboard09" align="right" src="http://www.sadev.co.za/files/Clipboard09_thumb.png" width="324" height="82" /&gt;&lt;/a&gt;Thankfully I do not need &lt;em&gt;1 History&lt;/em&gt;, so to fix this issue I need to clean up the CSDL file of &lt;em&gt;_1History&lt;/em&gt; references. I switched to Visual Studio and loaded the CSDL file in it and begin to start removing all references to the troublemaker. I also needed to remove the item contract for the list which is &lt;em&gt;__1HistoryItem&lt;/em&gt;. I start off by removing the item contract &lt;em&gt;EntityType &lt;/em&gt;which is highlighted in the image along side.&lt;/p&gt;  &lt;p&gt;The next cleanup step is to remove all the associations to &lt;em&gt;__1HistoryItem.&lt;/em&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.sadev.co.za/files/Clipboard10.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Clipboard10" border="0" alt="Clipboard10" align="right" src="http://www.sadev.co.za/files/Clipboard10_thumb.png" width="324" height="21" /&gt;&lt;/a&gt;Finally the last item I need to remove is the &lt;em&gt;EntitySet&lt;/em&gt; for the list: &lt;/p&gt;  &lt;p&gt;BREATH! RELAX!&lt;/p&gt;  &lt;p&gt;Ok, now the hard work is done and so I jump back to the command prompt and re-run the &lt;em&gt;DataSvcUtil&lt;/em&gt; tool, and it now works: &lt;a href="http://www.sadev.co.za/files/Clipboard12.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Clipboard12" border="0" alt="Clipboard12" src="http://www.sadev.co.za/files/Clipboard12_thumb.png" width="324" height="55" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.sadev.co.za/files/Clipboard14.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Clipboard14" border="0" alt="Clipboard14" align="right" src="http://www.sadev.co.za/files/Clipboard14_thumb.png" width="206" height="167" /&gt;&lt;/a&gt;This produces a file, in my case s&lt;em&gt;harepoint.cs, &lt;/em&gt;which I am able to add that to my project just as any other class file and I am able to make use of OData in my solution just like it is supposed to work!&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=uASxkdIHniA:IjRXg31yLeA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=uASxkdIHniA:IjRXg31yLeA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=uASxkdIHniA:IjRXg31yLeA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=uASxkdIHniA:IjRXg31yLeA:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=uASxkdIHniA:IjRXg31yLeA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=uASxkdIHniA:IjRXg31yLeA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=uASxkdIHniA:IjRXg31yLeA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=uASxkdIHniA:IjRXg31yLeA:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=uASxkdIHniA:IjRXg31yLeA:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=uASxkdIHniA:IjRXg31yLeA:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=uASxkdIHniA:IjRXg31yLeA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=uASxkdIHniA:IjRXg31yLeA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=uASxkdIHniA:IjRXg31yLeA:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Sadevcoza-Sharepoint/~4/uASxkdIHniA" height="1" width="1"/&gt;</description>
 <comments>http://www.sadev.co.za/content/cannot-add-service-reference-sharepoint-2010-odata#comments</comments>
 <category domain="http://www.sadev.co.za/taxonomy/term/12">.NET</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/9">Annoyances</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/38">Development</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/30">Internet Explorer</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/64">SharePoint</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/31">Tools &amp; Apps</category>
 <pubDate>Mon, 27 Sep 2010 09:22:21 +0000</pubDate>
 <dc:creator>Robert MacLean</dc:creator>
 <guid isPermaLink="false">527 at http://www.sadev.co.za</guid>
<feedburner:origLink>http://www.sadev.co.za/content/cannot-add-service-reference-sharepoint-2010-odata</feedburner:origLink></item>
<item>
 <title>Next time on Information Worker</title>
 <link>http://feedproxy.google.com/~r/Sadevcoza-Sharepoint/~3/Ts8cR-cw9IY/next-time-information-worker</link>
 <description>&lt;p&gt;&lt;a href="http://www.sadev.co.za/files/IWLogoText.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px; padding-top: 0px" title="IWLogoText" border="0" alt="IWLogoText" align="right" src="http://www.sadev.co.za/files/IWLogoText_thumb.jpg" width="324" height="52" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;If you follow the &lt;a href="http://www.informationworker.co.za" target="_blank"&gt;IW website&lt;/a&gt; you may have seen that the September community meeting in Jo’burg would be about SharePoint 2010 Deployments. That has changed to something far more exciting: &lt;strong&gt;Double Demo Day!&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Double Demo Day means we get to see two members of the community do a demo of something very interesting.The demos are:&lt;/p&gt;  &lt;h3&gt;Creating Workflows with SharePoint Designer 2010, InfoPath and Visio&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;Creating workflows with Visio 2010 and SharePoint Designer 2010 has never been easier. In this session I’ll go through the process of rapidly creating and deploying workflows in a SharePoint 2010 environment.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;This will be presented by Ridwan Sassman, who helped us out last month with video taping the session.&lt;/p&gt;  &lt;h3&gt;Branding SharePoint 2010 with MasterPages, Layouts and CSS&lt;/h3&gt;  &lt;blockquote&gt;   &lt;p&gt;One of the largest limitations of WSS3.0 and MOSS2007 is the ability to brand SharePoint without intricate knowledge of the platform and in some cases breaking a few rules and modifying out of the box system files to get the desired look and feel. Come and see how the theming engine in SharePoint 2010 together with CSS, Master Pages and Layouts can be used to brand your SharePoint site using the amazing new SharePoint Designer 2010. &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;This will be presented by Brent Samodien. If you have been to a SLAB’s you will know Brent as he helps us with the venue!&lt;/p&gt;  &lt;h3&gt;October&lt;/h3&gt;  &lt;p&gt;Looking ahead to October – there is no Jo’burg community meeting. Why? ‘cause we will all be at &lt;a href="http://www.teched.co.za" target="_blank"&gt;Tech·Ed Africa 2010&lt;/a&gt;! If you haven’t registered then you must do so NOW! Or you could try and win a &lt;a href="http://www.sadev.co.za/content/techmiddoted-africa-2010-want-go-free" target="_blank"&gt;free entry&lt;/a&gt;!&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=Ts8cR-cw9IY:xnBqJUrwpzI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=Ts8cR-cw9IY:xnBqJUrwpzI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=Ts8cR-cw9IY:xnBqJUrwpzI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=Ts8cR-cw9IY:xnBqJUrwpzI:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=Ts8cR-cw9IY:xnBqJUrwpzI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=Ts8cR-cw9IY:xnBqJUrwpzI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=Ts8cR-cw9IY:xnBqJUrwpzI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=Ts8cR-cw9IY:xnBqJUrwpzI:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=Ts8cR-cw9IY:xnBqJUrwpzI:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=Ts8cR-cw9IY:xnBqJUrwpzI:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=Ts8cR-cw9IY:xnBqJUrwpzI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=Ts8cR-cw9IY:xnBqJUrwpzI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=Ts8cR-cw9IY:xnBqJUrwpzI:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Sadevcoza-Sharepoint/~4/Ts8cR-cw9IY" height="1" width="1"/&gt;</description>
 <comments>http://www.sadev.co.za/content/next-time-information-worker#comments</comments>
 <category domain="http://www.sadev.co.za/taxonomy/term/66">Events</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/64">SharePoint</category>
 <pubDate>Thu, 26 Aug 2010 08:27:17 +0000</pubDate>
 <dc:creator>Robert MacLean</dc:creator>
 <guid isPermaLink="false">518 at http://www.sadev.co.za</guid>
<feedburner:origLink>http://www.sadev.co.za/content/next-time-information-worker</feedburner:origLink></item>
<item>
 <title>Tech·Ed Africa 2010: Want to go for free?</title>
 <link>http://feedproxy.google.com/~r/Sadevcoza-Sharepoint/~3/MxA_xjgcPHE/teched-africa-2010-want-go-free</link>
 <description>&lt;p&gt;Win 1 of 4 Tickets to &lt;a href="http://www.teched.co.za" target="_blank"&gt;Microsoft Tech·Ed Africa 2010&lt;/a&gt; worth &lt;b&gt;R6 150 each&lt;/b&gt;!!!&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Venue:&lt;/b&gt;&amp;#160;&amp;#160;&amp;#160; ICC Durban&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Date:&lt;/b&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 17th - 20th October 2010&lt;/p&gt;  &lt;p&gt;All you need to do is take a photo of a &lt;a href="http://tag.microsoft.com/" target="_blank"&gt;Microsoft Tag&lt;/a&gt; in a really cool/funny/practical place and upload the picture to the Facebook competition page.&lt;/p&gt;  &lt;p&gt;More details in the competition animated video &lt;a href="http://click.icptrack.com/icp/relay.php?r=585271&amp;amp;msgid=8519&amp;amp;act=0I3K&amp;amp;c=751947&amp;amp;destination=http%3A%2F%2Fgoanimate.com%2Fmovie%2F06QV3XsRbFeY%3Futm_source%3Dlinkshare%26uid%3D0izjYzD4lB-M"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Full Competition Rules on our &lt;a href="http://click.icptrack.com/icp/relay.php?r=585271&amp;amp;msgid=8519&amp;amp;act=0I3K&amp;amp;c=751947&amp;amp;destination=http%3A%2F%2Fwww.facebook.com%2Fpages%2FTech-Ed-Africa-2010-Tag-Competition%2F110311645684439%23%2521"&gt;Facebook page&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Dates for Submissions &amp;amp; Announcements of Winners:&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;25 Aug 2010&amp;#160;&amp;#160;&amp;#160; -&amp;#160;&amp;#160;&amp;#160; Last Date For Submissions (week 1) (5pm)&lt;/li&gt;    &lt;li&gt;27 Aug 2010&amp;#160;&amp;#160;&amp;#160; -&amp;#160;&amp;#160;&amp;#160; Week 1 Winner Announced&lt;/li&gt;    &lt;li&gt;01 Sep 2010&amp;#160;&amp;#160;&amp;#160; -&amp;#160;&amp;#160;&amp;#160; Last Date For Submissions (week 2) (5pm)&lt;/li&gt;    &lt;li&gt;03 Sep 2010&amp;#160;&amp;#160;&amp;#160; -&amp;#160;&amp;#160;&amp;#160; Week 2 Winner Announced&lt;/li&gt;    &lt;li&gt;08 Sep 2010&amp;#160;&amp;#160;&amp;#160; -&amp;#160;&amp;#160;&amp;#160; Last Date For Submissions (week 3) (5pm)&lt;/li&gt;    &lt;li&gt;10 Sep 2010&amp;#160;&amp;#160;&amp;#160; -&amp;#160;&amp;#160;&amp;#160; Week 3 Winner Announced&lt;/li&gt;    &lt;li&gt;15 Sep 2010&amp;#160;&amp;#160;&amp;#160; -&amp;#160;&amp;#160;&amp;#160; Last Date For Submissions (week 4) (5pm)&lt;/li&gt;    &lt;li&gt;17 Sep 2010&amp;#160;&amp;#160;&amp;#160; -&amp;#160;&amp;#160;&amp;#160; Week 4 Winner Announced&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;b&gt;Submissions &amp;amp; Announcements of Winners:&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;A new winner will be selected weekly.&lt;/li&gt;    &lt;li&gt;Last date for submissions for a particular week is 5pm Wednesday of that week.&lt;/li&gt;    &lt;li&gt;Winner for that week will be announced on the Friday.&lt;/li&gt;    &lt;li&gt;Submissions after 5pm will count towards the following week.&lt;/li&gt;    &lt;li&gt;Submissions which did not win in a previous week will still be considered in following weeks and need not be re-submitted.&lt;/li&gt;    &lt;li&gt;A person can only win once, thereafter all his other submissions will be ignored.&lt;/li&gt;    &lt;li&gt;You cannot submit on behalf of another person.&lt;/li&gt;    &lt;li&gt;Submissions are done by posting a photo to the Facebook page wall.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;b&gt;&lt;i&gt;Terms and Conditions apply:&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;i&gt;This competition is limited to Tech·Ed Africa 2010 entrance and does not include Travel, hotel or any other expenses. &lt;/i&gt;&lt;i&gt;You will be required to help out at the Developers Community Lounge at Tech·Ed Africa 2010 for 3 hours a day if you do win. &lt;/i&gt;&lt;i&gt;For Full list of rules please consult the Facebook page.&lt;/i&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=MxA_xjgcPHE:eHzLsFRA1to:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=MxA_xjgcPHE:eHzLsFRA1to:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=MxA_xjgcPHE:eHzLsFRA1to:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=MxA_xjgcPHE:eHzLsFRA1to:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=MxA_xjgcPHE:eHzLsFRA1to:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=MxA_xjgcPHE:eHzLsFRA1to:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=MxA_xjgcPHE:eHzLsFRA1to:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=MxA_xjgcPHE:eHzLsFRA1to:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=MxA_xjgcPHE:eHzLsFRA1to:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=MxA_xjgcPHE:eHzLsFRA1to:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=MxA_xjgcPHE:eHzLsFRA1to:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=MxA_xjgcPHE:eHzLsFRA1to:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=MxA_xjgcPHE:eHzLsFRA1to:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Sadevcoza-Sharepoint/~4/MxA_xjgcPHE" height="1" width="1"/&gt;</description>
 <comments>http://www.sadev.co.za/content/teched-africa-2010-want-go-free#comments</comments>
 <category domain="http://www.sadev.co.za/taxonomy/term/12">.NET</category>
 <category domain="http://www.sadev.co.za/category/blog/alm">ALM</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/38">Development</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/66">Events</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/18">Microsoft</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/7">MSCRM</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/64">SharePoint</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/49">SQL</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/31">Tools &amp; Apps</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/19">Virtualisation</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/56">Windows</category>
 <pubDate>Tue, 24 Aug 2010 07:53:15 +0000</pubDate>
 <dc:creator>Robert MacLean</dc:creator>
 <guid isPermaLink="false">514 at http://www.sadev.co.za</guid>
<feedburner:origLink>http://www.sadev.co.za/content/teched-africa-2010-want-go-free</feedburner:origLink></item>
<item>
 <title>It's Dev4Dev's time again!</title>
 <link>http://feedproxy.google.com/~r/Sadevcoza-Sharepoint/~3/WsaZPCmbGPw/its-dev4devs-time-again</link>
 <description>&lt;p&gt;My favourite gathering of developers happens 2 or 3 times a year, it’s called &lt;a href="http://blogs.msdn.com/b/southafrica/archive/2010/07/29/devs4devs-is-back-in-johannesburg.aspx" target="_blank"&gt;Dev4Devs&lt;/a&gt;. This is a free event which Microsoft runs, where ANYONE can present a topic but they only have 20min! This means that in a morning you see 7 topics and rather than getting swamped in all the details you dive directly to the really important parts. &lt;/p&gt;  &lt;p&gt;The topic list is below, and there is some exciting topics there and even some non-MS technology is covered too!&lt;/p&gt;  &lt;p&gt;I am also really glad that the entire ATC team at &lt;a href="http://www.bbd.co.za" target="_blank"&gt;BB&amp;amp;D&lt;/a&gt;, which is the team I work in, is presenting – they are highlighted in the list below! &lt;/p&gt;  &lt;p&gt;The next one comes on the 4th September 2010 and it occurs at &lt;a href="http://www.bing.com/maps/?v=2&amp;amp;cp=-26.04331918522945~28.018097638103427&amp;amp;lvl=18&amp;amp;sty=h&amp;amp;sp=Point.bnsg02kb1bth_Microsoft____&amp;amp;rtp=adr.~adr.&amp;amp;mode=D&amp;amp;rtop=0~0~0~" target="_blank"&gt;Microsoft’s offices in Johannesburg&lt;/a&gt; and you can register at &lt;a title="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032456806&amp;amp;Culture=en-ZA" href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032456806&amp;amp;Culture=en-ZA"&gt;https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032456806&amp;amp;Culture=en-ZA&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Session List for Dev4Devs&lt;/h3&gt;  &lt;p&gt;&lt;strong&gt;Windows Phone 7 - Getting Started&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;A high level introduction to getting started with Windows Phone 7 development including: where to begin, options for developers, thinking about design and a demonstration application.&lt;/p&gt;  &lt;p&gt;Presenter: Johannes van Schalkwyk&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Making MVVM easy&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Starting with WPF, Silverlight or WP7? Heard of MVVM but think it’s WAY too complex for your simple application? Join me for a crash course using the easiest MVVM framework available… Caliburn.Micro!    &lt;br /&gt;Presenter: Rudi Grobler &lt;em&gt;(ATC Team Member)&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Why you should care about Google Closure&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Closure is a modularised set of JavaScript libraries that can assist you in building rich internet applications.&lt;/p&gt;  &lt;p&gt;It's been battle-tested by Google on sites like: Gmail, Google Docs and Google Maps.&lt;/p&gt;  &lt;p&gt;Attend this short intro to get an understanding of how important these libraries are and why you should consider using them in your next big internet app.&lt;/p&gt;  &lt;p&gt;Presenter: Simon Stewart&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Introducing NHibernate 3&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The daddy of .NET ORM is back with a new release, in this session you'll see a few of the newest features - such as a full IQueryable LINQ provider - that makes NHibernate 3 the best release yet!    &lt;br /&gt;Presenter: Kevin McKelvin&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Branding SharePoint 2010 with MasterPages, Layouts and CSS&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;One of the largest limitations of WSS3.0 and MOSS2007 is the ability to brand SharePoint without intricate knowledge of the platform and in some cases breaking a few rules and modifying out of the box system files to get the desired look and feel. Come and see how the theming engine in SharePoint 2010 together with CSS, Master Pages and Layouts can be used to brand your SharePoint site using the amazing new SharePoint Designer 2010.    &lt;br /&gt;Presenter: Brent Samodien&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Unit Testing - Code Coverage &amp;amp; Mocking&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;In this presentation William will demonstrate how code coverage tools help measure the effectiveness of your unit tests.&amp;#160; He will also show how Mocking tools can help to add value to your unit tests and ensure that all edge-case logic is properly checked.    &lt;br /&gt;Presenter: William Brander &lt;em&gt;(ATC Team Member)&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Getting ready for Windows Azure development&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Heard about the cloud? Excited about the possibilities? In this session we have a 1000-mile introduction to Microsoft’s operating system for the cloud, Windows Azure, how it compares to the other cloud offerings that are out there and how to get your hands dirty with the skill-up process. Endless possibilities + new tech = fun stuff.    &lt;br /&gt;Presenter: Ryno Rijnsburger&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;An introduction to Mercurial Source Control&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Want a quick introduction into a Distributed Version Control System (DVCS)? Meet Mercurial it is a cross-platform, fast, lightweight source control management system designed for easy and efficient handling of distributed projects.    &lt;br /&gt;Presenter: Zayd Kara &lt;em&gt;(ATC Team Member)&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Making money with Coded UI&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Coded UI is a brand new feature of Visual Studio 2010 which enables you to quickly build automated user interface tests for your application and run them as if they were unit tests. In the talk we will look at how Coded UI can change your life, one UI at a time!    &lt;br /&gt;Presenter: ME! &lt;em&gt;(ATC Team Member)&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Hack .Net in 10 Seconds - Why obfuscation is critical&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Hacking 101 – I demonstrate how to bypass basic copy protection in an unobfusctaed .Net application through reverse engineering and show how obfuscation adds a layer of protection. I also demonstrate additional techniques for protecting your applications from hacking once they are released in the wild.    &lt;br /&gt;Presenter: Mark Pearl&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Composite Applications with PRISM&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;In this session Stephan will demonstrate how to leverage the Composite Application Libraries to create modularized applications for WPF and Silverlight. He will also show you how to do multi-targeted development by sharing lots of code between the web and desktop applications.    &lt;br /&gt;Presenter: Stephan Johnson&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;An Introduction to Pex and Moles&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;An introduction into Pex and Moles, covering the basics of Mole Types and Mole Stubs and Parameterised Testing.    &lt;br /&gt;Presenter: Dave Russell&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;ASP.NET Dynamic Data&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;I will briefly introduce ASP.NET Dynamic Data by showing how to build a complete data maintenance web application with almost zero code.&lt;/p&gt;  &lt;p&gt;Moving on, I will demonstrate some standard ways of customising a Dynamic Data application, and some more advanced non-standard customisation techniques. I will finish off by illustrating how Dynamic Data libraries and controls can be leveraged in other applications that don't normally use dynamic data.&lt;/p&gt;  &lt;p&gt;Presenter: Brady Kelly&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;ASP.NET MVC 3&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;As you probably already surmised, ASP.NET MVC 3 is the next major release of ASP.NET MVC. Join us as we highlight the upcoming features and modifications to this popular framework.    &lt;br /&gt;Presenters: Jaco Pretorius and Kobus Brummer&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=WsaZPCmbGPw:ngyFwqBtldA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=WsaZPCmbGPw:ngyFwqBtldA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=WsaZPCmbGPw:ngyFwqBtldA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=WsaZPCmbGPw:ngyFwqBtldA:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=WsaZPCmbGPw:ngyFwqBtldA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=WsaZPCmbGPw:ngyFwqBtldA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=WsaZPCmbGPw:ngyFwqBtldA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=WsaZPCmbGPw:ngyFwqBtldA:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=WsaZPCmbGPw:ngyFwqBtldA:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=WsaZPCmbGPw:ngyFwqBtldA:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=WsaZPCmbGPw:ngyFwqBtldA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=WsaZPCmbGPw:ngyFwqBtldA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=WsaZPCmbGPw:ngyFwqBtldA:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Sadevcoza-Sharepoint/~4/WsaZPCmbGPw" height="1" width="1"/&gt;</description>
 <comments>http://www.sadev.co.za/content/its-dev4devs-time-again#comments</comments>
 <category domain="http://www.sadev.co.za/taxonomy/term/12">.NET</category>
 <category domain="http://www.sadev.co.za/category/blog/alm">ALM</category>
 <category domain="http://www.sadev.co.za/category/blog/alm-rangers">ALM Rangers</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/38">Development</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/66">Events</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/18">Microsoft</category>
 <category domain="http://www.sadev.co.za/category/blog/presentations-posters-cheat-sheets">Presentations, Posters &amp; Cheat Sheets</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/64">SharePoint</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/49">SQL</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/31">Tools &amp; Apps</category>
 <category domain="http://www.sadev.co.za/category/blog/windows-phone">Windows Phone</category>
 <pubDate>Fri, 20 Aug 2010 07:30:35 +0000</pubDate>
 <dc:creator>Robert MacLean</dc:creator>
 <guid isPermaLink="false">511 at http://www.sadev.co.za</guid>
<feedburner:origLink>http://www.sadev.co.za/content/its-dev4devs-time-again</feedburner:origLink></item>
<item>
 <title>ALM in 2010</title>
 <link>http://feedproxy.google.com/~r/Sadevcoza-Sharepoint/~3/P2fzsIFaTZs/alm-2010</link>
 <description>&lt;p&gt;Here is the slides from my talk on Application Lifecycle Management in 2010 which I did for the &lt;a href="http://www.informationworker.co.za" target="_blank"&gt;Information Worker&lt;/a&gt; user group.&lt;/p&gt;  &lt;p&gt;Here is the blurb for the session&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Development is not just about writing code and pressing compile. It is a process, which starts long before code is written and extends long after the compile is done and this process includes a lot of management - this process is called Application Lifecycle Management (ALM).&lt;/p&gt;    &lt;p&gt;SharePoint development is not immune to this and this presentation looks at what the landscape and tools are like for ALM in 2010 and how it relates to SharePoint development.&lt;/p&gt; &lt;/blockquote&gt;  &lt;div style="width: 425px" id="__ss_4804471"&gt;&lt;object id="__sse4804471" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=cfakepathalmin2010-100721054959-phpapp02&amp;amp;stripped_title=alm-in-2010" /&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;param name="allowScriptAccess" value="always" /&gt;&lt;embed name="__sse4804471" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=cfakepathalmin2010-100721054959-phpapp02&amp;amp;stripped_title=alm-in-2010" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;

You can download the slides and the white paper from the &lt;a href="http://www.informationworker.co.za/Pages/Events.aspx"&gt;IW site&lt;/a&gt;.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=P2fzsIFaTZs:nk8gXyNnY38:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=P2fzsIFaTZs:nk8gXyNnY38:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=P2fzsIFaTZs:nk8gXyNnY38:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=P2fzsIFaTZs:nk8gXyNnY38:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=P2fzsIFaTZs:nk8gXyNnY38:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=P2fzsIFaTZs:nk8gXyNnY38:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=P2fzsIFaTZs:nk8gXyNnY38:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=P2fzsIFaTZs:nk8gXyNnY38:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=P2fzsIFaTZs:nk8gXyNnY38:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=P2fzsIFaTZs:nk8gXyNnY38:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=P2fzsIFaTZs:nk8gXyNnY38:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=P2fzsIFaTZs:nk8gXyNnY38:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=P2fzsIFaTZs:nk8gXyNnY38:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Sadevcoza-Sharepoint/~4/P2fzsIFaTZs" height="1" width="1"/&gt;</description>
 <comments>http://www.sadev.co.za/content/alm-2010#comments</comments>
 <category domain="http://www.sadev.co.za/taxonomy/term/12">.NET</category>
 <category domain="http://www.sadev.co.za/category/blog/alm">ALM</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/38">Development</category>
 <category domain="http://www.sadev.co.za/category/blog/presentations-posters-cheat-sheets">Presentations, Posters &amp; Cheat Sheets</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/64">SharePoint</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/31">Tools &amp; Apps</category>
 <pubDate>Thu, 22 Jul 2010 06:35:29 +0000</pubDate>
 <dc:creator>Robert MacLean</dc:creator>
 <guid isPermaLink="false">495 at http://www.sadev.co.za</guid>
<feedburner:origLink>http://www.sadev.co.za/content/alm-2010</feedburner:origLink></item>
<item>
 <title>How to create an adapter for the TFS Integration Platform - Appendix 2: SimpleDictionary</title>
 <link>http://feedproxy.google.com/~r/Sadevcoza-Sharepoint/~3/w5tpfXrO3-g/how-create-adapter-tfs-integration-platform-appendix-2-simpledictionary</link>
 <description>&lt;p&gt;&lt;em&gt;&lt;font size="1"&gt;Note: This post is part of a series and you can find the rest of the parts in the &lt;a href="/content/how-create-adapter-tfs-integration-platform-series-index" target="_blank"&gt;series index&lt;/a&gt;.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;For my WI adapter I needed an implementation of &lt;em&gt;Dictionary&amp;lt;T,V&amp;gt;&lt;/em&gt; which could be serialised and unfortunately the .NET one can’t. So I threw together a simple implementation of one using two &lt;em&gt;List&amp;lt;T&amp;gt;. &lt;/em&gt;It is not perfect for every possible time you may need an alternative to &lt;em&gt;Dictionary&amp;lt;T,V&amp;gt;&lt;/em&gt;, for example the only item manipulation I have is to add an item and clear all items, but it is great for my needs in the case:&lt;/p&gt;  &lt;pre class="brush: csharp;"&gt;[XmlRoot(&amp;quot;simpleDictionary&amp;quot;)]
public class SimpleDictionary&amp;lt;Key, Value&amp;gt; : IEnumerable, IXmlSerializable
{
    private List&amp;lt;Key&amp;gt; keys = new List&amp;lt;Key&amp;gt;();
    private List&amp;lt;Value&amp;gt; values = new List&amp;lt;Value&amp;gt;();

    public List&amp;lt;Key&amp;gt; Keys
    {
        get
        {
            return keys;
        }
    }

    public List&amp;lt;Value&amp;gt; Values
    {
        get
        {
            return values;
        }
    }

    public IEnumerator GetEnumerator()
    {
        return (IEnumerator)new SimpleDictionaryEnumerator(this);
    }

    public void Add(Key key, Value value)
    {
        keys.Add(key);
        values.Add(value);
    }

    public void Add(object o)
    {
        KeyValuePair&amp;lt;Key, Value&amp;gt;? keyValuePair = o as KeyValuePair&amp;lt;Key, Value&amp;gt;?;
        if (keyValuePair != null)
        {
            this.Add(keyValuePair.Value.Key, keyValuePair.Value.Value);
        }
    }

    public void Clear()
    {
        keys.Clear();
        values.Clear();
    }

    #endregion

    private class SimpleDictionaryEnumerator : IEnumerator
    {
        private SimpleDictionary&amp;lt;Key, Value&amp;gt; simpleDictionary;
        private int index = -1;

        public SimpleDictionaryEnumerator(SimpleDictionary&amp;lt;Key, Value&amp;gt; simpleDictionary)
        {
            this.simpleDictionary = simpleDictionary;
        }

        #region IEnumerator Members

        public object Current
        {
            get
            {
                return new KeyValuePair&amp;lt;Key, Value&amp;gt;(simpleDictionary.keys[index], simpleDictionary.values[index]);
            }
        }

        public bool MoveNext()
        {
            index++;
            return !(index &amp;gt;= simpleDictionary.keys.Count);

        }

        public void Reset()
        {
            index = -1;
        }
    }

    public System.Xml.Schema.XmlSchema GetSchema()
    {
        return null;
    }

    public void ReadXml(XmlReader reader)
    {
        if (reader.IsEmptyElement)
        {
            return;
        }

        XmlSerializer keySerialiser = new XmlSerializer(typeof(Key));
        XmlSerializer valueSerialiser = new XmlSerializer(typeof(Value));

        reader.Read();
        while (reader.NodeType != System.Xml.XmlNodeType.EndElement)
        {
            reader.ReadStartElement(&amp;quot;keyValuePair&amp;quot;);

            reader.ReadStartElement(&amp;quot;key&amp;quot;);
            Key key = (Key)keySerialiser.Deserialize(reader);
            reader.ReadEndElement();

            reader.ReadStartElement(&amp;quot;value&amp;quot;);
            Value value = (Value)valueSerialiser.Deserialize(reader);
            reader.ReadEndElement();

            this.Add(key, value);

            reader.ReadEndElement(); // for keyvaluepair
            reader.MoveToContent();
        }

        reader.ReadEndElement(); // for root
    }

    public void WriteXml(XmlWriter writer)
    {
        XmlSerializer keySerialiser = new XmlSerializer(typeof(Key));
        XmlSerializer valueSerialiser = new XmlSerializer(typeof(Value));

        for (int counter = 0; counter &amp;lt; this.keys.Count; counter++)
        {
            writer.WriteStartElement(&amp;quot;keyValuePair&amp;quot;);

            writer.WriteStartElement(&amp;quot;key&amp;quot;);
            keySerialiser.Serialize(writer, this.keys[counter]);
            writer.WriteEndElement();

            writer.WriteStartElement(&amp;quot;value&amp;quot;);
            valueSerialiser.Serialize(writer, this.values[counter]);
            writer.WriteEndElement();

            writer.WriteEndElement();

        }
    }
}&lt;/pre&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=w5tpfXrO3-g:dUBOal5UTDw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=w5tpfXrO3-g:dUBOal5UTDw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=w5tpfXrO3-g:dUBOal5UTDw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=w5tpfXrO3-g:dUBOal5UTDw:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=w5tpfXrO3-g:dUBOal5UTDw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=w5tpfXrO3-g:dUBOal5UTDw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=w5tpfXrO3-g:dUBOal5UTDw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=w5tpfXrO3-g:dUBOal5UTDw:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=w5tpfXrO3-g:dUBOal5UTDw:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=w5tpfXrO3-g:dUBOal5UTDw:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=w5tpfXrO3-g:dUBOal5UTDw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=w5tpfXrO3-g:dUBOal5UTDw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=w5tpfXrO3-g:dUBOal5UTDw:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Sadevcoza-Sharepoint/~4/w5tpfXrO3-g" height="1" width="1"/&gt;</description>
 <comments>http://www.sadev.co.za/content/how-create-adapter-tfs-integration-platform-appendix-2-simpledictionary#comments</comments>
 <category domain="http://www.sadev.co.za/taxonomy/term/12">.NET</category>
 <category domain="http://www.sadev.co.za/category/blog/alm">ALM</category>
 <category domain="http://www.sadev.co.za/category/blog/alm-rangers">ALM Rangers</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/38">Development</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/64">SharePoint</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/31">Tools &amp; Apps</category>
 <pubDate>Thu, 10 Jun 2010 10:34:52 +0000</pubDate>
 <dc:creator>Robert MacLean</dc:creator>
 <guid isPermaLink="false">486 at http://www.sadev.co.za</guid>
<feedburner:origLink>http://www.sadev.co.za/content/how-create-adapter-tfs-integration-platform-appendix-2-simpledictionary</feedburner:origLink></item>
<item>
 <title>How to create an adapter for the TFS Integration Platform - Appendix 1: Power Tips</title>
 <link>http://feedproxy.google.com/~r/Sadevcoza-Sharepoint/~3/K1IYpDHF-2o/how-create-adapter-tfs-integration-platform-appendix-1-power-tips</link>
 <description>&lt;p&gt;&lt;em&gt;&lt;font size="1"&gt;Note: This post is part of a series and you can find the rest of the parts in the &lt;a href="/content/how-create-adapter-tfs-integration-platform-series-index" target="_blank"&gt;series index&lt;/a&gt;.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Throughout the series I have share a bunch of power tips for making this easier and this is a quick cheat sheet of them all.&lt;/p&gt;  &lt;h3&gt;From Part II: Getting Started&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Power Tip&lt;/strong&gt;: Once you have completed the tools install, go into to SQL Server and backup the TFSIntegrationPlatform database immediately. There are not only a few odd bugs that roam around which may cause you to need it but if you want to test on a clean environment, a restore is quicker than a reinstall. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Power Tip: &lt;/strong&gt;Make a common root for the TFS code and yours (in my case I used RangersCode) and then create sub directories in there for platform and your code (so I had My Production and MS production folders under RangersCode). This helps keep the items close, which makes things easier later plus keeps them separate so you can identify them. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;From Part III: Overview of adapters&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Power Tip: &lt;/strong&gt;The TraceManager puts all information written to it in the log files, so please make sure you do not put any sensitive information in there. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;From Part IV: IProvider&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Power Tip: &lt;/strong&gt;Using Visual Studio 2010’s new &lt;a href="http://blogs.msdn.com/b/zainnab/archive/2010/04/15/the-best-of-visual-studio-2010-using-generate-from-usage.aspx" target="_blank"&gt;“Generation from usage”&lt;/a&gt; features makes this stage of development much easier.&amp;#160; &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;From Part V: Items (IMigrationItem &amp;amp; IMigrationItemSerializer)&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Power Tip: &lt;/strong&gt;VC stands for Version Control. This refers to an adapter that works with the source control aspects of the system. WI, work items, and WIT, work item tracking, are the same thing. File attachments in WI are NOT regarded as VC and must be handled by your WI adapter. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Power Tip: &lt;/strong&gt;When you are downloading files in the IMigrationItem, you are responsible for the creation of the path too. So make sure you are creating directories and also checking what directories exist too. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;From Part VIII: IMigrationProvider&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Power Tip: &lt;/strong&gt;In my implementation I used the very useful &lt;em&gt;Path.GetTempFileName()&lt;/em&gt; from the .NET framework to get a place to put the file. However this causes an empty temp file to be created automatically and the platform doesn’t like that, so I needed to delete the temp file after that, and then call &lt;em&gt;Download&lt;/em&gt;. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Power Tip: &lt;/strong&gt;For folders creation or for deletes of files/folders you can use the &lt;em&gt;Path &lt;/em&gt;property of the action to get the folder name. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;From Part IX: IServerPathTranslationService&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Power Tip: &lt;/strong&gt;The neutral path, or canonical path as it is correctly named, is a path that is “Unix like”, (I.e. /src/project/). However these do not follow all the same rules as true Unix paths. For example : is a valid character in the path. &lt;/li&gt; &lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=K1IYpDHF-2o:LQPm8CQCMLs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=K1IYpDHF-2o:LQPm8CQCMLs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=K1IYpDHF-2o:LQPm8CQCMLs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=K1IYpDHF-2o:LQPm8CQCMLs:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=K1IYpDHF-2o:LQPm8CQCMLs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=K1IYpDHF-2o:LQPm8CQCMLs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=K1IYpDHF-2o:LQPm8CQCMLs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=K1IYpDHF-2o:LQPm8CQCMLs:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=K1IYpDHF-2o:LQPm8CQCMLs:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=K1IYpDHF-2o:LQPm8CQCMLs:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=K1IYpDHF-2o:LQPm8CQCMLs:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=K1IYpDHF-2o:LQPm8CQCMLs:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=K1IYpDHF-2o:LQPm8CQCMLs:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Sadevcoza-Sharepoint/~4/K1IYpDHF-2o" height="1" width="1"/&gt;</description>
 <comments>http://www.sadev.co.za/content/how-create-adapter-tfs-integration-platform-appendix-1-power-tips#comments</comments>
 <category domain="http://www.sadev.co.za/taxonomy/term/12">.NET</category>
 <category domain="http://www.sadev.co.za/category/blog/alm">ALM</category>
 <category domain="http://www.sadev.co.za/category/blog/alm-rangers">ALM Rangers</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/38">Development</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/64">SharePoint</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/31">Tools &amp; Apps</category>
 <pubDate>Wed, 09 Jun 2010 12:38:33 +0000</pubDate>
 <dc:creator>Robert MacLean</dc:creator>
 <guid isPermaLink="false">484 at http://www.sadev.co.za</guid>
<feedburner:origLink>http://www.sadev.co.za/content/how-create-adapter-tfs-integration-platform-appendix-1-power-tips</feedburner:origLink></item>
<item>
 <title>How to create an adapter for the TFS Integration Platform - Part X: Reflection on SharePoint</title>
 <link>http://feedproxy.google.com/~r/Sadevcoza-Sharepoint/~3/zTKQU4jI8XE/how-create-adapter-tfs-integration-platform-part-x-reflection-sharepoint</link>
 <description>&lt;p&gt;&lt;em&gt;&lt;font size="1"&gt;Note: This post is part of a series and you can find the rest of the parts in the &lt;a href="/content/how-create-adapter-tfs-integration-platform-series-index" target="_blank"&gt;series index&lt;/a&gt;.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;This post is not a technically heavy, like the most of the series, but more a reflection on what I learnt about integrating to SharePoint. This information will hold true for any type of work with SharePoint, not just if you are creating adapters. &lt;/p&gt;  &lt;h3&gt;What I used&lt;/h3&gt;  &lt;p&gt;For the WIT adapter I used on the &lt;em&gt;lists.asmx&lt;/em&gt; web service, which allows you to work with list items. While with the VC adapter I used both the &lt;em&gt;lists.asmx&lt;/em&gt; and &lt;em&gt;copy.asmx&lt;/em&gt; web service and I ended up using some WebDav methods too. You may be asking why I needed &lt;em&gt;lists.asmx&lt;/em&gt; with VC – because of SharePoint Rule #1 “Everything is a list” – even a document library. The copy web service allows for files to be uploaded to SharePoint. &lt;/p&gt;  &lt;p&gt;My goal was to use just web services, which are one of the three ways you can interact with SharePoint the other two being WebDav and the API. The API is better than web services in every aspect (it is faster and more feature complete) but has a serious limitation, you MUST run the application using the API on the same server as SharePoint is install on. It makes it really only useful for tools used by SharePoint admins or web components, like web parts. WebDav is a standard for talking to web services and is generally regarded as a poorer implementation compared to the web services because it does much less.&lt;/p&gt;  &lt;p&gt;In the end I had a bug with file deletion in the VC adapter when using the web services. After much fighting, I gave up and used WebDav for that one function.&lt;/p&gt;  &lt;h3&gt;What I learnt&lt;/h3&gt;  &lt;p&gt;If I rewrote these adapters I would use mostly WebDav and only use the &lt;em&gt;lists.asmx&lt;/em&gt; web service for meta information tasks rather than manipulation. This is because while the WebDav implementation does less, it does all the fundamentals (create, update, delete) and it does it faster and more reliable way than the list and copy web services. The &lt;em&gt;lists.asmx&lt;/em&gt; web service would be used only for getting item ID’s, lists of items, files and folders and maybe renaming since WebDav can’t rename. This would allow me to drop the copy web service would give me faster adapters and cleaner code in less time.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=zTKQU4jI8XE:VZ356bd32Ek:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=zTKQU4jI8XE:VZ356bd32Ek:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=zTKQU4jI8XE:VZ356bd32Ek:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=zTKQU4jI8XE:VZ356bd32Ek:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=zTKQU4jI8XE:VZ356bd32Ek:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=zTKQU4jI8XE:VZ356bd32Ek:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=zTKQU4jI8XE:VZ356bd32Ek:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=zTKQU4jI8XE:VZ356bd32Ek:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=zTKQU4jI8XE:VZ356bd32Ek:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=zTKQU4jI8XE:VZ356bd32Ek:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=zTKQU4jI8XE:VZ356bd32Ek:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=zTKQU4jI8XE:VZ356bd32Ek:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=zTKQU4jI8XE:VZ356bd32Ek:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Sadevcoza-Sharepoint/~4/zTKQU4jI8XE" height="1" width="1"/&gt;</description>
 <comments>http://www.sadev.co.za/content/how-create-adapter-tfs-integration-platform-part-x-reflection-sharepoint#comments</comments>
 <category domain="http://www.sadev.co.za/taxonomy/term/12">.NET</category>
 <category domain="http://www.sadev.co.za/category/blog/alm">ALM</category>
 <category domain="http://www.sadev.co.za/category/blog/alm-rangers">ALM Rangers</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/38">Development</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/64">SharePoint</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/31">Tools &amp; Apps</category>
 <pubDate>Tue, 08 Jun 2010 14:09:59 +0000</pubDate>
 <dc:creator>Robert MacLean</dc:creator>
 <guid isPermaLink="false">483 at http://www.sadev.co.za</guid>
<feedburner:origLink>http://www.sadev.co.za/content/how-create-adapter-tfs-integration-platform-part-x-reflection-sharepoint</feedburner:origLink></item>
<item>
 <title>How to create an adapter for the TFS Integration Platform - Part IX: IServerPathTranslationService</title>
 <link>http://feedproxy.google.com/~r/Sadevcoza-Sharepoint/~3/Lm6gM-RMcac/how-create-adapter-tfs-integration-platform-part-ix-iserverpathtranslationservice</link>
 <description>&lt;p&gt;&lt;em&gt;&lt;font size="1"&gt;Note: This post is part of a series and you can find the rest of the parts in the &lt;a href="/content/how-create-adapter-tfs-integration-platform-series-index" target="_blank"&gt;series index&lt;/a&gt;.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;IServerPathTranslationService&lt;/em&gt; takes the path to your source control item and translates it into a platform neutral path and visa versa. An example for this is if you were moving files between Windows and Linux. On Windows your path may be c&lt;em&gt;:\RangersCode\My Production\&lt;/em&gt; while on Linux that path needs to become&lt;em&gt;/src/RangersCode/My Production/ &lt;/em&gt;to handle the differences you need to change it to a neutral path first. &lt;/p&gt;  &lt;p&gt;The amount of sleep that I lost on path translation is embarrassing because the concept is dead simple, applying it correctly is ridiculously hard. The de facto guide for how this should work can be found on &lt;a href="http://blogs.msdn.com/b/willy-peter_schaub/archive/2010/01/22/tfs-integration-platform-translation-service-how-does-it-work.aspx" target="_blank"&gt;Willy-Peter’s blog&lt;/a&gt;, however there is also an &lt;a href="http://blogs.msdn.com/b/willy-peter_schaub/archive/2010/03/14/tfs-integration-platform-translation-service-how-does-it-work-part-2.aspx" target="_blank"&gt;update&lt;/a&gt; based on a lot of question asking by me which you may want to read.&lt;/p&gt;  &lt;p&gt;This is only needed for VC adapters so if you just want a WI adapter you can skip this. &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;Power Tip: &lt;/strong&gt;The neutral path, or canonical path as it is correctly named, is a path that is “Unix like”, (I.e. /src/project/). However these do not follow all the same rules as true Unix paths. For example : is a valid character in the path. &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;The two methods you need to implement are:&lt;/p&gt;  &lt;h3&gt;TranslateToCanonicalPathCaseSensitive&lt;/h3&gt;  &lt;p&gt;This method requires you provide a neutral path for one of your paths. For me this is simply just putting a leading slash on the item’s URL:&lt;/p&gt;  &lt;pre class="brush: csharp;"&gt;public string TranslateToCanonicalPathCaseSensitive(string serverPath)
{
    TraceManager.TraceInformation(&amp;quot;WSSVC:TranslationToCanonical - {0}&amp;quot;, serverPath);
    string localPath = string.Format(CultureInfo.CurrentCulture, &amp;quot;/{0}&amp;quot;, serverPath);
    
    TraceManager.TraceInformation(&amp;quot;WSSVC:New:{0} -&amp;gt; {1}&amp;quot;, serverPath, localPath);
    return localPath;
}&lt;/pre&gt;

&lt;h3&gt;TranslateFromCanonicalPath&lt;/h3&gt;

&lt;p&gt;This method is the reverse from TranslateToCanonicalPathCaseSensitive it takes a neutral path and provides one that applies to your adapter. In my case it meant dropping the first character and making sure I had an absolute URI:&lt;/p&gt;

&lt;pre class="brush: csharp;"&gt;public string TranslateFromCanonicalPath(string canonicalPath, string canonicalFilterPath)
{
    TraceManager.TraceInformation(&amp;quot;WSSVC:TranslationFromCanonical - {0} - {1}&amp;quot;, canonicalPath, canonicalFilterPath);
    string result = new Uri(canonicalPath.Substring(1)).AbsoluteUri;
    TraceManager.TraceInformation(&amp;quot;WSSVC:TranslationFromCanonical:Result {0}&amp;quot;, result);
    return result;
}&lt;/pre&gt;

&lt;h3&gt;First in the Platform’s Eyes&lt;/h3&gt;

&lt;p&gt;There is an interesting thing that the platform does when it comes to server path translation, it creates this class first. This is before anything else, like the configuration service, so you need to make sure this class relies on very little, if any ,outside information. During the creation it also takes the root path from the filter items in your configuration and passes it to &lt;em&gt;TranslateToCanonicalPathCaseSensitive&lt;/em&gt; to get the root neutral path. It needs to know this because it will want to strip this information out when it passes it to the other adapter and add it back when other adapters pass their paths to you.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=Lm6gM-RMcac:E2lcMPekVK0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=Lm6gM-RMcac:E2lcMPekVK0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=Lm6gM-RMcac:E2lcMPekVK0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=Lm6gM-RMcac:E2lcMPekVK0:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=Lm6gM-RMcac:E2lcMPekVK0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=Lm6gM-RMcac:E2lcMPekVK0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=Lm6gM-RMcac:E2lcMPekVK0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=Lm6gM-RMcac:E2lcMPekVK0:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=Lm6gM-RMcac:E2lcMPekVK0:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=Lm6gM-RMcac:E2lcMPekVK0:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=Lm6gM-RMcac:E2lcMPekVK0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=Lm6gM-RMcac:E2lcMPekVK0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=Lm6gM-RMcac:E2lcMPekVK0:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Sadevcoza-Sharepoint/~4/Lm6gM-RMcac" height="1" width="1"/&gt;</description>
 <comments>http://www.sadev.co.za/content/how-create-adapter-tfs-integration-platform-part-ix-iserverpathtranslationservice#comments</comments>
 <category domain="http://www.sadev.co.za/taxonomy/term/12">.NET</category>
 <category domain="http://www.sadev.co.za/category/blog/alm">ALM</category>
 <category domain="http://www.sadev.co.za/category/blog/alm-rangers">ALM Rangers</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/38">Development</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/64">SharePoint</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/31">Tools &amp; Apps</category>
 <pubDate>Mon, 07 Jun 2010 11:04:46 +0000</pubDate>
 <dc:creator>Robert MacLean</dc:creator>
 <guid isPermaLink="false">482 at http://www.sadev.co.za</guid>
<feedburner:origLink>http://www.sadev.co.za/content/how-create-adapter-tfs-integration-platform-part-ix-iserverpathtranslationservice</feedburner:origLink></item>
<item>
 <title>How to create an adapter for the TFS Integration Platform - Part VIII: IMigrationProvider</title>
 <link>http://feedproxy.google.com/~r/Sadevcoza-Sharepoint/~3/EGil4L-bofM/how-create-adapter-tfs-integration-platform-part-viii-imigrationprovider</link>
 <description>&lt;p&gt;&lt;em&gt;&lt;font size="1"&gt;Note: This post is part of a series and you can find the rest of the parts in the &lt;a href="/content/how-create-adapter-tfs-integration-platform-series-index" target="_blank"&gt;series index&lt;/a&gt;.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;The &lt;em&gt;IMigrationProvider&lt;/em&gt; interface is the sister to &lt;em&gt;IAnalysisProvider &lt;/em&gt;and handles the writing to your system. As with &lt;em&gt;IAnalysisProvider &lt;/em&gt;it include some methods you can ignore. &lt;/p&gt;  &lt;h3&gt;InitializeServices&lt;/h3&gt;  &lt;p&gt;As with &lt;em&gt;IAnalysisProvider&lt;/em&gt; the &lt;em&gt;InitializeServices &lt;/em&gt;method is what is called first and is used for all setup. In my implementation I do a lot of setup for SharePoint which may not apply to other implementations. One thing you must do though, is register your item serialiser with the platform as follows:&lt;/p&gt;  &lt;pre class="brush: csharp;"&gt;changeGroupService.RegisterDefaultSourceSerilizer(new SharePointVCMigrationItemSerializer());&lt;/pre&gt;

&lt;h3&gt;ProcessChangeGroup&lt;/h3&gt;

&lt;p&gt;The &lt;em&gt;ProcessChangeGroup&lt;/em&gt; method is the most important method of &lt;em&gt;IMigrationProvider &lt;/em&gt;as it is called to do the write operation. You are provided a &lt;em&gt;ChangeGroup &lt;/em&gt;and the &lt;em&gt;Actions &lt;/em&gt;property of that &lt;em&gt;ChangeGroup&lt;/em&gt; contains each file/folder/item you need to write/update/delete to your system. The &lt;em&gt;ProcessChangeGroup &lt;/em&gt;needs to return a&amp;#160; log of what has happened so that the platform knows all the actions were performed and also so it can correctly tie up item unique ID’s in your system with the other system unique item ID’s. The log is done with a &lt;em&gt;ConversionResult&lt;/em&gt;&lt;/p&gt;

&lt;pre class="brush: csharp;"&gt;ConversionResult conversionResult = new ConversionResult(configurationService.MigrationPeer, configurationService.SourceId);&lt;/pre&gt;

&lt;p&gt;Each action has an &lt;em&gt;Action &lt;/em&gt;which tells you what you need to do with the item, be it an update or add or delete etc… &lt;/p&gt;

&lt;p&gt;Each action also has an &lt;em&gt;ItemTypeReferenceName &lt;/em&gt;which tells you what it is. For WIT this is not too important as you will be dealing with work items, but for VC this very important as it could be a concrete item file or folder or a more theoretical item like a branch or merge instruction. &lt;/p&gt;

&lt;p&gt;So you need to loop over all the actions and based on the action + type do the correct thing:&lt;/p&gt;

&lt;pre class="brush: csharp;"&gt;foreach (MigrationAction action in changeGroup.Actions)
{
    if (action.Action == WellKnownChangeActionId.Add || action.Action == WellKnownChangeActionId.Edit)
    {
        if (action.ItemTypeReferenceName == WellKnownContentType.VersionControlledFile.ReferenceName)
        {&lt;/pre&gt;

&lt;p&gt;Once you have completed your action you need to add the information to the conversion result log. My two adapters do this very differently for no reason other than I wrote the VC adapter much earlier and when I write the WI adapter later I did a more refined generic implementation there. The key part of the adding the information though is below. The most important thing is to provide the ID (the third parameter) to the platform so it knows how to link your item in future which is needed for deletes and updates.&lt;/p&gt;

&lt;pre class="brush: csharp;"&gt;conversionResult.ItemConversionHistory.Add(new ItemConversionHistory(sourceSystemId, string.Empty, newSharePointId.ToString(), string.Empty));&lt;/pre&gt;

&lt;h3&gt;Items and VC&lt;/h3&gt;

&lt;p&gt;With the VC adapter the way you request the actual file you want is using the &lt;em&gt;Download &lt;/em&gt;method on the source item and providing a path. &lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;Power Tip: &lt;/strong&gt;In my implementation I used the very useful &lt;em&gt;Path.GetTempFileName()&lt;/em&gt; from the .NET framework to get a place to put the file. However this causes an empty temp file to be created automatically and the platform doesn’t like that, so I needed to delete the temp file after that, and then call &lt;em&gt;Download&lt;/em&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;Power Tip: &lt;/strong&gt;For folders creation or for deletes of files/folders you can use the &lt;em&gt;Path &lt;/em&gt;property of the action to get the folder name. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;Items and WIT&lt;/h3&gt;

&lt;p&gt;WIT is easier when it comes to writing because you do not need to worry about paths and files - you just need to do some XML parsing. All the information about the item will be provided to you in the &lt;em&gt;MigrationActionDescription &lt;/em&gt;property of the action and you need to parse that into an item. Since the mapping of field names is handled by the platform this is very simple. In my case the following small method was all I needed to build a list of fields:&lt;/p&gt;

&lt;pre class="brush: csharp;"&gt;private static Dictionary&amp;lt;string, object&amp;gt; BuildFieldList(IMigrationAction action)
{
    Dictionary&amp;lt;string, object&amp;gt; fields = new Dictionary&amp;lt;string, object&amp;gt;();

    XmlNodeList columns = action.MigrationActionDescription.SelectNodes(&amp;quot;/WorkItemChanges/Columns/Column&amp;quot;);

    foreach (XmlNode columnData in columns)
    {
        string fieldValue = columnData.FirstChild.InnerText;
        string fieldName = columnData.Attributes[&amp;quot;ReferenceName&amp;quot;].Value;

        if (string.IsNullOrEmpty(fieldName) == false)
        {
            fields.Add(fieldName, fieldValue);
        }
    }

    return fields;
}&lt;/pre&gt;

&lt;h3&gt;Item ID&lt;/h3&gt;

&lt;p&gt;The platform handles the mapping of item ID’s too, so if you need to know what item needs to be updated or deleted it can be found in the &lt;em&gt;MigrationActionDescription&lt;/em&gt;. The following method will work regardless of what your system is:&lt;/p&gt;

&lt;pre class="brush: csharp;"&gt;private string GetSharePointID(IMigrationAction action)
{
    TraceManager.TraceInformation(&amp;quot;WSSWIT:MP:GetSharePointID&amp;quot;);
    XmlNode workItemChangesNode = action.MigrationActionDescription.SelectSingleNode(&amp;quot;/WorkItemChanges&amp;quot;);
    string value = string.Empty;

    if (workItemChangesNode.Attributes[&amp;quot;TargetWorkItemID&amp;quot;] == null)
    {
        TraceManager.TraceInformation(&amp;quot;WSSWIT:MP:GetSharePointID:Cannot find work item id. XML is: {0}&amp;quot;, workItemChangesNode.OuterXml);
    }
    else
    {
        value = workItemChangesNode.Attributes[&amp;quot;TargetWorkItemID&amp;quot;].Value;
        TraceManager.TraceInformation(&amp;quot;WSSWIT:MP:GetSharePointID:Value {0}&amp;quot;, value);
    }

    return value;
}&lt;/pre&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=EGil4L-bofM:kSb3Hnjxzug:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=EGil4L-bofM:kSb3Hnjxzug:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=EGil4L-bofM:kSb3Hnjxzug:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=EGil4L-bofM:kSb3Hnjxzug:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=EGil4L-bofM:kSb3Hnjxzug:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=EGil4L-bofM:kSb3Hnjxzug:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=EGil4L-bofM:kSb3Hnjxzug:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=EGil4L-bofM:kSb3Hnjxzug:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=EGil4L-bofM:kSb3Hnjxzug:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=EGil4L-bofM:kSb3Hnjxzug:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=EGil4L-bofM:kSb3Hnjxzug:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=EGil4L-bofM:kSb3Hnjxzug:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=EGil4L-bofM:kSb3Hnjxzug:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Sadevcoza-Sharepoint/~4/EGil4L-bofM" height="1" width="1"/&gt;</description>
 <comments>http://www.sadev.co.za/content/how-create-adapter-tfs-integration-platform-part-viii-imigrationprovider#comments</comments>
 <category domain="http://www.sadev.co.za/taxonomy/term/12">.NET</category>
 <category domain="http://www.sadev.co.za/category/blog/alm">ALM</category>
 <category domain="http://www.sadev.co.za/category/blog/alm-rangers">ALM Rangers</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/38">Development</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/64">SharePoint</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/31">Tools &amp; Apps</category>
 <pubDate>Fri, 04 Jun 2010 07:50:36 +0000</pubDate>
 <dc:creator>Robert MacLean</dc:creator>
 <guid isPermaLink="false">479 at http://www.sadev.co.za</guid>
<feedburner:origLink>http://www.sadev.co.za/content/how-create-adapter-tfs-integration-platform-part-viii-imigrationprovider</feedburner:origLink></item>
<item>
 <title>How to create an adapter for the TFS Integration Platform - Part VII: WIT Conflict Handling</title>
 <link>http://feedproxy.google.com/~r/Sadevcoza-Sharepoint/~3/NC5q6yhMMTM/how-create-adapter-tfs-integration-platform-part-vii-wit-conflict-handling</link>
 <description>&lt;p&gt;&lt;em&gt;&lt;font size="1"&gt;Note: This post is part of a series and you can find the rest of the parts in the &lt;a href="/content/how-create-adapter-tfs-integration-platform-series-index" target="_blank"&gt;series index&lt;/a&gt;.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;The WIT adapter needs a custom conflict type and a custom conflict handler, really for no reason other than the platform expects it.&lt;/p&gt;  &lt;h3&gt;Conflict Handler&lt;/h3&gt;  &lt;p&gt;If you have no reason for a custom conflict handler, a simple implementation which allows for manual resolution can be created, which is what I have below. &lt;/p&gt;  &lt;pre class="brush: csharp;"&gt;public class SharePointWITGeneralConflictHandler : IConflictHandler
{
    public bool CanResolve(MigrationConflict conflict, ConflictResolutionRule rule)
    {
        return ConflictTypeHandled.ScopeInterpreter.IsInScope(conflict.ScopeHint, rule.ApplicabilityScope);
    }

    public ConflictResolutionResult Resolve(MigrationConflict conflict, ConflictResolutionRule rule, out List&amp;lt;MigrationAction&amp;gt; actions)
    {
        actions = null;

        if (rule.ActionRefNameGuid.Equals(new ManualConflictResolutionAction().ReferenceName))
        {
            return ManualResolve(out actions);
        }

        return new ConflictResolutionResult(false, ConflictResolutionType.Other);
    }

    public ConflictType ConflictTypeHandled
    {
        get;
        set;
    }

    private static ConflictResolutionResult ManualResolve(out List&amp;lt;MigrationAction&amp;gt; actions)
    {
        actions = null;
        return new ConflictResolutionResult(true, ConflictResolutionType.Other);
    }
}&lt;/pre&gt;

&lt;h3&gt;Conflict Type&lt;/h3&gt;

&lt;p&gt;If you have no reason for a custom conflict type, you can do what I did which is to re-implement the generic one with even less features namely only supporting &lt;em&gt;ManualConflictResolution&lt;/em&gt; and a very simple scope hint.&lt;/p&gt;

&lt;pre class="brush: csharp;"&gt;public class SharePointWITGeneralConflictType : ConflictType
{
    public static MigrationConflict CreateConflict(Exception exception)
    {
        return new MigrationConflict(
            new SharePointWITGeneralConflictType(),
            MigrationConflict.Status.Unresolved,
            exception.ToString(),
            CreateScopeHint(Guid.NewGuid().ToString()));
    }

    public static MigrationConflict CreateConflict(Exception exception, IMigrationAction conflictedAction)
    {
        return new SharePointWITGeneralConflictType().CreateConflict(exception.ToString(), CreateScopeHint(Guid.NewGuid().ToString()), conflictedAction);
    }

    public override Guid ReferenceName
    {
        get
        {
            return s_conflictTypeReferenceName;
        }
    }

    public override string FriendlyName
    {
        get
        {
            return s_conflictTypeFriendlyName;
        }
    }

    public override string Description
    {
        get
        {
            return s_conflictTypeDescription;
        }
    }

    public SharePointWITGeneralConflictType()
        : base(new SharePointWITGeneralConflictHandler())
    { }

    public static string CreateScopeHint(string sourceItemId)
    {
        return string.Format(CultureInfo.CurrentCulture, &amp;quot;/{0}/{1}&amp;quot;, sourceItemId, Guid.NewGuid().ToString());
    }

    protected override void RegisterDefaultSupportedResolutionActions()
    {
        AddSupportedResolutionAction(new ManualConflictResolutionAction());
    }

    private static readonly Guid s_conflictTypeReferenceName = new Guid(&amp;quot;{606531DF-231A-496B-9996-50F239481988}&amp;quot;);
    private const string s_conflictTypeFriendlyName = &amp;quot;TFS WIT general conflict type&amp;quot;;
    private const string s_conflictTypeDescription =
        &amp;quot;This conflict is detected when an unknown exception is thrown during Work Item data submission.&amp;quot;;
}&lt;/pre&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=NC5q6yhMMTM:DbUzIplQUrA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=NC5q6yhMMTM:DbUzIplQUrA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=NC5q6yhMMTM:DbUzIplQUrA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=NC5q6yhMMTM:DbUzIplQUrA:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=NC5q6yhMMTM:DbUzIplQUrA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=NC5q6yhMMTM:DbUzIplQUrA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=NC5q6yhMMTM:DbUzIplQUrA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=NC5q6yhMMTM:DbUzIplQUrA:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=NC5q6yhMMTM:DbUzIplQUrA:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=NC5q6yhMMTM:DbUzIplQUrA:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=NC5q6yhMMTM:DbUzIplQUrA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=NC5q6yhMMTM:DbUzIplQUrA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=NC5q6yhMMTM:DbUzIplQUrA:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Sadevcoza-Sharepoint/~4/NC5q6yhMMTM" height="1" width="1"/&gt;</description>
 <comments>http://www.sadev.co.za/content/how-create-adapter-tfs-integration-platform-part-vii-wit-conflict-handling#comments</comments>
 <category domain="http://www.sadev.co.za/taxonomy/term/12">.NET</category>
 <category domain="http://www.sadev.co.za/category/blog/alm">ALM</category>
 <category domain="http://www.sadev.co.za/category/blog/alm-rangers">ALM Rangers</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/38">Development</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/64">SharePoint</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/31">Tools &amp; Apps</category>
 <pubDate>Thu, 03 Jun 2010 07:40:17 +0000</pubDate>
 <dc:creator>Robert MacLean</dc:creator>
 <guid isPermaLink="false">478 at http://www.sadev.co.za</guid>
<feedburner:origLink>http://www.sadev.co.za/content/how-create-adapter-tfs-integration-platform-part-vii-wit-conflict-handling</feedburner:origLink></item>
<item>
 <title>How to create an adapter for the TFS Integration Platform - Part VI: IAnalysisProvider</title>
 <link>http://feedproxy.google.com/~r/Sadevcoza-Sharepoint/~3/KgiVGIHaYu4/how-create-adapter-tfs-integration-platform-part-vi-ianalysisprovider</link>
 <description>&lt;p&gt;&lt;em&gt;&lt;font size="1"&gt;Note: This post is part of a series and you can find the rest of the parts in the &lt;a href="/content/how-create-adapter-tfs-integration-platform-series-index" target="_blank"&gt;series index&lt;/a&gt;.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;IAnalysisProvider&lt;/em&gt;, has a name that is a bit misleading, or was misleading to me because for a long time I thought it did some analysis of the environment as a pre-step and then real work happened elsewhere. The reality is the &lt;em&gt;IAnalysisProvider &lt;/em&gt;is the reader part of your adapter, it’s goal is to get data from your system and into a format and/or location that the platform can work with.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.sadev.co.za/files/image_2_25.png" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.sadev.co.za/files/image_thumb_41.png" width="463" height="106" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h3&gt;IServiceProvider&lt;/h3&gt;  &lt;p&gt;&lt;em&gt;IAnalysisProvider&lt;/em&gt; inherits from &lt;em&gt;IServiceProvider &lt;/em&gt;which means you need to implement a method for that, &lt;em&gt;GetService&lt;/em&gt;, which just returns this object.&lt;/p&gt;  &lt;pre class="brush: csharp;"&gt;object IServiceProvider.GetService(Type serviceType)
{
    return (IServiceProvider)this;
}&lt;/pre&gt;

&lt;h3&gt;Misc Methods&lt;/h3&gt;

&lt;p&gt;I am not cover every method you need to implement from &lt;em&gt;IAnalysisProvider&lt;/em&gt;, because you seldom need to implement them all. For example in my implementation of &lt;em&gt;DetectConflicts&lt;/em&gt; is just does some logging:&lt;/p&gt;

&lt;pre class="brush: csharp;"&gt;void IAnalysisProvider.DetectConflicts(ChangeGroup changeGroup)
{
    TraceManager.TraceInformation(&amp;quot;WSSVC:AP:DetectConflicts&amp;quot;);
}&lt;/pre&gt;

&lt;h3&gt;InitializeServices&lt;/h3&gt;

&lt;p&gt;The first method you must care about is &lt;em&gt;InitializeServices&lt;/em&gt;, this is the first method which is called by the platform and it does five key things in my scenario:&lt;/p&gt;

&lt;pre class="brush: csharp;"&gt;void IAnalysisProvider.InitializeServices(IServiceContainer serviceContainer)
{
    TraceManager.TraceInformation(&amp;quot;WSSVC:AP:Initialize&amp;quot;);
    this.analysisServiceContainer = serviceContainer;

    supportedContentTypes = new Collection&amp;lt;ContentType&amp;gt;();
    supportedContentTypes.Add(WellKnownContentType.VersionControlledFile);
    supportedContentTypes.Add(WellKnownContentType.VersionControlledFolder);

    SharePointVCChangeActionHandler handler = new SharePointVCChangeActionHandler(this);
    supportedChangeActions = new Dictionary&amp;lt;Guid, ChangeActionHandler&amp;gt;();
    supportedChangeActions.Add(WellKnownChangeActionId.Add, handler.BasicActionHandler);
    supportedChangeActions.Add(WellKnownChangeActionId.Delete, handler.BasicActionHandler);
    supportedChangeActions.Add(WellKnownChangeActionId.Edit, handler.BasicActionHandler);

    configurationService = (ConfigurationService)analysisServiceContainer.GetService(typeof(ConfigurationService));

    highWaterMarkDelta = new HighWaterMark&amp;lt;DateTime&amp;gt;(Constants.HwmDelta);
    highWaterMarkChangeset = new HighWaterMark&amp;lt;int&amp;gt;(&amp;quot;LastChangeSet&amp;quot;);
    configurationService.RegisterHighWaterMarkWithSession(highWaterMarkDelta);
    configurationService.RegisterHighWaterMarkWithSession(highWaterMarkChangeset);
    changeGroupService = (ChangeGroupService)analysisServiceContainer.GetService(typeof(ChangeGroupService));
    changeGroupService.RegisterDefaultSourceSerilizer(new SharePointVCMigrationItemSerializer());
}&lt;/pre&gt;

&lt;ul&gt;
  &lt;li&gt;The first part is the setting up of what types of content we support (lines 6 to lines 8). You can see above I only care about files and folders. &lt;/li&gt;

  &lt;li&gt;The second part is the setting up of what actions we support for reading (lines 10 to 14), which in this case is Add, Delete and Edit. Delete is a bit of a lie since we do not actually support it but we say we do. &lt;/li&gt;

  &lt;li&gt;The third part is getting the configuration service which is important since we will use it later (line 16). &lt;/li&gt;

  &lt;li&gt;The forth part is getting the HWM, or high watermark information (lines 18 to 21) which I will explain in a moment. &lt;/li&gt;

  &lt;li&gt;Lastly we register the default item serialiser (line 23) so that the platform knows how to convert the items. &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Registration&lt;/h3&gt;

&lt;p&gt;We setup the content types and actions we support and then we need to register those and the way to do that is with &lt;em&gt;RegisterSupportedChangeActions&lt;/em&gt;. What I did was to loop over the actions and then loop over the types finally calling &lt;em&gt;RegisterChangeAction&lt;/em&gt;. You could do this differently, for example if you only supported some actions on some types:&lt;/p&gt;

&lt;pre class="brush: csharp;"&gt;void IAnalysisProvider.RegisterSupportedChangeActions(ChangeActionRegistrationService contentActionRegistrationService)
{
    TraceManager.TraceInformation(&amp;quot;WSSVC:AP:RegisterSupportedChangeActions&amp;quot;);
    this.changeActionRegistrationService = contentActionRegistrationService;
    foreach (KeyValuePair&amp;lt;Guid, ChangeActionHandler&amp;gt; supportedChangeAction in supportedChangeActions)
    {
        foreach (ContentType contentType in ((IAnalysisProvider)this).SupportedContentTypes)
        {
            changeActionRegistrationService.RegisterChangeAction(supportedChangeAction.Key, contentType.ReferenceName, supportedChangeAction.Value);
        }
    }
}&lt;/pre&gt;

&lt;h4&gt;ChangeActionHandler&lt;/h4&gt;

&lt;p&gt;The &lt;em&gt;ChangeActionHandler&lt;/em&gt; class is a separate class which is used in the &lt;em&gt;IAnalysisProvider&lt;/em&gt; during registration which provides the minimal functionality for figuring out how to register a new action (i.e. add file, update work item etc…).&lt;/p&gt;

&lt;pre class="brush: csharp;"&gt;public abstract class ChangeActionHandlers
{
    protected ChangeActionHandlers(IAnalysisProvider analysisProvider)
    {
    }

    public virtual void BasicActionHandler(MigrationAction action, ChangeGroup group)
    {
        if (action == null)
        {
            throw new ArgumentNullException(&amp;quot;action&amp;quot;);
        }

        if (group == null)
        {
            throw new ArgumentNullException(&amp;quot;group&amp;quot;);
        }

        group.CreateAction(action.Action, 
            action.SourceItem, 
            action.FromPath, 
            action.Path, action.Version,
            action.MergeVersionTo,
            action.ItemTypeReferenceName, 
            action.MigrationActionDescription);
    }
}&lt;/pre&gt;

&lt;h3&gt;High Watermark&lt;/h3&gt;

&lt;p&gt;High watermarks are a very interesting feature of the platform, and they let you store a value in the database for the usage of identification of change groups. One aspect I liked of it’s construction is its use of generics, meaning you can work with the types that make the most sense, so I have Int and DateTime, and as you associate a name to it. &lt;/p&gt;

&lt;p&gt;To get the value from the database you called the &lt;em&gt;Reload &lt;/em&gt;method, to set the value and save call &lt;em&gt;Update&lt;/em&gt;.&lt;/p&gt;

&lt;pre class="brush: csharp;"&gt;highWaterMarkDelta.Reload();
highWaterMarkDelta.Update(deltaTableStartTime);&lt;/pre&gt;

&lt;h3&gt;Conflict Types&lt;/h3&gt;

&lt;p&gt;I have mentioned conflict types briefly before and I have said that my VC adapter does not have a conflict type which is not 100% true. It does have one, the &lt;em&gt;GenericConflictType&lt;/em&gt;, which is base from the platform. Below is the code snippet from the WIT adapter which does have a custom conflict type. The only difference with the VC adapter is that last line does not exist.&lt;/p&gt;

&lt;pre class="brush: csharp;"&gt;public void RegisterConflictTypes(ConflictManager conflictManager)
{
    TraceManager.TraceInformation(&amp;quot;WSSWIT:AP:RegisterConflictTypes&amp;quot;);
    this.conflictManagerService = (ConflictManager)analysisServiceContainer.GetService(typeof(ConflictManager));
    this.conflictManagerService.RegisterConflictType(new GenericConflictType());
    this.conflictManagerService.RegisterConflictType(new SharePointWITGeneralConflictType(), SyncOrchestrator.ConflictsSyncOrchOptions.Continue);
}&lt;/pre&gt;

&lt;h3&gt;GenerateDeltaTable&lt;/h3&gt;

&lt;p&gt;The next method to cover, and the second most important is &lt;em&gt;GenerateDeltaTable &lt;/em&gt;which is responsible for actually getting the values from the source system. This is done below in two steps first &lt;em&gt;GetSharePointUpdates &lt;/em&gt;and second &lt;em&gt;PromoteDeltaToPending&lt;/em&gt;.&lt;/p&gt;

&lt;pre class="brush: csharp;"&gt;void IAnalysisProvider.GenerateDeltaTable()
{
    TraceManager.TraceInformation(&amp;quot;WSSVC:AP:GenerateDeltaTable&amp;quot;);
    highWaterMarkDelta.Reload();
    TraceManager.TraceInformation(&amp;quot;\tWSSVC:AP:Initial HighWaterMark {0} &amp;quot;, highWaterMarkDelta.Value);
    deltaTableStartTime = DateTime.Now;
    TraceManager.TraceInformation(&amp;quot;\tWSSVC:AP:CutOff {0} &amp;quot;, deltaTableStartTime);
    GetSharePointUpdates();
    highWaterMarkDelta.Update(deltaTableStartTime);
    TraceManager.TraceInformation(&amp;quot;\tWSSVC:AP:Updated HighWaterMark {0} &amp;quot;, highWaterMarkDelta.Value);
    changeGroupService.PromoteDeltaToPending();
}&lt;/pre&gt;

&lt;h3&gt;GetSharePointUpdates&lt;/h3&gt;

&lt;p&gt;This is a huge method and does the heavily lifting and I will skip covering all the boring details of talking to SharePoint and focus covering what you need to do. First you need to identify what is new, this is done using the HWM and comparing the modified date. &lt;/p&gt;

&lt;pre class="brush: csharp;"&gt;// item has been modified since HWM &amp;amp; before deltra table start time
if (item.Modified.CompareTo(highWaterMarkDelta.Value) &amp;gt; 0 &amp;amp;&amp;amp; item.Modified.CompareTo(deltaTableStartTime) &amp;lt; 0) &lt;/pre&gt;

&lt;p&gt;You also need to figure out if the file is new or an update. In my VC adapter I created a special system called the &lt;em&gt;ProcessLog&lt;/em&gt;. This was to cater with a situation caused by SharePoint and won’t apply to other systems. Once you done all of that you can tell the platform about it by creating an action and saving the action. The following code is for VC:&lt;/p&gt;

&lt;pre class="brush: csharp;"&gt;TraceManager.TraceInformation(&amp;quot;\tChangeSet:{0} - {1} ({2})&amp;quot;, highWaterMarkChangeset.Value, item.Filename, item.AbsoluteURL);
string itemType = item.ItemType.ToWellKnownContentType().ReferenceName;
ChangeGroup cg = CreateChangeGroup(highWaterMarkChangeset.Value, 0);
cg.CreateAction(actionGuid, item, null, item.AbsoluteURL, item.Version, null, itemType, null);
cg.Save();
highWaterMarkChangeset.Update(highWaterMarkChangeset.Value + 1);&lt;/pre&gt;

&lt;p&gt;and this is the same logic for WIT:&lt;/p&gt;

&lt;pre class="brush: csharp;"&gt;ChangeGroup changeGroup = CreateChangeGroup(highWaterMarkChangeSet.Value, 0);
changeGroup.CreateAction(actionGuid, task, string.Empty, listName, string.Empty, string.Empty,
    WellKnownContentType.WorkItem.ReferenceName, CreateFieldRevisionDescriptionDoc(task));
changeGroup.Save();
highWaterMarkChangeSet.Update(highWaterMarkChangeSet.Value + 1);&lt;/pre&gt;

&lt;h3&gt;Revision Description Doc&lt;/h3&gt;

&lt;p&gt;While the VC adapter is fairly easy, the downloading is done in the &lt;em&gt;SharePointItem -&lt;/em&gt; the WIT adapter doesn’t download anything. What it needs is a special XML file called a revision description document. You are responsible for the generation of this document as part of the creation of the action (you may have noticed that in the sample above). &lt;/p&gt;

&lt;p&gt;This is what actually makes the field mapping possible, if you do not understand field mapping you must read &lt;a href="http://blogs.msdn.com/b/willy-peter_schaub/archive/2009/12/14/tfs-integration-platform-mapping-work-item-fields-and-values-questions-answers-12.aspx" target="_blank"&gt;Willy-Peter’s post on it&lt;/a&gt;. You can see below how I create my document, which is created per SharePoint list item and how I can support all the columns, including custom ones:&lt;/p&gt;

&lt;pre class="brush: csharp;"&gt;private static XmlDocument CreateFieldRevisionDescriptionDoc(SharePointListItem task)
{
    XElement columns = new XElement(&amp;quot;Columns&amp;quot;,
            new XElement(&amp;quot;Column&amp;quot;,
                new XAttribute(&amp;quot;DisplayName&amp;quot;, &amp;quot;Author&amp;quot;),
                new XAttribute(&amp;quot;ReferenceName&amp;quot;, &amp;quot;Author&amp;quot;),
                new XAttribute(&amp;quot;Type&amp;quot;, &amp;quot;String&amp;quot;),
                new XElement(&amp;quot;Value&amp;quot;, task.AuthorId)),
            new XElement(&amp;quot;Column&amp;quot;,
                new XAttribute(&amp;quot;DisplayName&amp;quot;, &amp;quot;DisplayName&amp;quot;),
                new XAttribute(&amp;quot;ReferenceName&amp;quot;, &amp;quot;DisplayName&amp;quot;),
                new XAttribute(&amp;quot;Type&amp;quot;, &amp;quot;String&amp;quot;),
                new XElement(&amp;quot;Value&amp;quot;, task.DisplayName)),
            new XElement(&amp;quot;Column&amp;quot;,
                new XAttribute(&amp;quot;DisplayName&amp;quot;, &amp;quot;Id&amp;quot;),
                new XAttribute(&amp;quot;ReferenceName&amp;quot;, &amp;quot;Id&amp;quot;),
                new XAttribute(&amp;quot;Type&amp;quot;, &amp;quot;String&amp;quot;),
                new XElement(&amp;quot;Value&amp;quot;, task.Id.ToString())));

    foreach (KeyValuePair&amp;lt;string, object&amp;gt; column in task.Columns)
    {
        columns.Add(new XElement(&amp;quot;Column&amp;quot;,
            new XAttribute(&amp;quot;DisplayName&amp;quot;, column.Key),
                new XAttribute(&amp;quot;ReferenceName&amp;quot;, column.Key),
                new XAttribute(&amp;quot;Type&amp;quot;, &amp;quot;String&amp;quot;),
                new XElement(&amp;quot;Value&amp;quot;, column.Value)));
    }

    XElement descriptionDoc = new XElement(&amp;quot;WorkItemChanges&amp;quot;,
        new XAttribute(&amp;quot;Revision&amp;quot;, &amp;quot;0&amp;quot;),
        new XAttribute(&amp;quot;WorkItemType&amp;quot;, &amp;quot;SharePointItem&amp;quot;),
        new XAttribute(&amp;quot;Author&amp;quot;, task.AuthorId),
        new XAttribute(&amp;quot;ChangeDate&amp;quot;, task.ModifiedOn.ToString(CultureInfo.CurrentCulture)),
        new XAttribute(&amp;quot;WorkItemID&amp;quot;, task.Id.ToString()),
        columns);

    XmlDocument doc = new XmlDocument();
    doc.LoadXml(descriptionDoc.ToString());
    return doc;
}&lt;/pre&gt;

&lt;pre&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=KgiVGIHaYu4:QF-rGob42oo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=KgiVGIHaYu4:QF-rGob42oo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=KgiVGIHaYu4:QF-rGob42oo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=KgiVGIHaYu4:QF-rGob42oo:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=KgiVGIHaYu4:QF-rGob42oo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=KgiVGIHaYu4:QF-rGob42oo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=KgiVGIHaYu4:QF-rGob42oo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=KgiVGIHaYu4:QF-rGob42oo:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=KgiVGIHaYu4:QF-rGob42oo:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=KgiVGIHaYu4:QF-rGob42oo:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=KgiVGIHaYu4:QF-rGob42oo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=KgiVGIHaYu4:QF-rGob42oo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=KgiVGIHaYu4:QF-rGob42oo:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Sadevcoza-Sharepoint/~4/KgiVGIHaYu4" height="1" width="1"/&gt;</description>
 <comments>http://www.sadev.co.za/content/how-create-adapter-tfs-integration-platform-part-vi-ianalysisprovider#comments</comments>
 <category domain="http://www.sadev.co.za/taxonomy/term/12">.NET</category>
 <category domain="http://www.sadev.co.za/category/blog/alm">ALM</category>
 <category domain="http://www.sadev.co.za/category/blog/alm-rangers">ALM Rangers</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/38">Development</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/64">SharePoint</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/31">Tools &amp; Apps</category>
 <pubDate>Wed, 02 Jun 2010 14:22:08 +0000</pubDate>
 <dc:creator>Robert MacLean</dc:creator>
 <guid isPermaLink="false">477 at http://www.sadev.co.za</guid>
<feedburner:origLink>http://www.sadev.co.za/content/how-create-adapter-tfs-integration-platform-part-vi-ianalysisprovider</feedburner:origLink></item>
<item>
 <title>How to create an adapter for the TFS Integration Platform - Part V: Items (IMigrationItem &amp; IMigrationItemSerializer)</title>
 <link>http://feedproxy.google.com/~r/Sadevcoza-Sharepoint/~3/bgdoTlucP9Y/how-create-adapter-tfs-integration-platform-part-v-items-imigrationitem-and-imigration</link>
 <description>&lt;p&gt;&lt;em&gt;&lt;font size="1"&gt;Note: This post is part of a series and you can find the rest of the parts in the &lt;a href="/content/how-create-adapter-tfs-integration-platform-series-index" target="_blank"&gt;series index&lt;/a&gt;.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;An important class in your implementation is your item implementation, which is used to identify what an item (be that file, directory, list item, bug etc…) is. This class needs to implement &lt;em&gt;IMigrationItem&lt;/em&gt;. This class is more important for VC than WIT but in both cases you need to put in all the properties you need to know about. You must also make sure that all properties are serialisable by the default XML serialiser in .NET. &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;Power Tip: &lt;/strong&gt;VC stands for Version Control. This refers to an adapter that works with the source control aspects of the system. WI, work items, and WIT, work item tracking, are the same thing. File attachments in WI are NOT regarded as VC and must be handled by your WI adapter.&lt;/p&gt; &lt;/blockquote&gt;  &lt;h3&gt;IMigrationItem &lt;/h3&gt;  &lt;h4&gt;WIT&lt;/h4&gt;  &lt;p&gt;The WIT adapter is slightly smaller than the VC one since it is just a set of properties. I do not care too much about the inherited &lt;em&gt;DisplayName property &lt;/em&gt;here either and the &lt;em&gt;Download&lt;/em&gt; method is just logging. The only interesting part is the &lt;em&gt;SimpleDictionary&amp;lt;T,V&amp;gt;&lt;/em&gt; I use. &lt;em&gt;SimpleDictionary&amp;lt;T,V&amp;gt;&lt;/em&gt; is just to store Key/Value pairs of column information from SharePoint (because you may have customised the columns in SharePoint, I cannot hard code them). The reason I use this rather the &lt;em&gt;Dictionary&amp;lt;T,V&amp;gt;&lt;/em&gt; which .NET provides, is because that class is not able to be serialised using the default XML serialiser. I will cover &lt;em&gt;SimpleDictionary&amp;lt;T,V&amp;gt;&lt;/em&gt; in a later post.&lt;/p&gt;  &lt;pre class="brush: csharp;"&gt;public class SharePointListItem : IMigrationItem
{
    public SharePointListItem()
    {
        this.Columns = new SimpleDictionary&amp;lt;string, object&amp;gt;();
    }

    public string Id { get; set; }
    public DateTime ModifiedOn { get; set; }
    public string AuthorId { get; set; }
    public SimpleDictionary&amp;lt;string, object&amp;gt; Columns { get; set; }    
    public string DisplayName { get; set; }

    public void Download(string localPath)
    {
        TraceManager.TraceInformation(&amp;quot;WSSWIT:MI:Download - {0}&amp;quot;, localPath);
    }
}&lt;/pre&gt;

&lt;h4&gt;VC&lt;/h4&gt;

&lt;p&gt;The VC adapter is a little more complex with more properties but the key difference is the &lt;em&gt;DisplayName &lt;/em&gt;property, which I return the filename. Even more important though it the &lt;em&gt;Download&lt;/em&gt; method which is used to get the actual file or folder to a specific location, provided by the &lt;em&gt;localpath &lt;/em&gt;parameter, on disk for the platform to use. &lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;Power Tip: &lt;/strong&gt;When you are downloading files in the IMigrationItem, you are responsible for the creation of the path too. So make sure you are creating directories and also checking what directories exist too.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;pre class="brush: csharp;"&gt;string IMigrationItem.DisplayName
{
    get { return Filename; }
}

void IMigrationItem.Download(string localPath)
{
    TraceManager.TraceInformation(&amp;quot;WSSVC:Item:Download:From {0} to {1}&amp;quot;, this.AbsoluteURL, localPath);
    if (this.ItemType == SharePointItemType.File)
    {
        TraceManager.TraceInformation(&amp;quot;\tType is file&amp;quot;);
        string targetDir = Path.GetDirectoryName(localPath);
        if (!Directory.Exists(targetDir))
        {
            TraceManager.TraceInformation(&amp;quot;\tCreating Directory for file - {0}&amp;quot;, targetDir);
            Directory.CreateDirectory(targetDir);
        }

        HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(this.AbsoluteURL);
        webRequest.Credentials = this.Credentials;
        using (Stream responseStream = webRequest.GetResponse().GetResponseStream())
        {
            using (FileStream fileStream = new FileStream(localPath, FileMode.CreateNew, FileAccess.ReadWrite))
            {
                byte[] buffer = new byte[1024];
                int bytesRead;
                do
                {
                    // Read data (up to 1k) from the stream
                    bytesRead = responseStream.Read(buffer, 0, buffer.Length);

                    // Write the data to the local file
                    fileStream.Write(buffer, 0, bytesRead);
                } while (bytesRead &amp;gt; 0);
            }
        }

        TraceManager.TraceInformation(&amp;quot;\tFile downloaded successfully&amp;quot;);
    }

    if (this.ItemType == SharePointItemType.Directory)
    {
        TraceManager.TraceInformation(&amp;quot;\tType is directory&amp;quot;);
        if (!Directory.Exists(localPath))
        {
            TraceManager.TraceInformation(&amp;quot;\tCreating Directory - {0}&amp;quot;, localPath);
            Directory.CreateDirectory(localPath);
        }
    }
}&lt;/pre&gt;

&lt;h3&gt;IMigrationItemSerializer&lt;/h3&gt;

&lt;p&gt;The migration item serializer is just a way to get your item to XML using .NET serialisation. My implementation of this is the exact same for both VC and WIT.&lt;/p&gt;

&lt;pre class="brush: csharp;"&gt;public class SharePointWITMigrationItemSerializer : IMigrationItemSerializer
{
    public IMigrationItem LoadItem(string itemBlob, ChangeGroupManager manager)
    {
        TraceManager.TraceInformation(&amp;quot;WSSWIT:S:LoadItem&amp;quot;);
        if (manager == null)
        {
            throw new ArgumentNullException(&amp;quot;manager&amp;quot;);
        }

        if (string.IsNullOrEmpty(itemBlob))
        {
            throw new ArgumentNullException(&amp;quot;itemBlob&amp;quot;);
        }

        XmlSerializer serializer = new XmlSerializer(typeof(SharePointListItem));

        using (StringReader itemBlobStringReader = new StringReader(itemBlob))
        {
            using (XmlReader itemBlobXmlReader = XmlReader.Create(itemBlobStringReader))
            {
                return (SharePointListItem)serializer.Deserialize(itemBlobXmlReader);
            }
        }
    }

    public string SerializeItem(IMigrationItem item)
    {
        if (item == null)
        {
            throw new ArgumentNullException(&amp;quot;item&amp;quot;);
        }

        TraceManager.TraceInformation(&amp;quot;WSSWIT:S:SerializeItem - {0}&amp;quot;, item.DisplayName);

        XmlSerializer sharePointTaskSerializer = new XmlSerializer(item.GetType());

        using (MemoryStream memoryStream = new MemoryStream())
        {
            sharePointTaskSerializer.Serialize(memoryStream, item);
            memoryStream.Seek(0, SeekOrigin.Begin);
            using (StreamReader streamReader = new StreamReader(memoryStream))
            {
                return streamReader.ReadToEnd();
            }
        }
    }
}&lt;/pre&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=bgdoTlucP9Y:0feMiyIdnTc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=bgdoTlucP9Y:0feMiyIdnTc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=bgdoTlucP9Y:0feMiyIdnTc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=bgdoTlucP9Y:0feMiyIdnTc:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=bgdoTlucP9Y:0feMiyIdnTc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=bgdoTlucP9Y:0feMiyIdnTc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=bgdoTlucP9Y:0feMiyIdnTc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=bgdoTlucP9Y:0feMiyIdnTc:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=bgdoTlucP9Y:0feMiyIdnTc:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=bgdoTlucP9Y:0feMiyIdnTc:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=bgdoTlucP9Y:0feMiyIdnTc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=bgdoTlucP9Y:0feMiyIdnTc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=bgdoTlucP9Y:0feMiyIdnTc:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Sadevcoza-Sharepoint/~4/bgdoTlucP9Y" height="1" width="1"/&gt;</description>
 <comments>http://www.sadev.co.za/content/how-create-adapter-tfs-integration-platform-part-v-items-imigrationitem-and-imigration#comments</comments>
 <category domain="http://www.sadev.co.za/taxonomy/term/12">.NET</category>
 <category domain="http://www.sadev.co.za/category/blog/alm">ALM</category>
 <category domain="http://www.sadev.co.za/category/blog/alm-rangers">ALM Rangers</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/38">Development</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/64">SharePoint</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/31">Tools &amp; Apps</category>
 <pubDate>Tue, 01 Jun 2010 07:23:51 +0000</pubDate>
 <dc:creator>Robert MacLean</dc:creator>
 <guid isPermaLink="false">476 at http://www.sadev.co.za</guid>
<feedburner:origLink>http://www.sadev.co.za/content/how-create-adapter-tfs-integration-platform-part-v-items-imigrationitem-and-imigration</feedburner:origLink></item>
<item>
 <title>How to create an adapter for the TFS Integration Platform - Part IV: IProvider</title>
 <link>http://feedproxy.google.com/~r/Sadevcoza-Sharepoint/~3/Tos4Q4KyA7Y/how-create-adapter-tfs-integration-platform-part-iv-iprovider</link>
 <description>&lt;p&gt;&lt;em&gt;&lt;font size="1"&gt;Note: This post is part of a series and you can find the rest of the parts in the &lt;a href="/content/how-create-adapter-tfs-integration-platform-series-index" target="_blank"&gt;series index&lt;/a&gt;.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;IProvider&lt;/em&gt; is the first class we will look at implementing for both adapters (WI and VC) as it provides the core information for the platform to talk to our adapter. The first thing you provider needs is the &lt;em&gt;ProviderDescriptionAttribute&lt;/em&gt;, which has three properties ID, Name and Version.&lt;/p&gt;  &lt;pre class="brush: csharp;"&gt;[ProviderDescription(&amp;quot;{7F3F91B2-758A-4B3C-BBA8-CE34AE1D48EE}&amp;quot;, &amp;quot;SharePoint TIP Adapter - Version Control&amp;quot;, &amp;quot;1.0.0.0&amp;quot;)]&lt;/pre&gt;
The ID must be unique and you will need a record of it somewhere as it is used in configuration for the platform. The name and version are potentially used to make it easier for users, but I have not seen them used anywhere (maybe in future/different tools). 

&lt;p&gt;The only&amp;#160; method in the provider is the &lt;em&gt;GetService &lt;/em&gt;method which is used to get the implementations of the interfaces/classes we will be building later. Put another way this allows the platform to request a class which implements a specific interface using this method:&lt;/p&gt;

&lt;pre class="brush: csharp;"&gt;object IServiceProvider.GetService(Type serviceType)
{
    TraceManager.TraceInformation(&amp;quot;WSSVC:Adapter:GetService - {0}&amp;quot;, serviceType);

    if (serviceType == typeof(IAnalysisProvider))
    {
        if (analysisProvider == null)
        {
            analysisProvider = new SharePointVCAnalysisProvider();
        }
        return analysisProvider;
    }
    
    if (serviceType == typeof(IMigrationProvider))
    {
        if (migrationProvider == null)
        {
            migrationProvider = new SharePointVCMigrationProvider();
        }
        return migrationProvider;
    }

    if (serviceType == typeof(IServerPathTranslationService))
    {
        if (transalationProvider == null)
        {
            transalationProvider = new SharePointVCAdapterTranslation();
        }
        return transalationProvider;
    }        

    return null;
}&lt;/pre&gt;

&lt;p&gt;Above is the implementation is what I used in the SharePoint VC adapter, the WI adapter is the same except it does not have the server path translation service at the end. &lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;Power Tip: &lt;/strong&gt;Using Visual Studio 2010’s new &lt;a href="http://blogs.msdn.com/b/zainnab/archive/2010/04/15/the-best-of-visual-studio-2010-using-generate-from-usage.aspx" target="_blank"&gt;“Generation from usage”&lt;/a&gt; features makes this stage of development much easier.&amp;#160; &lt;/p&gt;&lt;/blockquote&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=Tos4Q4KyA7Y:xrTtZlhx2aI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=Tos4Q4KyA7Y:xrTtZlhx2aI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=Tos4Q4KyA7Y:xrTtZlhx2aI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=Tos4Q4KyA7Y:xrTtZlhx2aI:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=Tos4Q4KyA7Y:xrTtZlhx2aI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=Tos4Q4KyA7Y:xrTtZlhx2aI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=Tos4Q4KyA7Y:xrTtZlhx2aI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=Tos4Q4KyA7Y:xrTtZlhx2aI:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=Tos4Q4KyA7Y:xrTtZlhx2aI:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=Tos4Q4KyA7Y:xrTtZlhx2aI:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=Tos4Q4KyA7Y:xrTtZlhx2aI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=Tos4Q4KyA7Y:xrTtZlhx2aI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=Tos4Q4KyA7Y:xrTtZlhx2aI:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Sadevcoza-Sharepoint/~4/Tos4Q4KyA7Y" height="1" width="1"/&gt;</description>
 <comments>http://www.sadev.co.za/content/how-create-adapter-tfs-integration-platform-part-iv-iprovider#comments</comments>
 <category domain="http://www.sadev.co.za/taxonomy/term/12">.NET</category>
 <category domain="http://www.sadev.co.za/category/blog/alm">ALM</category>
 <category domain="http://www.sadev.co.za/category/blog/alm-rangers">ALM Rangers</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/38">Development</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/64">SharePoint</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/31">Tools &amp; Apps</category>
 <pubDate>Mon, 31 May 2010 07:10:13 +0000</pubDate>
 <dc:creator>Robert MacLean</dc:creator>
 <guid isPermaLink="false">474 at http://www.sadev.co.za</guid>
<feedburner:origLink>http://www.sadev.co.za/content/how-create-adapter-tfs-integration-platform-part-iv-iprovider</feedburner:origLink></item>
<item>
 <title>How to create an adapter for the TFS Integration Platform - Part III: Overview of adapters</title>
 <link>http://feedproxy.google.com/~r/Sadevcoza-Sharepoint/~3/BT9NC8AsyqQ/how-create-adapter-tfs-integration-platform-part-iii-overview-adapters</link>
 <description>&lt;p&gt;&lt;em&gt;&lt;font size="1"&gt;Note: This post is part of a series and you can find the rest of the parts in the &lt;a href="/content/how-create-adapter-tfs-integration-platform-series-index" target="_blank"&gt;series index&lt;/a&gt;.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;The &lt;a href="http://tfsintegration.codeplex.com/" target="_blank"&gt;TFS Integration Platform&lt;/a&gt; has two types of adapters, a WI (for work items, tasks,&amp;#160; bugs etc…) and a VC (version control) adapter and they are nothing more than a .NET assembly made up of a number of classes which, mostly, you will inherit from interfaces in the Toolkit project. For both adapters the key interfaces you need to implement are:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;em&gt;IProvider&lt;/em&gt;: Gives the platform the way to invoke your adapter. &lt;/li&gt;    &lt;li&gt;&lt;em&gt;IMigrationProvider&lt;/em&gt;: This is used for writing to the adapters source system, so for me SharePoint. &lt;/li&gt;    &lt;li&gt;&lt;em&gt;IMigrationItemSerializer&lt;/em&gt;: This provides support for converting the item to XML. &lt;/li&gt;    &lt;li&gt;&lt;em&gt;IAnalysisProvider&lt;/em&gt;: This is used for reading from the adapters source system. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;as well as they both need to implement the &lt;em&gt;ChangeActionHandlers &lt;/em&gt;abstract class.&lt;/p&gt;  &lt;p&gt;The VC adapter also needs:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;em&gt;IServerPathTranslationService&lt;/em&gt;: Used to translate the path (i.e. directories and such) from other adapters to this adapter and visa versa. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.sadev.co.za/files/image_2_24.png" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.sadev.co.za/files/image_thumb_40.png" width="717" height="270" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;While the WIT adapter needs:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;em&gt;IConflictHandler&lt;/em&gt;: Provides support for handling conflicts during the migration. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.sadev.co.za/files/image_4_12.png" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.sadev.co.za/files/image_thumb_1_11.png" width="499" height="337" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;So in both adapters you will need a minimum of 6 classes you will implement, excluding any extra ones you will need for your specific requirements.&lt;/p&gt;  &lt;p&gt;The core concepts of the adapters are all explained in the interfaces and so it appears that it is very simple to implement, and indeed it is – however there are some weird things which may catch you up which we will cover in detail in future posts.&lt;/p&gt;  &lt;h3&gt;TraceManager&lt;/h3&gt;  &lt;p&gt;Something very nice in the platform is the &lt;em&gt;TraceManager&lt;/em&gt; class which is really just a wrapper around &lt;em&gt;System.Diagnostics.Trace&lt;/em&gt; but it has some extras in that wrapper, such as being what is included in the console windows and log files. You will see this sprinkled through out my code because it is useful to to have when trying to debug later on. &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;Power Tip: &lt;/strong&gt;The &lt;em&gt;TraceManager&lt;/em&gt; puts all information written to it in the log files, so please make sure you do not put any sensitive information in there.&lt;/p&gt;&lt;/blockquote&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=BT9NC8AsyqQ:Es1mXC8GblY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=BT9NC8AsyqQ:Es1mXC8GblY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=BT9NC8AsyqQ:Es1mXC8GblY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=BT9NC8AsyqQ:Es1mXC8GblY:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=BT9NC8AsyqQ:Es1mXC8GblY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=BT9NC8AsyqQ:Es1mXC8GblY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=BT9NC8AsyqQ:Es1mXC8GblY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=BT9NC8AsyqQ:Es1mXC8GblY:KwTdNBX3Jqk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=BT9NC8AsyqQ:Es1mXC8GblY:KwTdNBX3Jqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=BT9NC8AsyqQ:Es1mXC8GblY:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=BT9NC8AsyqQ:Es1mXC8GblY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?i=BT9NC8AsyqQ:Es1mXC8GblY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?a=BT9NC8AsyqQ:Es1mXC8GblY:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Sadevcoza-Sharepoint?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Sadevcoza-Sharepoint/~4/BT9NC8AsyqQ" height="1" width="1"/&gt;</description>
 <comments>http://www.sadev.co.za/content/how-create-adapter-tfs-integration-platform-part-iii-overview-adapters#comments</comments>
 <category domain="http://www.sadev.co.za/taxonomy/term/12">.NET</category>
 <category domain="http://www.sadev.co.za/category/blog/alm">ALM</category>
 <category domain="http://www.sadev.co.za/category/blog/alm-rangers">ALM Rangers</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/38">Development</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/64">SharePoint</category>
 <category domain="http://www.sadev.co.za/taxonomy/term/31">Tools &amp; Apps</category>
 <pubDate>Fri, 28 May 2010 08:42:16 +0000</pubDate>
 <dc:creator>Robert MacLean</dc:creator>
 <guid isPermaLink="false">473 at http://www.sadev.co.za</guid>
<feedburner:origLink>http://www.sadev.co.za/content/how-create-adapter-tfs-integration-platform-part-iii-overview-adapters</feedburner:origLink></item>
</channel>
</rss>

