<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2485944830160065050</id><updated>2012-01-30T09:33:05.392+01:00</updated><category term='PeopleEditor'/><category term='Fail'/><category term='jQuery'/><category term='WCF'/><category term='KnockoutJS'/><category term='HowTo'/><category term='Managed Metadata'/><category term='Generic'/><category term='SharePoint'/><category term='RIA Services'/><category term='Newsgator'/><category term='Misc'/><category term='SharePoint 2010'/><category term='ideas'/><category term='Silverlight'/><category term='ASC2011'/><title type='text'>var me = new Generic&lt;Misc&gt;();</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ogarshol.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2485944830160065050/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://ogarshol.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Øystein Garshol</name><uri>http://www.blogger.com/profile/12841414895483895925</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_Crymsa-IOEo/SsT8Md6_jaI/AAAAAAAAAAM/ScNLuzNqUvA/S220/OYSTEIN_GARSHOL.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>18</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2485944830160065050.post-6212751433288781676</id><published>2011-11-25T09:56:00.000+01:00</published><updated>2011-11-25T10:08:46.620+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='KnockoutJS'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>Beyond Silverlight</title><content type='html'>1.5 years has passed since I wrote a couple of blog posts about&amp;nbsp; &lt;a href="http://ogarshol.blogspot.com/2010/05/wcf-ria-services-10-for-sharepoint-2010.html"&gt;WCF RIA Services 1.0 for SharePoint 2010 Part I&lt;/a&gt; and &lt;a href="http://ogarshol.blogspot.com/2010/05/wcf-ria-services-10-for-sharepoint-2010_25.html"&gt;WCF RIA Services 1.0 for SharePoint 2010 Part II&lt;/a&gt; which I found was a fairly effective way of creating Silverlight applications for the SharePoint platform. Most of the hits I get on this blog are still these posts (not that I have written that many others though). There are certainly many compelling features to Silverlight applications but there is no doubt in my mind that the target for these applications are limited and many complementary technologies and API’s have appeared which reduces the pain in creating good looking responsive web applications. &lt;br /&gt;&lt;br /&gt;In the past few weeks I’ve had the pleasure of implementing &lt;a href="http://www.newsgator.com/products/social-sites-for-sharepoint-2010.aspx"&gt;Newsgator Social Sites for SharePoint 2010&lt;/a&gt; for &lt;a href="http://ogarshol.blogspot.com/2011/11/presenting-social-collaboration-in.html"&gt;DNB&lt;/a&gt; which leverages &lt;a href="http://api.jquery.com/"&gt;jQuery&lt;/a&gt; amongst others in a good way to create responsive applications. Although it works great out of the box I sometimes felt I really had to go through a lot of javascript to get the idea of how some of the callbacks are implemented when I customized some of their functionality. I certainly missed some of the cleanliness in developing with the &lt;a href="http://en.wikipedia.org/wiki/Model_View_ViewModel"&gt;MVVM&lt;/a&gt; pattern that’s possible in Silverlight which inspired me to probe a few things.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;At this Norwegian Developers Conference &lt;a href="http://blah.winsmarts.com/"&gt;Sahil Malik&lt;/a&gt; presented &lt;a href="http://ndc2011.macsimum.no/mp4/Day3%20Friday/Track6%201620-1720.mp4" title="http://blah.winsmarts.com/2011-5-Using_MVVM_with_Office365_and_SharePoint_2010_REST_API.aspx"&gt;Javascript Maxout with SharePoint 2010&lt;/a&gt;&amp;nbsp; and introduced &lt;a href="http://knockoutjs.com/"&gt;KnockoutJS&lt;/a&gt; which he also blogged about in great detail in &lt;a href="http://blah.winsmarts.com/2011-5-Using_MVVM_with_Office365_and_SharePoint_2010_REST_API.aspx"&gt;Using MVVM with Office365 and SharePoint 2010 REST API&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Sahils approach works excellent if you are restricted to environments where you can’t deploy any binaries. However if you are able to deploy binaries you’re probably better of with picking other options. Since the release of SharePoint 2010 I've personally been very skeptical on building applications using only the SharePoint Client OM and even more skeptical on using the Javascript edition of the same or accessing the ListData.svc for building applications for one reason: You can’t run proper unit tests!&lt;br /&gt;&lt;br /&gt;I don’t think it’s a good idea to put business logic in client code, nor do I like the idea of also having both data access logic and business logic mashed up in client code you can’t test.&lt;br /&gt;Anyhow, enough background info.&lt;br /&gt;&lt;h4&gt;Goal&lt;/h4&gt;I wanted to see if I could use the best of both worlds. Creating proper strongly typed data access and business logic while using html for presentation and KnockoutJS/jQuery for binding data to the presentation layer (herby called views) and hosting it all in SharePoint (hey, would you choose any other platform?)&lt;br /&gt;Some important factors&lt;br /&gt;&lt;ul&gt;&lt;li&gt;No business logic in code you can’t unit test&lt;/li&gt;&lt;li&gt;No references in views to anything but html and bindings&amp;nbsp;(great when you get well prepared HTML from a web designer)&lt;/li&gt;&lt;li&gt;A responsive client with as little as possible going over the wire&lt;/li&gt;&lt;li&gt;Reusable views&lt;/li&gt;&lt;li&gt;Finding a good way of organizing files in Visual Studio&lt;/li&gt;&lt;/ul&gt;Here's what i did in my prototype.&lt;br /&gt;&lt;h4&gt;Implementing Business Logic&lt;/h4&gt;You have to create and deploy a WCF service endpoint to the ISAPI folder in the SharePoint Hive. &lt;a href="http://cksdev.codeplex.com/"&gt;CKSDev&lt;/a&gt; has some nice templates for how to do that or you can stuff your svc file in a module and tweak the hidden SharePointProjectItem.spdata file to do it. The svc file itself is simple enough:&lt;br /&gt;&lt;div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:b11d5305-9c25-4b07-b966-28137fdf852a" style="display: inline; float: none; margin: 0px; padding: 0px;"&gt;&lt;div style="border: 1px solid rgb(0, 0, 128); color: black; font-family: &amp;quot;Courier New&amp;quot;, Courier, Monospace; font-size: 10pt;"&gt;&lt;div style="background: rgb(221, 221, 221); max-height: 300px; overflow: auto;"&gt;&lt;ol style="background: rgb(255, 255, 255); margin: 0px 0px 0px 2em; padding: 0px 0px 0px 5px;"&gt;&lt;li&gt;&lt;span style="background-attachment: initial; background-clip: initial; background-color: yellow; background-image: initial; background-origin: initial;"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color: blue;"&gt;@&lt;/span&gt; &lt;span style="color: maroon;"&gt;ServiceHost&lt;/span&gt; &lt;span style="color: red;"&gt;Language&lt;/span&gt;&lt;span style="color: blue;"&gt;="C#"&lt;/span&gt; &lt;span style="color: red;"&gt;Debug&lt;/span&gt;&lt;span style="color: blue;"&gt;="true"&lt;/span&gt;&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: red;"&gt;Service&lt;/span&gt;&lt;span style="color: blue;"&gt;="MVVM.MyCustomService, $SharePoint.Project.AssemblyFullName$"&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: red;"&gt;Factory&lt;/span&gt;&lt;span style="color: blue;"&gt;="Microsoft.SharePoint.Client.Services.MultipleBaseAddressWebServiceHostFactory, &lt;/span&gt;&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;Microsoft.SharePoint.Client.ServerRuntime, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"&lt;/span&gt; &lt;span style="background-attachment: initial; background-clip: initial; background-color: yellow; background-image: initial; background-origin: initial;"&gt;%&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;I then defined an interface which ended up like this&lt;br /&gt;&lt;div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:e7f21f6b-705c-4588-aa4f-e0e2eb5b885c" style="display: inline; float: none; margin: 0px; padding: 0px;"&gt;&lt;div style="border: 1px solid rgb(0, 0, 128); color: black; font-family: &amp;quot;Courier New&amp;quot;, Courier, Monospace; font-size: 10pt;"&gt;&lt;div style="background: rgb(221, 221, 221); max-height: 500px; overflow: auto;"&gt;&lt;ol style="background: rgb(255, 255, 255); margin: 0px 0px 0px 2.5em; padding: 0px 0px 0px 5px;"&gt;&lt;li&gt;[&lt;span style="color: darkblue;"&gt;ServiceContract&lt;/span&gt;(&lt;span style="color: purple;"&gt;Namespace&lt;/span&gt; = &lt;span style="color: #a31515;"&gt;"http://pzl.com/CustomService"&lt;/span&gt;)]&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;interface&lt;/span&gt; &lt;span style="color: darkblue;"&gt;IMyCustomService&lt;/span&gt;&lt;/li&gt;&lt;li&gt;{&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;span style="color: darkblue;"&gt;WebInvoke&lt;/span&gt;(&lt;span style="color: purple;"&gt;Method&lt;/span&gt; = &lt;span style="color: #a31515;"&gt;"GET"&lt;/span&gt;, &lt;span style="color: purple;"&gt;UriTemplate&lt;/span&gt; = &lt;span style="color: #a31515;"&gt;"/Activities/"&lt;/span&gt;, &lt;span style="color: purple;"&gt;RequestFormat&lt;/span&gt; = &lt;span style="color: darkblue;"&gt;WebMessageFormat&lt;/span&gt;.&lt;span style="color: purple;"&gt;Json&lt;/span&gt;,&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: purple;"&gt;ResponseFormat&lt;/span&gt; = &lt;span style="color: darkblue;"&gt;WebMessageFormat&lt;/span&gt;.&lt;span style="color: purple;"&gt;Json&lt;/span&gt;), &lt;span style="color: darkblue;"&gt;OperationContract&lt;/span&gt;]&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: darkblue;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: darkblue;"&gt;Activity&lt;/span&gt;&amp;gt; &lt;span style="color: darkcyan;"&gt;GetActivities&lt;/span&gt;();&lt;/li&gt;&lt;li&gt;&amp;nbsp;&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;span style="color: darkblue;"&gt;WebInvoke&lt;/span&gt;(&lt;span style="color: purple;"&gt;Method&lt;/span&gt; = &lt;span style="color: #a31515;"&gt;"GET"&lt;/span&gt;, &lt;span style="color: purple;"&gt;UriTemplate&lt;/span&gt; = &lt;span style="color: #a31515;"&gt;"/Milestones/"&lt;/span&gt;, &lt;span style="color: purple;"&gt;RequestFormat&lt;/span&gt; = &lt;span style="color: darkblue;"&gt;WebMessageFormat&lt;/span&gt;.&lt;span style="color: purple;"&gt;Json&lt;/span&gt;,&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: purple;"&gt;ResponseFormat&lt;/span&gt; = &lt;span style="color: darkblue;"&gt;WebMessageFormat&lt;/span&gt;.&lt;span style="color: purple;"&gt;Json&lt;/span&gt;), &lt;span style="color: darkblue;"&gt;OperationContract&lt;/span&gt;]&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: darkblue;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: darkblue;"&gt;Milestone&lt;/span&gt;&amp;gt; &lt;span style="color: darkcyan;"&gt;GetMileStones&lt;/span&gt;();&lt;/li&gt;&lt;li&gt;&amp;nbsp;&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;span style="color: darkblue;"&gt;WebInvoke&lt;/span&gt;(&lt;span style="color: purple;"&gt;Method&lt;/span&gt; = &lt;span style="color: #a31515;"&gt;"DELETE"&lt;/span&gt;, &lt;span style="color: purple;"&gt;UriTemplate&lt;/span&gt; = &lt;span style="color: #a31515;"&gt;"/Activities/Delete/{id}"&lt;/span&gt;, &lt;span style="color: purple;"&gt;RequestFormat&lt;/span&gt; = &lt;span style="color: darkblue;"&gt;WebMessageFormat&lt;/span&gt;.&lt;span style="color: purple;"&gt;Json&lt;/span&gt;,&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: purple;"&gt;ResponseFormat&lt;/span&gt; = &lt;span style="color: darkblue;"&gt;WebMessageFormat&lt;/span&gt;.&lt;span style="color: purple;"&gt;Json&lt;/span&gt;), &lt;span style="color: darkblue;"&gt;OperationContract&lt;/span&gt;]&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt; &lt;span style="color: darkcyan;"&gt;DeleteActivity&lt;/span&gt;(&lt;span style="color: blue;"&gt;string&lt;/span&gt; id);&lt;/li&gt;&lt;li&gt;&amp;nbsp;&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;span style="color: darkblue;"&gt;WebInvoke&lt;/span&gt;(&lt;span style="color: purple;"&gt;Method&lt;/span&gt; =&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"POST"&lt;/span&gt;, &lt;span style="color: purple;"&gt;UriTemplate&lt;/span&gt; = &lt;span style="color: #a31515;"&gt;"/Activities/Save"&lt;/span&gt;, &lt;span style="color: purple;"&gt;RequestFormat&lt;/span&gt; = &lt;span style="color: darkblue;"&gt;WebMessageFormat&lt;/span&gt;.&lt;span style="color: purple;"&gt;Json&lt;/span&gt;,&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: purple;"&gt;ResponseFormat&lt;/span&gt; = &lt;span style="color: darkblue;"&gt;WebMessageFormat&lt;/span&gt;.&lt;span style="color: purple;"&gt;Json&lt;/span&gt;), &lt;span style="color: darkblue;"&gt;OperationContract&lt;/span&gt;]&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: darkblue;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: darkblue;"&gt;Activity&lt;/span&gt;&amp;gt; &lt;span style="color: darkcyan;"&gt;SaveActivities&lt;/span&gt;(&lt;span style="color: darkblue;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: darkblue;"&gt;Activity&lt;/span&gt;&amp;gt; activities);&lt;/li&gt;&lt;li&gt;}&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;em&gt;Note:&amp;nbsp; The WebInvoke attribute indicates your service is a REST endpoint and Setting Request/Responseformat to Json reduces the amount of traffic over the wire significantly.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;The service implementation is then only a matter of implementation and some annotation. It’s the service implementation class that will implement all your business logic and that’s a class you can create unit tests for. I’ll include all the sourcecode at the end of this post so I won’t bother with details of the implementation (it’s only mocking data anyway for sake of simplicity)&lt;br /&gt;&lt;div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:528e34f1-f7cf-44af-8baf-c6b89f8514ea" style="display: inline; float: none; margin: 0px; padding: 0px;"&gt;&lt;div style="border: 1px solid rgb(0, 0, 128); color: black; font-family: &amp;quot;Courier New&amp;quot;, Courier, Monospace; font-size: 10pt;"&gt;&lt;div style="background: rgb(221, 221, 221); max-height: 300px; overflow: auto;"&gt;&lt;ol style="background: rgb(255, 255, 255); margin: 0px 0px 0px 2em; padding: 0px 0px 0px 5px;"&gt;&lt;li&gt; [&lt;span style="color: darkblue;"&gt;ClientRequestServiceBehavior&lt;/span&gt;,&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: darkblue;"&gt;AspNetCompatibilityRequirements&lt;/span&gt;(&lt;span style="color: purple;"&gt;RequirementsMode&lt;/span&gt; = &lt;span style="color: darkblue;"&gt;AspNetCompatibilityRequirementsMode&lt;/span&gt;.&lt;span style="color: purple;"&gt;Required&lt;/span&gt;),&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: darkblue;"&gt;BasicHttpBindingServiceMetadataExchangeEndpoint&lt;/span&gt;]&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: darkblue;"&gt;MyCustomService&lt;/span&gt; :&amp;nbsp;&amp;nbsp;&lt;span style="color: darkblue;"&gt;IMyCustomService&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;h4&gt;The ViewModel&lt;/h4&gt;The viewmodel is what’s responsible for retrieving and updating your client side Models and sending data back to the server when required. In my ViewModel I defined my own Acivity Model that extends the one from the server with an idditional property. You may want to do that regardless, just to have one place to do data mapping if you choose to rector properties returned from the WCF endpoint.&lt;br /&gt;&lt;div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:f83a1471-7a86-4635-9dc9-b9ba72b31d77" style="display: inline; float: none; margin: 0px; padding: 0px;"&gt;&lt;div style="border: 1px solid rgb(0, 0, 128); color: black; font-family: &amp;quot;Courier New&amp;quot;, Courier, Monospace; font-size: 10pt;"&gt;&lt;div style="background: rgb(221, 221, 221); max-height: 500px; overflow: auto;"&gt;&lt;ol style="background: rgb(255, 255, 255); margin: 0px 0px 0px 2.5em; padding: 0px 0px 0px 5px;"&gt;&lt;li&gt;$(&lt;span style="color: blue;"&gt;function&lt;/span&gt; () {&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;InitForm();&lt;/li&gt;&lt;li&gt;});&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&lt;span style="color: blue;"&gt;function&lt;/span&gt; InitForm() {&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ko.applyBindings(&lt;span style="color: blue;"&gt;new&lt;/span&gt; ActivityListViewModel());&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;}&lt;/li&gt;&lt;li&gt;&lt;span style="color: blue;"&gt;function&lt;/span&gt; Activity(id, title, ownerViewModel) {&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;this&lt;/span&gt;.Id = ko.observable(id);&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;this&lt;/span&gt;.Title = ko.observable(title);&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;this&lt;/span&gt;.IsNew = ko.dependentObservable(&lt;span style="color: blue;"&gt;function&lt;/span&gt; () {&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt; id == &lt;span style="color: blue;"&gt;null&lt;/span&gt;;&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;this&lt;/span&gt;.Save = &lt;span style="color: blue;"&gt;function&lt;/span&gt; () {&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ownerViewModel.Save();&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;this&lt;/span&gt;.Delete = &lt;span style="color: blue;"&gt;function&lt;/span&gt; () {&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ownerViewModel.Delete(&lt;span style="color: blue;"&gt;this&lt;/span&gt;);&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li&gt;}&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;&lt;span style="color: blue;"&gt;function&lt;/span&gt; ActivityListViewModel() {&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;this&lt;/span&gt;.Milestones = ko.observableArray([]);&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;this&lt;/span&gt;.Activities = ko.observableArray([]);&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;this&lt;/span&gt;.NewActivityText = ko.observable();&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;this&lt;/span&gt;.TemplateToUse = &lt;span style="color: blue;"&gt;function&lt;/span&gt; (activity) {&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;var&lt;/span&gt; template = activity.IsNew() ? &lt;span style="color: maroon;"&gt;"ActivityRowEdit"&lt;/span&gt; : &lt;span style="color: maroon;"&gt;"ActivityRowDisplay"&lt;/span&gt;;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt; template;&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;this&lt;/span&gt;.AddActivity = &lt;span style="color: blue;"&gt;function&lt;/span&gt; () {&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;this&lt;/span&gt;.Activities.push(&lt;span style="color: blue;"&gt;new&lt;/span&gt; Activity(&lt;span style="color: blue;"&gt;null&lt;/span&gt;, &lt;span style="color: blue;"&gt;this&lt;/span&gt;.NewActivityText(), &lt;span style="color: blue;"&gt;this&lt;/span&gt;));&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;this&lt;/span&gt;.NewActivityText(&lt;span style="color: maroon;"&gt;""&lt;/span&gt;);&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li&gt;&amp;nbsp;&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: darkgreen;"&gt;// Load initial state from server&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;var&lt;/span&gt; self = &lt;span style="color: blue;"&gt;this&lt;/span&gt;;&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$.get(&lt;span style="color: maroon;"&gt;"_vti_bin/MVVM/MyCustomService.svc/Activities/"&lt;/span&gt;, &lt;span style="color: blue;"&gt;function&lt;/span&gt; (data) {&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.MapResults(data);&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;/li&gt;&lt;li&gt;&amp;nbsp;&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$.get(&lt;span style="color: maroon;"&gt;"_vti_bin/MVVM/MyCustomService.svc/Milestones/"&lt;/span&gt;, &lt;span style="color: blue;"&gt;function&lt;/span&gt; (data) {&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.Milestones(data);&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;/li&gt;&lt;li&gt;&amp;nbsp;&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;this&lt;/span&gt;.MapResults = &lt;span style="color: blue;"&gt;function&lt;/span&gt; (data) {&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;var&lt;/span&gt; mappedActivities = $.map(data, &lt;span style="color: blue;"&gt;function&lt;/span&gt; (item) {&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;new&lt;/span&gt; Activity(item.Id, item.Title, self)&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.Activities(mappedActivities);&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;this&lt;/span&gt;.Save = &lt;span style="color: blue;"&gt;function&lt;/span&gt; () {&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$.ajax(&lt;span style="color: maroon;"&gt;"_vti_bin/MVVM/MyCustomService.svc/Activities/Save"&lt;/span&gt;, {&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;data: ko.toJSON(&lt;span style="color: blue;"&gt;this&lt;/span&gt;.Activities),&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;type: &lt;span style="color: maroon;"&gt;"post"&lt;/span&gt;,&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;contentType: &lt;span style="color: maroon;"&gt;"application/json"&lt;/span&gt;,&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;success: &lt;span style="color: blue;"&gt;function&lt;/span&gt; (data) {&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.MapResults(data);&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li&gt;&amp;nbsp;&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;this&lt;/span&gt;.Delete = &lt;span style="color: blue;"&gt;function&lt;/span&gt; (activity) {&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$.ajax(&lt;span style="color: maroon;"&gt;"_vti_bin/MVVM/MyCustomService.svc/Activities/Delete/"&lt;/span&gt; + activity.Id(), {&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;type: &lt;span style="color: maroon;"&gt;"delete"&lt;/span&gt;,&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;contentType: &lt;span style="color: maroon;"&gt;"application/json"&lt;/span&gt;,&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;success: &lt;span style="color: blue;"&gt;function&lt;/span&gt; (data) {&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.Activities.remove(activity);&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li&gt;}&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;em&gt;Note: The ViewModel should not know about the Views at all, I may be in breach of the pattern when defining the TemplateToUse function which has a weak reference to the views.&lt;/em&gt;&lt;br /&gt;&lt;h4&gt;Views&lt;/h4&gt;The Views are bound to the ViewModel and will have the presentation logic required. To achieve that you will have to reference your ViewModel.js file knockout etc from your aspx file or a delegatecontrol.&lt;br /&gt;&lt;div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:ee7dc86a-b9c0-4e24-a454-beb08a78771a" style="display: inline; float: none; margin: 0px; padding: 0px;"&gt;&lt;div style="border: 1px solid rgb(0, 0, 128); color: black; font-family: &amp;quot;Courier New&amp;quot;, Courier, Monospace; font-size: 10pt;"&gt;&lt;div style="background: rgb(221, 221, 221); max-height: 500px; overflow: auto;"&gt;&lt;ol style="background: rgb(255, 255, 255); margin: 0px 0px 0px 2em; padding: 0px 0px 0px 5px;"&gt;&lt;li&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: darkblue;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: darkblue;"&gt;Content&lt;/span&gt; &lt;span style="color: purple;"&gt;ContentPlaceHolderID&lt;/span&gt;&lt;span style="color: blue;"&gt;="&lt;/span&gt;&lt;span style="color: red;"&gt;PlaceHolderAdditionalPageHead&lt;/span&gt;&lt;span style="color: blue;"&gt;"&lt;/span&gt; &lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;script&lt;/span&gt; &lt;span style="color: red;"&gt;type&lt;/span&gt;&lt;span style="color: blue;"&gt;="text/javascript"&lt;/span&gt; &lt;span style="color: red;"&gt;src&lt;/span&gt;&lt;span style="color: blue;"&gt;="Knockout/jquery-1.6.4.min.js"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;script&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;script&lt;/span&gt; &lt;span style="color: red;"&gt;type&lt;/span&gt;&lt;span style="color: blue;"&gt;="text/javascript"&lt;/span&gt; &lt;span style="color: red;"&gt;src&lt;/span&gt;&lt;span style="color: blue;"&gt;="Knockout/jquery-tmpl-min.js"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;script&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;script&lt;/span&gt; &lt;span style="color: red;"&gt;type&lt;/span&gt;&lt;span style="color: blue;"&gt;="text/javascript"&lt;/span&gt; &lt;span style="color: red;"&gt;src&lt;/span&gt;&lt;span style="color: blue;"&gt;="Knockout/knockout-1.2.1.js""&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;script&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;script&lt;/span&gt; &lt;span style="color: red;"&gt;type&lt;/span&gt;&lt;span style="color: blue;"&gt;="text/javascript"&lt;/span&gt; &lt;span style="color: red;"&gt;src&lt;/span&gt;&lt;span style="color: blue;"&gt;="ViewModel/ActivitiesAndMilestonesViewModel.js"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;script&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: darkblue;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: darkblue;"&gt;Content&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;Below follows the application outline with some presentation logic.&lt;br /&gt;&lt;div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:d5bcc80f-df44-4139-b7d6-afe5518f2685" style="display: inline; float: none; margin: 0px; padding: 0px;"&gt;&lt;div style="border: 1px solid rgb(0, 0, 128); color: black; font-family: &amp;quot;Courier New&amp;quot;, Courier, Monospace; font-size: 10pt;"&gt;&lt;div style="background: rgb(221, 221, 221); max-height: 500px; overflow: auto;"&gt;&lt;ol style="background: rgb(255, 255, 255); margin: 0px 0px 0px 2.5em; padding: 0px 0px 0px 5px;"&gt;&lt;li&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;table&lt;/span&gt; &lt;span style="color: red;"&gt;cellspacing&lt;/span&gt;&lt;span style="color: blue;"&gt;="0"&lt;/span&gt; &lt;span style="color: red;"&gt;border&lt;/span&gt;&lt;span style="color: blue;"&gt;="0"&lt;/span&gt; &lt;span style="color: red;"&gt;width&lt;/span&gt;&lt;span style="color: blue;"&gt;="100%"&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;tr&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;p&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;You have &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;span&lt;/span&gt; &lt;span style="color: red;"&gt;data-bind&lt;/span&gt;&lt;span style="color: blue;"&gt;='text: Activities().length'&amp;gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;span&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt; activities&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;p&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;table&lt;/span&gt; &lt;span style="color: red;"&gt;data-bind&lt;/span&gt;&lt;span style="color: blue;"&gt;='visible: Activities().length &amp;gt; 0'&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;thead&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;tr&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;th&lt;/span&gt; &lt;span style="color: red;"&gt;align&lt;/span&gt;&lt;span style="color: blue;"&gt;="left"&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Activity ID&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;th&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;th&lt;/span&gt; &lt;span style="color: red;"&gt;align&lt;/span&gt;&lt;span style="color: blue;"&gt;="left"&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Title&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;th&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;th&lt;/span&gt; &lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;tr&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;thead&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;tbody&lt;/span&gt; &lt;span style="color: red;"&gt;data-bind&lt;/span&gt;&lt;span style="color: blue;"&gt;='template: { name: TemplateToUse, foreach: Activities }'&lt;/span&gt; &lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;table&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;button&lt;/span&gt; &lt;span style="color: red;"&gt;data-bind&lt;/span&gt;&lt;span style="color: blue;"&gt;='click: AddActivity'&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Add Activity&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;button&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;tr&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;tr&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;p&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;You have &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;span&lt;/span&gt; &lt;span style="color: red;"&gt;data-bind&lt;/span&gt;&lt;span style="color: blue;"&gt;='text: Milestones().length'&amp;gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;span&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt; milestones&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;p&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;table&lt;/span&gt; &lt;span style="color: red;"&gt;data-bind&lt;/span&gt;&lt;span style="color: blue;"&gt;='visible: Milestones().length &amp;gt; 0'&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;thead&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;tr&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;th&lt;/span&gt; &lt;span style="color: red;"&gt;align&lt;/span&gt;&lt;span style="color: blue;"&gt;="left"&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Milestone ID&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;th&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;th&lt;/span&gt; &lt;span style="color: red;"&gt;align&lt;/span&gt;&lt;span style="color: blue;"&gt;="left"&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Title&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;th&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;th&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;Activities&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;th&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;tr&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;thead&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;tbody&lt;/span&gt; &lt;span style="color: red;"&gt;data-bind&lt;/span&gt;&lt;span style="color: blue;"&gt;='template: { name: "MilestoneRowDisplay", foreach: Milestones }'&lt;/span&gt; &lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;table&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;tr&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;table&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;I’ve added each detail view as separate usercontrols for reusability purposes so those have to be included as well:&lt;br /&gt;&lt;div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:572099c2-347b-40e6-adfc-3cbabdbb6dca" style="display: inline; float: none; margin: 0px; padding: 0px;"&gt;&lt;div style="border: 1px solid rgb(0, 0, 128); color: black; font-family: &amp;quot;Courier New&amp;quot;, Courier, Monospace; font-size: 10pt;"&gt;&lt;div style="background: rgb(221, 221, 221); max-height: 500px; overflow: auto;"&gt;&lt;ol style="background: rgb(255, 255, 255); margin: 0px 0px 0px 2em; padding: 0px 0px 0px 5px;"&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: darkblue;"&gt;mvvm&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: darkcyan;"&gt;ActivityRowDisplay&lt;/span&gt; &lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="&lt;/span&gt;&lt;span style="color: purple;"&gt;ActivityRowDisplay&lt;/span&gt;&lt;span style="color: blue;"&gt;"&lt;/span&gt; &lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&lt;/span&gt; &lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: darkblue;"&gt;mvvm&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: darkcyan;"&gt;ActivityRowEdit&lt;/span&gt; &lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="&lt;/span&gt;&lt;span style="color: purple;"&gt;ActivityRowEdit&lt;/span&gt;&lt;span style="color: blue;"&gt;"&lt;/span&gt; &lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&lt;/span&gt; &lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: darkblue;"&gt;mvvm&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: darkcyan;"&gt;MilestoneActivityDisplay&lt;/span&gt; &lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="&lt;/span&gt;&lt;span style="color: purple;"&gt;MilestoneActivityDisplay&lt;/span&gt;&lt;span style="color: blue;"&gt;"&lt;/span&gt; &lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&lt;/span&gt; &lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: darkblue;"&gt;mvvm&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: darkcyan;"&gt;MilestoneRowDisplay&lt;/span&gt; &lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="&lt;/span&gt;&lt;span style="color: purple;"&gt;MilestoneRowDisplay&lt;/span&gt;&lt;span style="color: blue;"&gt;"&lt;/span&gt; &lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&lt;/span&gt; &lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;Some of the detail views&lt;br /&gt;&lt;div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:7a4769c1-2d3f-43e0-9d75-4435c01690c8" style="display: inline; float: none; margin: 0px; padding: 0px;"&gt;&lt;div style="border: 1px solid rgb(0, 0, 128); color: black; font-family: &amp;quot;Courier New&amp;quot;, Courier, Monospace; font-size: 10pt;"&gt;&lt;div style="background: rgb(221, 221, 221); max-height: 500px; overflow: auto;"&gt;&lt;ol style="background: rgb(255, 255, 255); margin: 0px 0px 0px 2.5em; padding: 0px 0px 0px 5px;"&gt;&lt;li&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;script&lt;/span&gt; &lt;span style="color: red;"&gt;id&lt;/span&gt;&lt;span style="color: blue;"&gt;='ActivityRowDisplay'&lt;/span&gt; &lt;span style="color: red;"&gt;type&lt;/span&gt;&lt;span style="color: blue;"&gt;='text/html'&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;tr&amp;gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;td&amp;gt;&amp;lt;span data-bind='text:Id, uniqueName:true' /&amp;gt;&amp;lt;/td&amp;gt;&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;td&amp;gt;&amp;lt;span data-bind='text:Title, uniqueName:true' /&amp;gt;&amp;lt;/td&amp;gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;td&amp;gt;&amp;lt;a href='#' data-bind='text:"Delete",click: Delete'&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/tr&amp;gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;script&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;script&lt;/span&gt; &lt;span style="color: red;"&gt;id&lt;/span&gt;&lt;span style="color: blue;"&gt;='ActivityRowEdit'&lt;/span&gt; &lt;span style="color: red;"&gt;type&lt;/span&gt;&lt;span style="color: blue;"&gt;='text/html'&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;tr&amp;gt;&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;td&amp;gt;&amp;lt;span data-bind='text:Id, uniqueName:true' /&amp;gt;&amp;lt;/td&amp;gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;td&amp;gt;&amp;lt;input data-bind='value:Title, uniqueName:true' /&amp;gt;&amp;lt;/td&amp;gt;&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;td&amp;gt;&amp;lt;a href='#' data-bind='text:"Save", click: Save'&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/tr&amp;gt;&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;script&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;script&lt;/span&gt; &lt;span style="color: red;"&gt;id&lt;/span&gt;&lt;span style="color: blue;"&gt;='MilestoneActivityDisplay'&lt;/span&gt; &lt;span style="color: red;"&gt;type&lt;/span&gt;&lt;span style="color: blue;"&gt;='text/html'&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;div data-bind='text:Title' /&amp;gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;script&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;script&lt;/span&gt; &lt;span style="color: red;"&gt;id&lt;/span&gt;&lt;span style="color: blue;"&gt;='MilestoneRowDisplay'&lt;/span&gt; &lt;span style="color: red;"&gt;type&lt;/span&gt;&lt;span style="color: blue;"&gt;='text/html'&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;tr&amp;gt;&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;td&amp;gt;&amp;lt;span data-bind='text:Id, uniqueName:true' /&amp;gt;&amp;lt;/td&amp;gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;td&amp;gt;&amp;lt;span data-bind='text:Title, uniqueName:true' /&amp;gt;&amp;lt;/td&amp;gt;&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;td&amp;gt;&amp;lt;span data-bind='template: {name: "MilestoneActivityDisplay", foreach: Activities }' /&amp;gt;&amp;lt;/td&amp;gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/tr&amp;gt;&lt;/li&gt;&lt;li style="background: rgb(243, 243, 243);"&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;script&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;h4&gt;Project Organization&lt;/h4&gt;To attempt to make the roles of different project components pretty clear I structured my project this way.&lt;br /&gt;&lt;a href="http://lh4.ggpht.com/-Uwl86r2d01s/Ts6x3a2knOI/AAAAAAAADcA/ABm6v_0fwTo/s1600-h/image%25255B3%25255D.png"&gt;&lt;img alt="image" border="0" height="324" src="http://lh3.ggpht.com/-AC7xk16XF5s/Ts6x4DCEvfI/AAAAAAAADcE/cNxpyLr8TME/image_thumb%25255B1%25255D.png?imgmax=800" style="background-image: none; border: 0px currentColor; display: inline; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="197" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;h4&gt;End Result&lt;/h4&gt;The end result is something pretty close to what I want to achieve although it’s a very simple sample. I will continue a more complex sample that may be blogged in the future, but I have little or no doubt that you can create some pretty amazing stuff with a good user experience with KnockoutJS in combo with the power in the SharePoint platform. Be aware that this sample and the samples on the KnockoutJS site uses jQuery Templates, which will be replaced by other work in progress. Read about &lt;a href="http://www.borismoore.com/2011/10/jquery-templates-and-jsviews-roadmap.html"&gt;jQuery Templates and JsViews: The Roadmap&lt;/a&gt;&amp;nbsp;before implementing applications using KnockoutJS&lt;br /&gt;&lt;br /&gt;Get my code &lt;a href="http://www.puzzlepart.com/BlogContent/developernovelty/MVVM%20Sample.zip"&gt;here&lt;/a&gt; and try it out yourself.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://lh5.ggpht.com/-FqorW0nvato/Ts6x4s18_fI/AAAAAAAADcQ/OnLrKJ1BCH8/s1600-h/image%25255B6%25255D.png"&gt;&lt;img alt="image" border="0" height="219" src="http://lh6.ggpht.com/-X2aLtK5Ity4/Ts6x5sYtu-I/AAAAAAAADcY/ctdumropmCQ/image_thumb%25255B2%25255D.png?imgmax=800" style="background-image: none; border: 0px currentColor; display: inline; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="244" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2485944830160065050-6212751433288781676?l=ogarshol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ogarshol.blogspot.com/feeds/6212751433288781676/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ogarshol.blogspot.com/2011/11/beyond-silverlight.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2485944830160065050/posts/default/6212751433288781676'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2485944830160065050/posts/default/6212751433288781676'/><link rel='alternate' type='text/html' href='http://ogarshol.blogspot.com/2011/11/beyond-silverlight.html' title='Beyond Silverlight'/><author><name>Øystein Garshol</name><uri>http://www.blogger.com/profile/12841414895483895925</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_Crymsa-IOEo/SsT8Md6_jaI/AAAAAAAAAAM/ScNLuzNqUvA/S220/OYSTEIN_GARSHOL.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/-AC7xk16XF5s/Ts6x4DCEvfI/AAAAAAAADcE/cNxpyLr8TME/s72-c/image_thumb%25255B1%25255D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2485944830160065050.post-5522287194618582618</id><published>2011-11-23T22:28:00.001+01:00</published><updated>2011-11-23T22:28:13.097+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Newsgator'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><title type='text'>Presenting  Social Collaboration in SharePoint</title><content type='html'>&lt;p&gt;Today I presented how DNB implemented Newsgator in their SharePoint Solutions at the Norwegian SharePoint Community meeting together with Rune Simensen (DNB) and Kjetil Gullen (Inmeta Crayon). We had to squeeze the content into a 30minute session (though we exceeded our timeslot) and could probably spent twice the time easily. &lt;/p&gt;  &lt;p&gt;We had a great audience with lots of good questions, and I had a very good time presenting the stuff. As promised the slide deck is published &lt;a href="http://www.puzzlepart.com/BlogContent/NSC%20November%2011%20DNB%20Social%20Collab.pdf" target="_blank"&gt;here&lt;/a&gt; (Unfortunately in Norwegian only)&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2485944830160065050-5522287194618582618?l=ogarshol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ogarshol.blogspot.com/feeds/5522287194618582618/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ogarshol.blogspot.com/2011/11/presenting-social-collaboration-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2485944830160065050/posts/default/5522287194618582618'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2485944830160065050/posts/default/5522287194618582618'/><link rel='alternate' type='text/html' href='http://ogarshol.blogspot.com/2011/11/presenting-social-collaboration-in.html' title='Presenting  Social Collaboration in SharePoint'/><author><name>Øystein Garshol</name><uri>http://www.blogger.com/profile/12841414895483895925</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_Crymsa-IOEo/SsT8Md6_jaI/AAAAAAAAAAM/ScNLuzNqUvA/S220/OYSTEIN_GARSHOL.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2485944830160065050.post-7089691484087264847</id><published>2011-11-16T14:45:00.001+01:00</published><updated>2011-11-16T14:52:54.876+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Newsgator'/><title type='text'>Norwegian SharePoint Community November 2011</title><content type='html'>For some time I've worked with &lt;a href="http://www.newsgator.com/products/social-sites-for-sharepoint-2010.aspx"&gt;Newsgator Social Sites for SharePoint 2010&lt;/a&gt;&amp;nbsp;for &lt;a href="http://www.dnb.no/"&gt;DNB&lt;/a&gt;, Norways largest financial institution. &lt;br /&gt;&lt;br /&gt;Wednesday November 23rd I'll be talking to Norwegian SharePoint Community about how DNB implemented Newsgator and share some of our experiences with the attendees. Once the presentation is held I'll add a link to it from my blog.&lt;br /&gt;&lt;br /&gt;Read more about the presentation &lt;a href="http://www.puzzlepart.com/Pages/Norwegian-SharePoint-Community-November-2011.aspx"&gt;here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2485944830160065050-7089691484087264847?l=ogarshol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ogarshol.blogspot.com/feeds/7089691484087264847/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ogarshol.blogspot.com/2011/11/norwegian-sharepoint-community-november.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2485944830160065050/posts/default/7089691484087264847'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2485944830160065050/posts/default/7089691484087264847'/><link rel='alternate' type='text/html' href='http://ogarshol.blogspot.com/2011/11/norwegian-sharepoint-community-november.html' title='Norwegian SharePoint Community November 2011'/><author><name>Øystein Garshol</name><uri>http://www.blogger.com/profile/12841414895483895925</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_Crymsa-IOEo/SsT8Md6_jaI/AAAAAAAAAAM/ScNLuzNqUvA/S220/OYSTEIN_GARSHOL.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2485944830160065050.post-4880953416724466533</id><published>2011-08-16T13:30:00.001+02:00</published><updated>2011-08-16T13:30:57.362+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PeopleEditor'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='Fail'/><title type='text'>PeopleEditor in custom Layouts pages after SharePoint June 2011 CU</title><content type='html'>&lt;p&gt;If you are using PeopleEditor AKA PeoplePicker in custom layout pages and have installed SharePoint 2010 SP1 and the June 2011 CU you may experience problems if your application page performs a postback.&lt;/p&gt;  &lt;p&gt;If you have filled your people editor control with a value before a postback is triggered, it will stop functioning as an actual picker and if you perform another postback on the page you will get an errormessage: “String was not recognized as a valid Boolean”.&lt;/p&gt;  &lt;p&gt;The reason seems to be that a lot of span tags are not regenerated after the first postback. &lt;/p&gt;  &lt;p&gt;The only descent fix so far seems to be to validate the PeopleEditor control in the page OnLoad event:&lt;/p&gt;  &lt;p&gt;   &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:02bc7f21-2ab5-433d-97b1-f2ca4acb8fc9" class="wlWriterEditableSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #ddd; max-height: 300px; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff"&gt;override&lt;/span&gt; &lt;span style="color:#0000ff"&gt;void&lt;/span&gt; &lt;span style="color:#008b8b"&gt;OnLoad&lt;/span&gt;(&lt;span style="color:#00008b"&gt;EventArgs&lt;/span&gt; e)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;{&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff"&gt;base&lt;/span&gt;.&lt;span style="color:#008b8b"&gt;OnLoad&lt;/span&gt;(e);&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;    &lt;span style="color:#0000ff"&gt;if&lt;/span&gt; (&lt;span style="color:#800080"&gt;IsPostBack&lt;/span&gt;)&lt;/li&gt; &lt;li&gt;    {&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;        &lt;span style="color:#800080"&gt;yourPeopleEditor&lt;/span&gt;.&lt;span style="color:#008b8b"&gt;Validate&lt;/span&gt;();&lt;/li&gt; &lt;li&gt;    }&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;}&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2485944830160065050-4880953416724466533?l=ogarshol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ogarshol.blogspot.com/feeds/4880953416724466533/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ogarshol.blogspot.com/2011/08/peopleeditor-in-custom-layouts-pages.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2485944830160065050/posts/default/4880953416724466533'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2485944830160065050/posts/default/4880953416724466533'/><link rel='alternate' type='text/html' href='http://ogarshol.blogspot.com/2011/08/peopleeditor-in-custom-layouts-pages.html' title='PeopleEditor in custom Layouts pages after SharePoint June 2011 CU'/><author><name>Øystein Garshol</name><uri>http://www.blogger.com/profile/12841414895483895925</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_Crymsa-IOEo/SsT8Md6_jaI/AAAAAAAAAAM/ScNLuzNqUvA/S220/OYSTEIN_GARSHOL.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2485944830160065050.post-5562074002961517513</id><published>2011-03-11T21:29:00.004+01:00</published><updated>2011-05-05T09:14:31.973+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Managed Metadata'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><title type='text'>Howto use SharePoint 2010 Content Type Hub and still allow end user customization</title><content type='html'>&lt;a href="http://puzzlepart.com/" target="_blank"&gt;Puzzlepart&lt;/a&gt; is currently engaged by a large financial institution to help implementing their new SharePoint 2010 solution. I’ve recently been investigating the use of the Content Type Hub to provision content types amongst their many web applications and site collections and have made a couple of interesting observations.&lt;br /&gt;&lt;h4&gt;&lt;a name='more'&gt;&lt;/a&gt;Business Requirements&lt;/h4&gt;Common content types shall be pushed out to all site collections, but site collection administrators should easily be able to change the content types by adding new fields to customize their lists to suit their own needs.&lt;br /&gt;&lt;h4&gt;&lt;/h4&gt;&lt;h4&gt;Initial solution&lt;/h4&gt;Using the content type hub, content types can be published and republished when centrally changed. For an overview of how to configure the content type hub see &lt;a href="http://www.sharepointanalysthq.com/2010/06/content-type-publishing-in-sharepoint-2010/" title="http://www.sharepointanalysthq.com/2010/06/content-type-publishing-in-sharepoint-2010/"&gt;SharePoint Analyst HQ&lt;/a&gt; or &lt;a href="http://www.chakkaradeep.com/post/SharePoint-2010-Content-Type-Hubs-e28093-Publish-and-Subscribe-to-Content-Types.aspx" title="http://www.chakkaradeep.com/post/SharePoint-2010-Content-Type-Hubs-e28093-Publish-and-Subscribe-to-Content-Types.aspx"&gt;Chak's corner&lt;/a&gt;&lt;br /&gt;The content type hub works perfectly but does not solve the requirement that site collection admins should be able to change the content types, since all published content types are instantiated as read-only content types, and there are no way to reconfigure that behavior. &lt;br /&gt;Consumed content types can off course be changed to be writable&amp;nbsp; by admins, but that requires a lot of unnecessary clicking around and therefore undesired end-user training. There are also some uncertainty as to what happens if the readonly flag is changed when the content type is republished that needs to be researched. Based on these issues I have spent some time looking into the Content Type Hub and found some workarounds to the out of the box content type hub experience.&lt;br /&gt;&lt;h4&gt;Findings&lt;/h4&gt;&lt;ol&gt;&lt;li&gt;A freshly published content type is always consumed and instantiated as a read only site collection content type.&lt;/li&gt;&lt;li&gt;Site collection content types can be changed to be writable, and that will be propagated to list content types as long as the “Update all content types inheriting from this type” setting is Yes&lt;/li&gt;&lt;li&gt;If the instantiated content type is mad writable, columns can easily be added as if it was not a subscribed content type.&lt;/li&gt;&lt;li&gt;The source content type can be republished by using the republish option in content type publishing, and the instantiated content types will not change the readonly flag, nor will user added columns be removed and any changes to the source content types will be propagated to consuming site collections&lt;/li&gt;&lt;li&gt;Unpublishing a content type will always make the instantiated content type writeable&lt;/li&gt;&lt;li&gt;Publishing a previously published content type will make it readonly again in Site collections where it used to exist. &lt;/li&gt;&lt;/ol&gt;&lt;h4&gt;Solution&lt;/h4&gt;The solution below is far from ideal, but certainly provides the functionality requested. Ideally one could hope for a pluggable content type hub/subscribed, but as all of the SharePoint Content Type jobs are internal I see no other way of achieving the goals than creating supporting timer jobs and features.&lt;br /&gt;I have implemented two way to automatically make the subscribed content types writable. You can use the timer job don’t care about the delay between site creation and timer job running or you specify the schedule for the timer job to be acceptably low. If you need immediate writable content types you can add a feature that’s stapled to new site collections.&lt;br /&gt;First some extension methods that will get all content types that are synced from the hub and change the read only flag&lt;br /&gt;&lt;div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:d66b7b76-808e-457c-8b64-ff3c6d8ddce7" style="display: inline; float: none; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div style="border-bottom: #000080 1px solid; border-left: #000080 1px solid; border-right: #000080 1px solid; border-top: #000080 1px solid; color: black; font-family: &amp;quot;Courier New&amp;quot;, Courier, Monospace; font-size: 10pt;"&gt;&lt;div style="background: #ddd; max-height: 500px; overflow: auto;"&gt;&lt;ol style="background: #ffffff; margin: 0px 0px 0px 2.5em; padding-bottom: 0px; padding-left: 5px; padding-right: 0px; padding-top: 0px;"&gt;&lt;li&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: darkblue;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: darkblue;"&gt;SPContentType&lt;/span&gt;&amp;gt; &lt;span style="color: darkcyan;"&gt;GetSubscribedContentTypes&lt;/span&gt;(&lt;span style="color: blue;"&gt;this&lt;/span&gt; &lt;span style="color: darkblue;"&gt;SPContentTypeCollection&lt;/span&gt; contentTypes)&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;{&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt; contentTypes.&lt;span style="color: darkcyan;"&gt;Cast&lt;/span&gt;&amp;lt;&lt;span style="color: darkblue;"&gt;SPContentType&lt;/span&gt;&amp;gt;().&lt;span style="color: darkcyan;"&gt;Where&lt;/span&gt;(contentType =&amp;gt; !&lt;span style="color: blue;"&gt;string&lt;/span&gt;.&lt;span style="color: darkcyan;"&gt;IsNullOrEmpty&lt;/span&gt;(contentType.&lt;span style="color: purple;"&gt;XmlDocuments&lt;/span&gt;[&lt;span style="color: #a31515;"&gt;"Microsoft.SharePoint.Taxonomy.ContentTypeSync"&lt;/span&gt;])).&lt;span style="color: darkcyan;"&gt;ToList&lt;/span&gt;();&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;}&lt;/li&gt;&lt;li&gt;&amp;nbsp;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; &lt;span style="color: darkcyan;"&gt;SetSubscribedContentTypesWritable&lt;/span&gt;(&lt;span style="color: blue;"&gt;this&lt;/span&gt; &lt;span style="color: darkblue;"&gt;SPSite&lt;/span&gt; site)&lt;/li&gt;&lt;li&gt;{&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;var&lt;/span&gt; subscribedContentTypes = site.&lt;span style="color: purple;"&gt;RootWeb&lt;/span&gt;.&lt;span style="color: purple;"&gt;ContentTypes&lt;/span&gt;.&lt;span style="color: darkcyan;"&gt;GetSubscribedContentTypes&lt;/span&gt;();&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;foreach&lt;/span&gt; (&lt;span style="color: blue;"&gt;var&lt;/span&gt; contentType &lt;span style="color: blue;"&gt;in&lt;/span&gt; subscribedContentTypes)&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;try&lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;// Reget the content type to avoid problem when contenttype has &lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;// been updated due to inheritance earlier in the loop&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;var&lt;/span&gt; currentcontentType = site.&lt;span style="color: purple;"&gt;RootWeb&lt;/span&gt;.&lt;span style="color: purple;"&gt;ContentTypes&lt;/span&gt;[contentType.&lt;span style="color: purple;"&gt;Id&lt;/span&gt;];&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt; (currentcontentType.&lt;span style="color: purple;"&gt;ReadOnly&lt;/span&gt;)&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;currentcontentType.&lt;span style="color: purple;"&gt;ReadOnly&lt;/span&gt; = &lt;span style="color: blue;"&gt;false&lt;/span&gt;;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;currentcontentType.&lt;span style="color: darkcyan;"&gt;Update&lt;/span&gt;(&lt;span style="color: blue;"&gt;true&lt;/span&gt;);&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;catch&lt;/span&gt; (&lt;span style="color: darkblue;"&gt;Exception&lt;/span&gt; ex)&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;//Log the exception &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li&gt;}&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;Then create a timer job using the new SPAllSitesJobDefinition that will run through every SiteCollection on the Web application it’s deployed to and call the extension methods above.&lt;br /&gt;&lt;div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:8923137b-e40f-40d6-a346-c71f50a76275" style="display: inline; float: none; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div style="border-bottom: #000080 1px solid; border-left: #000080 1px solid; border-right: #000080 1px solid; border-top: #000080 1px solid; color: black; font-family: &amp;quot;Courier New&amp;quot;, Courier, Monospace; font-size: 10pt;"&gt;&lt;div style="background: #ddd; max-height: 500px; overflow: auto;"&gt;&lt;ol style="background: #ffffff; margin: 0px 0px 0px 2.5em; padding-bottom: 0px; padding-left: 5px; padding-right: 0px; padding-top: 0px;"&gt;&lt;li&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: darkblue;"&gt;SubscribedContentTypesTimerJobDefinition&lt;/span&gt; : &lt;span style="color: darkblue;"&gt;SPAllSitesJobDefinition&lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;{&lt;/li&gt;&lt;li&gt;&amp;nbsp;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: darkblue;"&gt;SubscribedContentTypesTimerJobDefinition&lt;/span&gt;()&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li&gt;&amp;nbsp;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: darkblue;"&gt;SubscribedContentTypesTimerJobDefinition&lt;/span&gt;(&lt;span style="color: blue;"&gt;string&lt;/span&gt; jobName, &lt;span style="color: darkblue;"&gt;SPWebApplication&lt;/span&gt; webApplication)&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;: &lt;span style="color: darkblue;"&gt;base&lt;/span&gt;(jobName, webApplication)&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: purple;"&gt;Title&lt;/span&gt; = jobName;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li&gt;&amp;nbsp;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;override&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; &lt;span style="color: darkcyan;"&gt;Execute&lt;/span&gt;(&lt;span style="color: darkblue;"&gt;SPContentDatabase&lt;/span&gt; contentDatabase, &lt;span style="color: darkblue;"&gt;SPJobState&lt;/span&gt; jobState)&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt; (&lt;span style="color: purple;"&gt;WebApplication&lt;/span&gt;.&lt;span style="color: purple;"&gt;Status&lt;/span&gt; == &lt;span style="color: darkblue;"&gt;SPObjectStatus&lt;/span&gt;.&lt;span style="color: purple;"&gt;Online&lt;/span&gt;)&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;base&lt;/span&gt;.&lt;span style="color: darkcyan;"&gt;Execute&lt;/span&gt;(contentDatabase, jobState);&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li&gt;&amp;nbsp;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;override&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; &lt;span style="color: darkcyan;"&gt;ProcessSite&lt;/span&gt;(&lt;span style="color: darkblue;"&gt;SPSite&lt;/span&gt; site, &lt;span style="color: darkblue;"&gt;SPJobState&lt;/span&gt; jobState)&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;try&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;site.&lt;span style="color: darkcyan;"&gt;SetSubscribedContentTypesWritable&lt;/span&gt;();&lt;/li&gt;&lt;li&gt;&amp;nbsp;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;catch&lt;/span&gt; (&lt;span style="color: darkblue;"&gt;Exception&lt;/span&gt; e)&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;//Log exception and site url&lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li&gt;&amp;nbsp;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li&gt;}&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;In addition you can create a feature with a feature receiver that is stapled to new site collections so that you can change the content types that will be automatically retrieved from the content type hub upon site creation. The feature needs to be web scoped, otherwise it will be activated before the sitecollection is populated with the content types and it will in fact not find any content types to change.&lt;br /&gt;&lt;div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:23a2418d-876d-4ee7-9d2a-8df40eb29c8d" style="display: inline; float: none; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div style="border-bottom: #000080 1px solid; border-left: #000080 1px solid; border-right: #000080 1px solid; border-top: #000080 1px solid; color: black; font-family: &amp;quot;Courier New&amp;quot;, Courier, Monospace; font-size: 10pt;"&gt;&lt;div style="background: #ddd; max-height: 500px; overflow: auto;"&gt;&lt;ol style="background: #ffffff; margin: 0px 0px 0px 2.5em; padding-bottom: 0px; padding-left: 5px; padding-right: 0px; padding-top: 0px;"&gt;&lt;li&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;override&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; &lt;span style="color: darkcyan;"&gt;FeatureActivated&lt;/span&gt;(&lt;span style="color: darkblue;"&gt;SPFeatureReceiverProperties&lt;/span&gt; properties)&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;{&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;var&lt;/span&gt; web = properties.&lt;span style="color: purple;"&gt;Feature&lt;/span&gt;.&lt;span style="color: purple;"&gt;Parent&lt;/span&gt; &lt;span style="color: blue;"&gt;as&lt;/span&gt; &lt;span style="color: darkblue;"&gt;SPWeb&lt;/span&gt;;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt; (web != &lt;span style="color: blue;"&gt;null&lt;/span&gt;)&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;try&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;web.&lt;span style="color: purple;"&gt;Site&lt;/span&gt;.&lt;span style="color: darkcyan;"&gt;SetSubscribedContentTypesWritable&lt;/span&gt;();&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;catch&lt;/span&gt; (&lt;span style="color: darkblue;"&gt;Exception&lt;/span&gt; e)&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;//Ignore the exception as it is not critical&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li&gt;}&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;h4&gt;&lt;/h4&gt;&lt;h4&gt;WARNING&lt;/h4&gt;If you use content type inheritance but need to remove fields from the parent content type and therefore set Inherits=”FALSE” you have to specify the XmlDocuments node in the content type like the example below. If you fail to do so the content type will be pushed and subscribed by the content type hub and content type subscriber, but the subscribed content type will not have a Microsoft.SharePoint.Taxonomy.ContentTypeSync section which will effectively mean that neither my code above nor republishing content types to any subscriber will work properly!&lt;br /&gt;&lt;div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:c467faf7-f74c-41f4-b491-3f409f3c20a0" style="display: inline; float: none; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div style="border-bottom: #000080 1px solid; border-left: #000080 1px solid; border-right: #000080 1px solid; border-top: #000080 1px solid; color: black; font-family: &amp;quot;Courier New&amp;quot;, Courier, Monospace; font-size: 10pt;"&gt;&lt;div style="background: #ddd; max-height: 500px; overflow: auto;"&gt;&lt;ol style="background: #ffffff; margin: 0px 0px 0px 2.5em; padding-bottom: 0px; padding-left: 5px; padding-right: 0px; padding-top: 0px;"&gt;&lt;li&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ContentType&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;0x010800F9C3362F56ED134B8413E186BA276059&lt;/span&gt;"&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;Name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;CustomTaskCt&lt;/span&gt;"&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;Inherits&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;FALSE&lt;/span&gt;"&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;Overwrite&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;TRUE&lt;/span&gt;"&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;Version&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;0&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;FieldRefs&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;RemoveFieldRef&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"{&lt;span style="color: blue;"&gt;c3a92d97-2b77-4a25-9698-3ab54874bc6f}&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;Predecessors&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;FieldRef&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"{&lt;span style="color: blue;"&gt;fa564e0f-0c70-4ab9-b863-0177e6ddd247}&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;Title&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Required&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;TRUE&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;ShowInNewForm&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;TRUE&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;ShowInEditForm&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;TRUE&lt;/span&gt;"&lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;FieldRefs&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;XmlDocuments&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;XmlDocument&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;NamespaceURI&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;http://schemas.microsoft.com/sharepoint/v3/contenttype/forms&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;FormTemplates&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;http://schemas.microsoft.com/sharepoint/v3/contenttype/forms&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Display&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;ListForm&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Display&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Edit&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;ListForm&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Edit&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;New&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;ListForm&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;New&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;FormTemplates&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;XmlDocument&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;XmlDocuments&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ContentType&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2485944830160065050-5562074002961517513?l=ogarshol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ogarshol.blogspot.com/feeds/5562074002961517513/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ogarshol.blogspot.com/2011/03/howto-use-sharepoint-2010-content-type.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2485944830160065050/posts/default/5562074002961517513'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2485944830160065050/posts/default/5562074002961517513'/><link rel='alternate' type='text/html' href='http://ogarshol.blogspot.com/2011/03/howto-use-sharepoint-2010-content-type.html' title='Howto use SharePoint 2010 Content Type Hub and still allow end user customization'/><author><name>Øystein Garshol</name><uri>http://www.blogger.com/profile/12841414895483895925</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_Crymsa-IOEo/SsT8Md6_jaI/AAAAAAAAAAM/ScNLuzNqUvA/S220/OYSTEIN_GARSHOL.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2485944830160065050.post-7844745205792875724</id><published>2011-01-14T15:42:00.000+01:00</published><updated>2011-01-14T15:42:08.774+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASC2011'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint'/><title type='text'>Arctic SharePoint Challenge 2011</title><content type='html'>The lynx is out of the bag: Get down with Arctic SharePoint Challenge at &lt;a href="http://pzl.no/asc2011"&gt;http://pzl.no/asc2011&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Twitter: &lt;a href="http://twitter.com/SPChallenge"&gt;@spchallenge &lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2485944830160065050-7844745205792875724?l=ogarshol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ogarshol.blogspot.com/feeds/7844745205792875724/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ogarshol.blogspot.com/2011/01/arctic-sharepoint-challenge-2011.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2485944830160065050/posts/default/7844745205792875724'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2485944830160065050/posts/default/7844745205792875724'/><link rel='alternate' type='text/html' href='http://ogarshol.blogspot.com/2011/01/arctic-sharepoint-challenge-2011.html' title='Arctic SharePoint Challenge 2011'/><author><name>Øystein Garshol</name><uri>http://www.blogger.com/profile/12841414895483895925</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_Crymsa-IOEo/SsT8Md6_jaI/AAAAAAAAAAM/ScNLuzNqUvA/S220/OYSTEIN_GARSHOL.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2485944830160065050.post-6386080038548122392</id><published>2010-11-27T13:08:00.003+01:00</published><updated>2011-05-05T09:14:58.048+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Managed Metadata'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><title type='text'>#SharePoint2010 #HowTo use Managed Metadata to find related content</title><content type='html'>&lt;h4&gt;Background&lt;/h4&gt;The Managed Metadata Service is in my opinion one of the better improvements in SharePoint 2010. It can be used across Sites, Site Collections and Web Apps for a centralized Taxonomy.&amp;nbsp;Term sets can be open to allow end users to enter their own terms. The term set manager allows terms to be merged, reused, deprecated and moved. A term set can be configured to allow tagging so that end users can socially tag any page with a term.&lt;br /&gt;&lt;br /&gt;Working for &lt;a href="http://puzzlepart.com/" target="_blank"&gt;Puzzlepart&lt;/a&gt; I’ve seen lots of potential use for Managed Metadata and especially using it to push related content based on context. On the latest &lt;a href="http://twitter.com/#search?q=%23PzlFriday" target="_blank"&gt;Pzl.Friday&lt;/a&gt; I finally got the chance to complete the research and complete a simple prototype.&lt;br /&gt;&lt;h4&gt;&lt;a name='more'&gt;&lt;/a&gt;Business Problem&lt;/h4&gt;It’s a well known fact that information workers spend lots of time looking for information, by some &lt;a href="http://www.networkworld.com/news/2006/102006-search-cuts-productivity.html" target="_blank"&gt;estimated to as much as 10%&lt;/a&gt; of the working time. Although Search Engines such as the built-in search in SharePoint 2010 can reduce the amount of time spent looking it still requires an active act by users. It’s all about what you didn’t know that you didn’t know, and how to make you aware of that information in the context that you’re in. This is a huge value proposition for information workers.&lt;br /&gt;&lt;br /&gt;Although there has been some investment in Social Tagging in SharePoint 2010 the tag profile pages are limited to Social Tags and will not leverage the even stronger term usage when an explicit term is used in a&amp;nbsp; MetaData context.&lt;br /&gt;&lt;br /&gt;Personally I would appreciate a lot more a solution where I based on the context (page) I’m watching also see other related pages or documents based on metadata relevance, which I will prove possible below.&lt;br /&gt;&lt;br /&gt;Example: looking into the Enterprise Wiki Page for SharePoint Development I also get information about SharePoint Projects, a document about licensing and other SharePoint related wiki pages.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_Crymsa-IOEo/TPEFCDr8I8I/AAAAAAAAAFE/SWiT9Bbp94I/s1600/great.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="504" ox="true" src="http://3.bp.blogspot.com/_Crymsa-IOEo/TPEFCDr8I8I/AAAAAAAAAFE/SWiT9Bbp94I/s640/great.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;h4&gt;Solution&lt;/h4&gt;I won’t go into details of how the Taxonomy fields are actually handled in SharePoint 2010, for that I recommend reading Wictor Wilén’s &lt;a href="http://www.wictorwilen.se/Post/Dissecting-the-SharePoint-2010-Taxonomy-fields.aspx"&gt;Dissecting the SharePoint 2010 Taxonomy fields&lt;/a&gt;. I found very little information about how to find contents related by taxonomy fields but this forum post helped me a lot in understanding how it all fits together &lt;a href="http://social.technet.microsoft.com/Forums/en-US/sharepoint2010programming/thread/69f1a337-ef24-4308-bdce-aa7ba7ac0f5b" target="_blank"&gt;How do I get SharePoint items tagged with a term from the term store&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;To achieve the goal the following tasks need to be done:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Identify the taxonomy fields and retrieve term ids &lt;/li&gt;&lt;li&gt;Getting WSSIds for each term in each field &lt;/li&gt;&lt;li&gt;Querying for related information based on WSSId s &lt;/li&gt;&lt;li&gt;Optionally qualify the relevance further &lt;/li&gt;&lt;li&gt;Render the result &lt;/li&gt;&lt;/ol&gt;In the solution below I’ll use Enterprise Wiki pages to find related contents in the Site Collection based on the Wiki Categories which is a default&amp;nbsp; Managed Metadata column in the pages library.&lt;br /&gt;&lt;h5&gt;Identify the taxonomy fields and retrieve term ids&lt;/h5&gt;The code below will pick the standard taxonomy field based on a static Display Name. The field(s) could however be picked based on the Context of the File.&lt;br /&gt;&lt;div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:059616fa-12db-49ab-bb7e-b5d8a00e558c" style="display: inline; float: none; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div style="border-bottom: #000080 1px solid; border-left: #000080 1px solid; border-right: #000080 1px solid; border-top: #000080 1px solid; color: black; font-family: &amp;quot;Courier New&amp;quot;, Courier, Monospace; font-size: 10pt;"&gt;&lt;div style="background: #ddd; max-height: 500px; overflow: auto;"&gt;&lt;ol style="background: #ffffff; margin: 0px 0px 0px 2.5em; padding-bottom: 0px; padding-left: 5px; padding-right: 0px; padding-top: 0px;"&gt;&lt;li&gt;&lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: darkblue;"&gt;IEnumerable&lt;/span&gt;&amp;lt;&lt;span style="color: darkblue;"&gt;Guid&lt;/span&gt;&amp;gt; &lt;span style="color: darkcyan;"&gt;GetTermIdsFromContext&lt;/span&gt;()&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;{&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;var&lt;/span&gt; metaDataField = &lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: darkblue;"&gt;SPContext&lt;/span&gt;.&lt;span style="color: purple;"&gt;Current&lt;/span&gt;.&lt;span style="color: purple;"&gt;File&lt;/span&gt;.&lt;span style="color: purple;"&gt;Properties&lt;/span&gt;[&lt;span style="color: #a31515;"&gt;"Wiki Page Categories"&lt;/span&gt;];&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;var&lt;/span&gt; termIds = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: darkblue;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: darkblue;"&gt;Guid&lt;/span&gt;&amp;gt;();&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt; (metaDataField != &lt;span style="color: blue;"&gt;null&lt;/span&gt;)&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;[] tagIdCandiadates =&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;metaDataField.&lt;span style="color: darkcyan;"&gt;ToString&lt;/span&gt;().&lt;span style="color: darkcyan;"&gt;Split&lt;/span&gt;(&lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: blue;"&gt;char&lt;/span&gt;[]&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: darkblue;"&gt;TaxonomyField&lt;/span&gt;.&lt;span style="color: purple;"&gt;TaxonomyGuidLabelDelimiter&lt;/span&gt;,&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: darkblue;"&gt;TaxonomyField&lt;/span&gt;.&lt;span style="color: purple;"&gt;TaxonomyMultipleTermDelimiter&lt;/span&gt;,&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: darkblue;"&gt;TaxonomyField&lt;/span&gt;.&lt;span style="color: purple;"&gt;TaxonomyTermPathDelimiter&lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;foreach&lt;/span&gt; (&lt;span style="color: blue;"&gt;var&lt;/span&gt; idCandiadate &lt;span style="color: blue;"&gt;in&lt;/span&gt; tagIdCandiadates)&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt; (&lt;span style="color: darkcyan;"&gt;IsGuid&lt;/span&gt;(idCandiadate))&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;termIds.&lt;span style="color: darkcyan;"&gt;Add&lt;/span&gt;(&lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: darkblue;"&gt;Guid&lt;/span&gt;(idCandiadate));&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt; termIds;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;}&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;Supporting method&lt;br /&gt;&lt;h4&gt;&lt;div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:62253ccd-75ea-48a7-84f1-2494cc081464" style="display: inline; float: none; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div style="border-bottom: #000080 1px solid; border-left: #000080 1px solid; border-right: #000080 1px solid; border-top: #000080 1px solid; color: black; font-family: &amp;quot;Courier New&amp;quot;, Courier, Monospace; font-size: 10pt;"&gt;&lt;div style="background: #ddd; max-height: 500px; overflow: auto;"&gt;&lt;ol style="background: #ffffff; margin: 0px 0px 0px 2.5em; padding-bottom: 0px; padding-left: 5px; padding-right: 0px; padding-top: 0px;"&gt;&lt;li&gt;&lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;readonly&lt;/span&gt; &lt;span style="color: darkblue;"&gt;Regex&lt;/span&gt; &lt;span style="color: purple;"&gt;isGuid&lt;/span&gt; =&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: darkblue;"&gt;Regex&lt;/span&gt;(&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;@"^(\{){0,1}[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}(\}){0,1}$"&lt;/span&gt;,&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: darkblue;"&gt;RegexOptions&lt;/span&gt;.&lt;span style="color: purple;"&gt;Compiled&lt;/span&gt;);&lt;/li&gt;&lt;li&gt;&amp;nbsp;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;bool&lt;/span&gt; &lt;span style="color: darkcyan;"&gt;IsGuid&lt;/span&gt;(&lt;span style="color: blue;"&gt;string&lt;/span&gt; candidate)&lt;/li&gt;&lt;li&gt;{&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt; (candidate != &lt;span style="color: blue;"&gt;null&lt;/span&gt;)&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt; (&lt;span style="color: purple;"&gt;isGuid&lt;/span&gt;.&lt;span style="color: darkcyan;"&gt;IsMatch&lt;/span&gt;(candidate))&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;true&lt;/span&gt;;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li&gt;&amp;nbsp;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;false&lt;/span&gt;;&lt;/li&gt;&lt;li&gt;}&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/h4&gt;&lt;h5&gt;Getting WSSIds for each term in each field&lt;/h5&gt;WSS Id’s are the actual lookup Id’s which can be used in a SiteDataQuery to get related conent. The code below will get the Wss Id’s using the Taxonomy Session. &lt;br /&gt;&lt;div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:8b423bf9-72e6-40d1-8704-1d519995f80a" style="display: inline; float: none; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div style="border-bottom: #000080 1px solid; border-left: #000080 1px solid; border-right: #000080 1px solid; border-top: #000080 1px solid; color: black; font-family: &amp;quot;Courier New&amp;quot;, Courier, Monospace; font-size: 10pt;"&gt;&lt;div style="background: #ddd; max-height: 500px; overflow: auto;"&gt;&lt;ol style="background: #ffffff; margin: 0px 0px 0px 2.5em; padding-bottom: 0px; padding-left: 5px; padding-right: 0px; padding-top: 0px;"&gt;&lt;li&gt;&lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: darkblue;"&gt;IEnumerable&lt;/span&gt;&amp;lt;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;gt; &lt;span style="color: darkcyan;"&gt;GetWssIdFromTermId&lt;/span&gt;(&lt;span style="color: darkblue;"&gt;IEnumerable&lt;/span&gt;&amp;lt;&lt;span style="color: darkblue;"&gt;Guid&lt;/span&gt;&amp;gt; termIds, &lt;span style="color: blue;"&gt;bool&lt;/span&gt; includDescendants, &lt;span style="color: blue;"&gt;int&lt;/span&gt; itemLimit)&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;{&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;var&lt;/span&gt; wssIdList = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: darkblue;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;gt;();&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;foreach&lt;/span&gt; (&lt;span style="color: blue;"&gt;var&lt;/span&gt; taggId &lt;span style="color: blue;"&gt;in&lt;/span&gt; termIds)&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;var&lt;/span&gt; session = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: darkblue;"&gt;TaxonomySession&lt;/span&gt;(&lt;span style="color: darkblue;"&gt;SPContext&lt;/span&gt;.&lt;span style="color: purple;"&gt;Current&lt;/span&gt;.&lt;span style="color: purple;"&gt;Site&lt;/span&gt;);&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;var&lt;/span&gt; term = session.&lt;span style="color: darkcyan;"&gt;GetTerm&lt;/span&gt;(taggId);&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;wssIdList.&lt;span style="color: darkcyan;"&gt;AddRange&lt;/span&gt;(&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: darkblue;"&gt;TaxonomyField&lt;/span&gt;.&lt;span style="color: darkcyan;"&gt;GetWssIdsOfTerm&lt;/span&gt;(&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: darkblue;"&gt;SPContext&lt;/span&gt;.&lt;span style="color: purple;"&gt;Current&lt;/span&gt;.&lt;span style="color: purple;"&gt;Site&lt;/span&gt;, &lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;term.&lt;span style="color: purple;"&gt;TermSet&lt;/span&gt;.&lt;span style="color: purple;"&gt;TermStore&lt;/span&gt;.&lt;span style="color: purple;"&gt;Id&lt;/span&gt;,&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;term.&lt;span style="color: purple;"&gt;TermSet&lt;/span&gt;.&lt;span style="color: purple;"&gt;Id&lt;/span&gt;,&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;term.&lt;span style="color: purple;"&gt;Id&lt;/span&gt;, &lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;includDescendants, &lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;itemLimit));&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt; wssIdList.&lt;span style="color: darkcyan;"&gt;Distinct&lt;/span&gt;();&lt;/li&gt;&lt;li&gt;}&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;h4&gt;Querying for related information based on WSSIds&lt;/h4&gt;Queries both custom list and document libraries and build up XML content. I chose building it as an XML string so that It will be easier to customize the visual appearance using XSL later on.&lt;br /&gt;&lt;div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:c3b1f977-f1a0-4786-894d-29c06fe70635" style="display: inline; float: none; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div style="border-bottom: #000080 1px solid; border-left: #000080 1px solid; border-right: #000080 1px solid; border-top: #000080 1px solid; color: black; font-family: &amp;quot;Courier New&amp;quot;, Courier, Monospace; font-size: 10pt;"&gt;&lt;div style="background: #ddd; overflow: auto;"&gt;&lt;ol style="background: #ffffff; margin: 0px 0px 0px 2.5em; padding-bottom: 0px; padding-left: 5px; padding-right: 0px; padding-top: 0px;"&gt;&lt;li&gt;&lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; &lt;span style="color: darkcyan;"&gt;GetRelatedContents&lt;/span&gt;(&lt;span style="color: darkblue;"&gt;IEnumerable&lt;/span&gt;&amp;lt;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;gt; wssIds)&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;{&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;foreach&lt;/span&gt; (&lt;span style="color: blue;"&gt;var&lt;/span&gt; wssId &lt;span style="color: blue;"&gt;in&lt;/span&gt; wssIds) &lt;span style="color: green;"&gt;//Optimization possible&lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;try&lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: darkblue;"&gt;DataTable&lt;/span&gt; listResults = &lt;span style="color: darkcyan;"&gt;QuerySite&lt;/span&gt;(wssId, 0);&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt; (listResults != &lt;span style="color: blue;"&gt;null&lt;/span&gt;)&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;foreach&lt;/span&gt; (&lt;span style="color: darkblue;"&gt;DataRow&lt;/span&gt; row &lt;span style="color: blue;"&gt;in&lt;/span&gt; listResults.&lt;span style="color: purple;"&gt;Rows&lt;/span&gt;)&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: purple;"&gt;_xmlTextWriter&lt;/span&gt;.&lt;span style="color: darkcyan;"&gt;WriteStartElement&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;"Content"&lt;/span&gt;);&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: purple;"&gt;_xmlTextWriter&lt;/span&gt;.&lt;span style="color: darkcyan;"&gt;WriteElementString&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;"Title"&lt;/span&gt;, row[&lt;span style="color: #a31515;"&gt;"Title"&lt;/span&gt;].&lt;span style="color: darkcyan;"&gt;ToString&lt;/span&gt;());&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt; relativeUrl = row[&lt;span style="color: #a31515;"&gt;"FileRef"&lt;/span&gt;].&lt;span style="color: darkcyan;"&gt;ToString&lt;/span&gt;();&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;//Get the actual dispform url&lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;relativeUrl = relativeUrl.&lt;span style="color: darkcyan;"&gt;Split&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;'#'&lt;/span&gt;)[1].&lt;span style="color: darkcyan;"&gt;Replace&lt;/span&gt;(row[&lt;span style="color: #a31515;"&gt;"LinkFilename2"&lt;/span&gt;].&lt;span style="color: darkcyan;"&gt;ToString&lt;/span&gt;(),&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;.&lt;span style="color: darkcyan;"&gt;Format&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;"DispForm.aspx?ID={0}"&lt;/span&gt;,&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;row[&lt;span style="color: #a31515;"&gt;"ID"&lt;/span&gt;]));&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt; url = &lt;span style="color: blue;"&gt;string&lt;/span&gt;.&lt;span style="color: darkcyan;"&gt;Format&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;"{0}{1}"&lt;/span&gt;, row[&lt;span style="color: #a31515;"&gt;"EncodedAbsUrl"&lt;/span&gt;], relativeUrl);&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: purple;"&gt;_xmlTextWriter&lt;/span&gt;.&lt;span style="color: darkcyan;"&gt;WriteElementString&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;"Url"&lt;/span&gt;, url);&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: purple;"&gt;_xmlTextWriter&lt;/span&gt;.&lt;span style="color: darkcyan;"&gt;WriteEndElement&lt;/span&gt;();&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: darkblue;"&gt;DataTable&lt;/span&gt; documentResults = &lt;span style="color: darkcyan;"&gt;QuerySite&lt;/span&gt;(wssId, 1);&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt; (documentResults != &lt;span style="color: blue;"&gt;null&lt;/span&gt;)&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;foreach&lt;/span&gt; (&lt;span style="color: darkblue;"&gt;DataRow&lt;/span&gt; row &lt;span style="color: blue;"&gt;in&lt;/span&gt; documentResults.&lt;span style="color: purple;"&gt;Rows&lt;/span&gt;)&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt; relativeUrl = row[&lt;span style="color: #a31515;"&gt;"FileRef"&lt;/span&gt;].&lt;span style="color: darkcyan;"&gt;ToString&lt;/span&gt;();&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;relativeUrl = relativeUrl.&lt;span style="color: darkcyan;"&gt;Split&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;'#'&lt;/span&gt;)[1]; &lt;span style="color: green;"&gt;//Get the actual url&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt; url = &lt;span style="color: blue;"&gt;string&lt;/span&gt;.&lt;span style="color: darkcyan;"&gt;Format&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;"{0}{1}"&lt;/span&gt;, row[&lt;span style="color: #a31515;"&gt;"EncodedAbsUrl"&lt;/span&gt;], relativeUrl);&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt; title = row[&lt;span style="color: #a31515;"&gt;"Title"&lt;/span&gt;].&lt;span style="color: darkcyan;"&gt;ToString&lt;/span&gt;();&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt; (&lt;span style="color: blue;"&gt;string&lt;/span&gt;.&lt;span style="color: darkcyan;"&gt;IsNullOrEmpty&lt;/span&gt;(title)) &lt;span style="color: green;"&gt;// Some content will not have a title&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;//Get title from filename without extension&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;title = row[&lt;span style="color: #a31515;"&gt;"LinkFilename2"&lt;/span&gt;].&lt;span style="color: darkcyan;"&gt;ToString&lt;/span&gt;().&lt;span style="color: darkcyan;"&gt;Split&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;'.'&lt;/span&gt;)[0];&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;//Ignore current page&lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt; (!url.&lt;span style="color: darkcyan;"&gt;EndsWith&lt;/span&gt;(&lt;span style="color: purple;"&gt;CurrentPage&lt;/span&gt;, &lt;span style="color: darkblue;"&gt;StringComparison&lt;/span&gt;.&lt;span style="color: purple;"&gt;InvariantCultureIgnoreCase&lt;/span&gt;))&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: purple;"&gt;_xmlTextWriter&lt;/span&gt;.&lt;span style="color: darkcyan;"&gt;WriteStartElement&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;"Content"&lt;/span&gt;);&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: purple;"&gt;_xmlTextWriter&lt;/span&gt;.&lt;span style="color: darkcyan;"&gt;WriteElementString&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;"Title"&lt;/span&gt;, title);&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: purple;"&gt;_xmlTextWriter&lt;/span&gt;.&lt;span style="color: darkcyan;"&gt;WriteElementString&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;"Url"&lt;/span&gt;, url);&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: purple;"&gt;_xmlTextWriter&lt;/span&gt;.&lt;span style="color: darkcyan;"&gt;WriteEndElement&lt;/span&gt;();&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;catch&lt;/span&gt; (&lt;span style="color: darkblue;"&gt;Exception&lt;/span&gt;) {&lt;span style="color: green;"&gt;/*forget about it for now}*/}&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;}&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:3b34b9dc-3d1a-48f0-a5ce-df3b1129b854" style="display: inline; float: none; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div style="border-bottom: #000080 1px solid; border-left: #000080 1px solid; border-right: #000080 1px solid; border-top: #000080 1px solid; color: black; font-family: &amp;quot;Courier New&amp;quot;, Courier, Monospace; font-size: 10pt;"&gt;&lt;div style="background: #ddd; max-height: 500px; overflow: auto;"&gt;&lt;ol style="background: #ffffff; margin: 0px 0px 0px 2.5em; padding-bottom: 0px; padding-left: 5px; padding-right: 0px; padding-top: 0px;"&gt;&lt;li&gt;&lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: darkblue;"&gt;DataTable&lt;/span&gt; &lt;span style="color: darkcyan;"&gt;QuerySite&lt;/span&gt;(&lt;span style="color: blue;"&gt;int&lt;/span&gt; wssId, &lt;span style="color: blue;"&gt;int&lt;/span&gt; baseType)&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;{&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;var&lt;/span&gt; query = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: darkblue;"&gt;SPSiteDataQuery&lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: purple;"&gt;Query&lt;/span&gt; = &lt;span style="color: darkblue;"&gt;String&lt;/span&gt;.&lt;span style="color: darkcyan;"&gt;Format&lt;/span&gt;(&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;@"&amp;lt;Where&amp;gt;&amp;lt;Eq&amp;gt;&amp;lt;FieldRef Name='TaxCatchAll' LookupId='TRUE' /&amp;gt;&amp;lt;Value Type='Lookup'&amp;gt;{0}&amp;lt;/Value&amp;gt;&amp;lt;/Eq&amp;gt;&amp;lt;/Where&amp;gt;"&lt;/span&gt;,&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;wssId),&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: purple;"&gt;Lists&lt;/span&gt; = &lt;span style="color: blue;"&gt;string&lt;/span&gt;.&lt;span style="color: darkcyan;"&gt;Format&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;"&amp;lt;Lists BaseType='{0}' /&amp;gt;"&lt;/span&gt;, baseType),&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: purple;"&gt;ViewFields&lt;/span&gt; =&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;"&amp;lt;FieldRef Name='ID' /&amp;gt;&amp;lt;FieldRef Name='LinkFilename2' /&amp;gt;&amp;lt;FieldRef Name='Title' Nullable='TRUE' Type='text' /&amp;gt;&amp;lt;FieldRef Name='FileRef' /&amp;gt;&amp;lt;FieldRef Name='EncodedAbsUrl' /&amp;gt;&amp;lt;FieldRef Name='AverageRating' Nullable='TRUE'/&amp;gt;"&lt;/span&gt;,&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: purple;"&gt;Webs&lt;/span&gt; = &lt;span style="color: #a31515;"&gt;"&amp;lt;Webs Scope='SiteCollection'/&amp;gt;"&lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: darkblue;"&gt;SPContext&lt;/span&gt;.&lt;span style="color: purple;"&gt;Current&lt;/span&gt;.&lt;span style="color: purple;"&gt;Site&lt;/span&gt;.&lt;span style="color: purple;"&gt;RootWeb&lt;/span&gt;.&lt;span style="color: darkcyan;"&gt;GetSiteData&lt;/span&gt;(query);&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;}&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;h5&gt;&lt;/h5&gt;&lt;h4&gt;Putting it all together &lt;/h4&gt;Once the basic methods are in place it’s all a matter of calling the methods and transform XML to Html using XSL. All this is available in the SourceCode which you can download from &lt;a href="http://puzzlepart.com/" target="_blank"&gt;Puzzlepart&lt;/a&gt; at the download link below.&lt;br /&gt;&lt;br /&gt;The end result is shown here as a WebPart embedded in the page, but it could easily be moved to a layout page or master page and be displayed in every site.&lt;br /&gt;&lt;a href="http://lh3.ggpht.com/_Crymsa-IOEo/TPD0K3dHIhI/AAAAAAAAAE8/J9wn5ljpg1E/s1600-h/image%5B5%5D.png"&gt;&lt;img alt="image" border="0" height="368" src="http://lh4.ggpht.com/_Crymsa-IOEo/TPD0LnGFZEI/AAAAAAAAAFA/Ok5O1hS4tBI/image_thumb%5B3%5D.png?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="523" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://pzl.no/gLY2NC" target="_blank"&gt;Download the full SourceCode&lt;/a&gt;&lt;br /&gt;&lt;h5&gt;&lt;/h5&gt;&lt;h4&gt;Potential&lt;/h4&gt;While I’ve proven how to get related contents based on the current context some algorithm should be applied to tune relevance. This could be done based on rating, modified date or even testing if similar social tags exist on the same result. &lt;br /&gt;&lt;br /&gt;One can also use social tagging as a source and mix the result based on both social tagging and Managed taxonomy fields. &lt;br /&gt;&lt;br /&gt;Enjoy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2485944830160065050-6386080038548122392?l=ogarshol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ogarshol.blogspot.com/feeds/6386080038548122392/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ogarshol.blogspot.com/2010/11/sharepoint2010-howto-use-managed.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2485944830160065050/posts/default/6386080038548122392'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2485944830160065050/posts/default/6386080038548122392'/><link rel='alternate' type='text/html' href='http://ogarshol.blogspot.com/2010/11/sharepoint2010-howto-use-managed.html' title='#SharePoint2010 #HowTo use Managed Metadata to find related content'/><author><name>Øystein Garshol</name><uri>http://www.blogger.com/profile/12841414895483895925</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_Crymsa-IOEo/SsT8Md6_jaI/AAAAAAAAAAM/ScNLuzNqUvA/S220/OYSTEIN_GARSHOL.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_Crymsa-IOEo/TPEFCDr8I8I/AAAAAAAAAFE/SWiT9Bbp94I/s72-c/great.png' height='72' width='72'/><thr:total>6</thr:total><georss:featurename>Oslo, Norway</georss:featurename><georss:point>59.9127263 10.7460924</georss:point><georss:box>59.901969300000005 10.716909900000001 59.9234833 10.7752749</georss:box></entry><entry><id>tag:blogger.com,1999:blog-2485944830160065050.post-8161963354092391231</id><published>2010-10-27T21:22:00.002+02:00</published><updated>2011-05-05T09:15:31.896+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='HowTo'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><title type='text'>#SharePoint2010 #HowTo perform unrestricted List Item Validation</title><content type='html'>&lt;h5&gt;#SharePoint2010 #HowTo Series&lt;/h5&gt;This post is the 2nd in a series of SharePoint 2010 HowTos describing not yet documented solutions to SharePoint problems I find in my life as a &lt;a href="http://puzzlepart.com/" target="_blank"&gt;Puzzlepart&lt;/a&gt; employee. This article might also be of interest to you: &lt;br /&gt;&lt;a href="http://ogarshol.blogspot.com/2010/10/sharepoint2010-howto-properly-open-pdfs.html" title="#SharePoint2010 #HowTo Properly open PDF’s in the browser"&gt;#SharePoint2010 #HowTo Properly open PDF’s in the browser&lt;/a&gt;&lt;br /&gt;&lt;h5&gt;Problem&lt;/h5&gt;For some time I’ve been teased by the new SharePoint 2010 List Item Validation setting and the other day I had a problem that I thought could be solver by using ListItem Validation:&lt;br /&gt;&lt;em&gt;“An end-user adds or edits a List Item with business data that needs to be compliant with Business Rules”&lt;/em&gt;&lt;br /&gt;Unfortunately I found List Item Validation inadequate in the first business case I could have use for it, but a Brainfart™ also provided me with an adequate workaround. &lt;br /&gt;&lt;h5&gt;&lt;a name='more'&gt;&lt;/a&gt;Common Solution&lt;/h5&gt;List Item Validation can easily be configured in SharePoint 2010 Lists. For a great sample of how Validation can be configured have a look at &lt;a href="http://www.chakkaradeep.com/post/SharePoint-2010-List-Improvements-e28093-Column-Validation-and-List-Validation-Settings.aspx" target="_blank"&gt;Chack’s post&lt;/a&gt;. Also Be aware that you can use the full set of &lt;a href="http://msdn.microsoft.com/en-us/library/bb862071.aspx" target="_blank"&gt;Calculated Field Formulas&lt;/a&gt; which is a powerful and not too document addition to common ListItem Validation. &lt;br /&gt;&lt;h5&gt;Problems with the common solution&lt;/h5&gt;As with many new features in the extensive development platform that SharePoint 2010 is there’s normally a catch. I actually wanted to perform validation on the following:&lt;br /&gt;If Tender r.b. Submitted = Yes then Project Type and Proposal Responsible&amp;nbsp; can’t be empty.&lt;br /&gt;&lt;a href="http://lh3.ggpht.com/_Crymsa-IOEo/TMnON4N-pUI/AAAAAAAAAEU/7Fzdo73rpdY/s1600-h/image%5B4%5D.png"&gt;&lt;img alt="image" border="0" height="152" src="http://lh3.ggpht.com/_Crymsa-IOEo/TMnOOeZ4CLI/AAAAAAAAAEY/QplvSZao8pA/image_thumb%5B2%5D.png?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="240" /&gt;&lt;/a&gt;&lt;br /&gt;Apparently there are many unsupported Column/Field Types for validation. So basically out of 9 fields only 4 of them can be used in a validation expression while any attempt to write column names of unsupported columns will give you an error:&lt;br /&gt;“&lt;i&gt;One or more column references are not allowed, because the columns are defined as a data type that is not supported in formulas.”&lt;/i&gt;&lt;br /&gt;&lt;a href="http://lh5.ggpht.com/_Crymsa-IOEo/TMnOO54Q52I/AAAAAAAAAEc/q55EPPKPNQo/s1600-h/image%5B12%5D.png"&gt;&lt;img alt="image" border="0" height="180" src="http://lh6.ggpht.com/_Crymsa-IOEo/TMnOPd5XP_I/AAAAAAAAAEg/KrJra3Ye1ok/image_thumb%5B5%5D.png?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="240" /&gt;&lt;/a&gt;&lt;br /&gt;At Least the following Column types can’t be used for validation:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Multipe lines of text &lt;/li&gt;&lt;li&gt;Person or Group &lt;/li&gt;&lt;li&gt;Lookup &lt;/li&gt;&lt;li&gt;Managed Metadata &lt;/li&gt;&lt;/ul&gt;&lt;h5&gt;Adequate workaround&lt;/h5&gt;When there’s a problem there’s normally also a solution. At first I wanted to see if I could use an event receiver on the content type / List Definition too do some sort of server validation and return a friendly error message. To my surprise List Item Validation is not part of the Server Object Model.&lt;br /&gt;Another thing also surprised me. List Item Validation could have been implemented by Microsoft as a part of the &lt;a href="http://blogs.msdn.com/b/sharepointpictures/archive/2010/10/07/sharepoint-foundation-2010-events-pipeline.aspx" target="_blank"&gt;eventing pipeline&lt;/a&gt;, but it’s actually performed outside of it and even worse it’s done after the Before Events (e.g ItemAdding or ItemUpdating)&lt;br /&gt;&lt;a href="http://lh4.ggpht.com/_Crymsa-IOEo/TMnOPz5f0PI/AAAAAAAAAEk/TE_crvX1Hic/s1600-h/image%5B16%5D.png"&gt;&lt;img alt="image" border="0" height="146" src="http://lh5.ggpht.com/_Crymsa-IOEo/TMnOQKQ_7AI/AAAAAAAAAEo/FUbN_jmcIbM/image_thumb%5B7%5D.png?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="240" /&gt;&lt;/a&gt;&lt;br /&gt;Luckily that also became the solution to my problem. While you could perform validation and cancel the event in the before event which would give the user an ugly error message and make him loose all his changes. The real simple solution is to add a Field to the list which is invisible to the end user&lt;br /&gt;&lt;div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:07c8aed8-8bc6-4270-82ff-ffd034f7cf26" style="display: inline; float: none; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div style="border-bottom: #000080 1px solid; border-left: #000080 1px solid; border-right: #000080 1px solid; border-top: #000080 1px solid; color: black; font-family: &amp;quot;Courier New&amp;quot;, Courier, Monospace; font-size: 10pt;"&gt;&lt;div style="background: #ddd; max-height: 500px; overflow: auto;"&gt;&lt;ol style="background: #ffffff; margin: 0px 0px 0px 2.5em; padding-bottom: 0px; padding-left: 5px; padding-right: 0px; padding-top: 0px;"&gt;&lt;li&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Field&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Type&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;Boolean&lt;/span&gt;"&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;DisplayName&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;IsValid&lt;/span&gt;"&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;EnforceUniqueValues&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;FALSE&lt;/span&gt;"&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;Indexed&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;FALSE&lt;/span&gt;"&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"{&lt;span style="color: blue;"&gt;18ae8eb2-a353-445c-a4dc-2024884539bd}&lt;/span&gt;"&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;SourceID&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"{&lt;span style="color: blue;"&gt;ca6f2a2a-53ed-49a9-8cbc-fbcc94400ec7}&lt;/span&gt;"&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;StaticName&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;IsValid&lt;/span&gt;"&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;Name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;IsValid&lt;/span&gt;"&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;ColName&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;bit1&lt;/span&gt;"&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;RowOrdinal&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;0&lt;/span&gt;"&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;ShowInEditForm&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;FALSE&lt;/span&gt;"&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;ShowInListSettings&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;FALSE&lt;/span&gt;"&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;ShowInNewForm&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;FALSE&lt;/span&gt;"&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;ShowInVersionHistory&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;FALSE&lt;/span&gt;"&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;ShowInViewForms&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;TRUE&lt;/span&gt;"&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;ShowInDisplayForm&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;TRUE&lt;/span&gt;"&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;Version&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;1&lt;/span&gt;"&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;Overwrite&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;TRUE&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Default&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;1&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Default&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Field&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;In any before event create your own Validation Method which only have your coding skill/imagination as limits but which will toogle the IsValid column to a false state.&lt;br /&gt;&lt;div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:562c6a60-654d-46ca-8aa4-c50cb40a4ce7" style="display: inline; float: none; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div style="border-bottom: #000080 1px solid; border-left: #000080 1px solid; border-right: #000080 1px solid; border-top: #000080 1px solid; color: black; font-family: &amp;quot;Courier New&amp;quot;, Courier, Monospace; font-size: 10pt;"&gt;&lt;div style="background: #ddd; max-height: 500px; overflow: auto;"&gt;&lt;ol style="background: #ffffff; margin: 0px 0px 0px 2.5em; padding-bottom: 0px; padding-left: 5px; padding-right: 0px; padding-top: 0px; white-space: nowrap;"&gt;&lt;li&gt;&lt;span style="color: green;"&gt;//Be aware: I use a lot of extension methods to hide som undesired SharePoint complexity&lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: green;"&gt;//from business rules so this wan't compile without those methods&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;bool&lt;/span&gt; ValidEnquiry(&lt;span style="color: #2b91af;"&gt;SPItemEventProperties&lt;/span&gt; properties)&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;{&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt; (properties.GetListItemBoolean(&lt;span style="color: #2b91af;"&gt;ColumnNames&lt;/span&gt;.&lt;span style="color: #2b91af;"&gt;Enquiries&lt;/span&gt;.TenderToBeSubmitted) &amp;amp;&amp;amp;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(properties.AfterProperties.IsNullOrEmpty(&lt;span style="color: #2b91af;"&gt;ColumnNames&lt;/span&gt;.&lt;span style="color: #2b91af;"&gt;Enquiries&lt;/span&gt;.DisciplineReference) ||&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;properties.AfterProperties.IsNullOrEmpty(&lt;span style="color: #2b91af;"&gt;ColumnNames&lt;/span&gt;.&lt;span style="color: #2b91af;"&gt;Enquiries&lt;/span&gt;.ProposalResponsible)))&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;properties.AfterProperties[&lt;span style="color: #2b91af;"&gt;ColumnNames&lt;/span&gt;.&lt;span style="color: #2b91af;"&gt;Enquiries&lt;/span&gt;.IsValid] = &lt;span style="color: #a31515;"&gt;"0"&lt;/span&gt;;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;false&lt;/span&gt;;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;true&lt;/span&gt;;&lt;/li&gt;&lt;li&gt;}&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;In the validation settings formula enter =IsValid=”Yes” and a nicely formulated user message&lt;br /&gt;&lt;a href="http://lh5.ggpht.com/_Crymsa-IOEo/TMnOQv-hotI/AAAAAAAAAEs/0qNMPtxf1Dw/s1600-h/image%5B20%5D.png"&gt;&lt;img alt="image" border="0" height="225" src="http://lh5.ggpht.com/_Crymsa-IOEo/TMnOQ6qMhAI/AAAAAAAAAEw/8-voNM41OpY/image_thumb%5B9%5D.png?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="240" /&gt;&lt;/a&gt;&lt;br /&gt;End result when I forgot to enter proposal responsible:&lt;br /&gt;&lt;a href="http://lh3.ggpht.com/_Crymsa-IOEo/TMnORZW83OI/AAAAAAAAAE0/rtoa_6bkE8U/s1600-h/image%5B24%5D.png"&gt;&lt;img alt="image" border="0" height="200" src="http://lh3.ggpht.com/_Crymsa-IOEo/TMnOSfaoPTI/AAAAAAAAAE4/lPnKsfrxWHg/image_thumb%5B11%5D.png?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="240" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;h5&gt;Conclusion&lt;/h5&gt;Adequate workaround but requires coding, proper deployment unit’s etc but Highly required for medium complex scenarios. Enjoy&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2485944830160065050-8161963354092391231?l=ogarshol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ogarshol.blogspot.com/feeds/8161963354092391231/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ogarshol.blogspot.com/2010/10/sharepoint2010-howto-perform.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2485944830160065050/posts/default/8161963354092391231'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2485944830160065050/posts/default/8161963354092391231'/><link rel='alternate' type='text/html' href='http://ogarshol.blogspot.com/2010/10/sharepoint2010-howto-perform.html' title='#SharePoint2010 #HowTo perform unrestricted List Item Validation'/><author><name>Øystein Garshol</name><uri>http://www.blogger.com/profile/12841414895483895925</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_Crymsa-IOEo/SsT8Md6_jaI/AAAAAAAAAAM/ScNLuzNqUvA/S220/OYSTEIN_GARSHOL.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_Crymsa-IOEo/TMnOOeZ4CLI/AAAAAAAAAEY/QplvSZao8pA/s72-c/image_thumb%5B2%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2485944830160065050.post-876815077878640009</id><published>2010-10-12T20:35:00.004+02:00</published><updated>2011-05-05T09:15:55.878+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='HowTo'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><title type='text'>#SharePoint2010 #HowTo Properly open PDF’s in the browser</title><content type='html'>It’s been a while since my last post. Since then I’ve had a great time working @ &lt;a href="http://puzzlepart.com/" target="_blank"&gt;Puzzlepart&lt;/a&gt; where I get to do loads of interesting consulting work while progressing towards our mission of becoming a game changer in the enterprise software space. &lt;br /&gt;This post is the first in (hopefully) a series of SharePoint 2010 HowTos.&lt;br /&gt;&lt;h4&gt;Problem&lt;/h4&gt;SharePoint 2010 doesn’t have an icon for PDF’s and prompts you to save the file instead of displaying it in the browser window that most users will expect it to do.&lt;br /&gt;&lt;h4&gt;&lt;a name='more'&gt;&lt;/a&gt;Common Solution&lt;/h4&gt;&lt;ol&gt;&lt;li&gt;Download pdficon_small.gif (17*17) from &lt;a href="http://www.adobe.com/misc/linking.html" title="http://www.adobe.com/misc/linking.html"&gt;Adobe&lt;/a&gt; and copy it to :\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\IMAGES &lt;/li&gt;&lt;li&gt;Change :\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\XML\DOCICON.XML by inserting&amp;nbsp; the snippet below within the ByExtension section &lt;div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:fd32c2f1-6db7-45c4-91d6-2eb965f86e92" style="display: inline; float: none; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div style="border-bottom: #000080 1px solid; border-left: #000080 1px solid; border-right: #000080 1px solid; border-top: #000080 1px solid; color: black; font-family: &amp;quot;Courier New&amp;quot;, Courier, Monospace; font-size: 10pt;"&gt;&lt;div style="background: #fff; max-height: 300px; overflow: auto;"&gt;&lt;ol style="background: #ffffff; margin: 0px; padding-bottom: 0px; padding-left: 5px; padding-right: 0px; padding-top: 0px; white-space: nowrap;"&gt;&lt;li&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Mapping&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Key&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;pdf&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;Value&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;pdficon_small.gif&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;Change Browser File handling to Permissive in Central Admin &amp;gt; Manage web applications &amp;gt; Your App &amp;gt; General settings &lt;br /&gt;&lt;a href="http://lh6.ggpht.com/_Crymsa-IOEo/TLSqWKI1thI/AAAAAAAAAEM/8MWHxI0bHQ0/s1600-h/image2.png"&gt;&lt;img alt="image" border="0" height="229" src="http://lh5.ggpht.com/_Crymsa-IOEo/TLSqWglW47I/AAAAAAAAAEQ/Jcy1pfsS7NE/image_thumb.png?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="244" /&gt;&lt;/a&gt; &lt;/li&gt;&lt;/ol&gt;&lt;strong&gt;Problems with the common solution&lt;/strong&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Permissive setting is a potential security risk and should probably not be a general setting &lt;/li&gt;&lt;li&gt;Existing document libraries are not effected. &lt;/li&gt;&lt;li&gt;Template Document libraries are not effected &lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;Proper Solution&lt;/h4&gt;You should avoid setting Browser File Handling to Permissive on a general basis. If your SharePoint site uses any form of List Template Definitions or List Instances specified in XML and deployed by WSP files you can leave the default Strict Behavior and instead concentrating on identifying which libraries that should allow Permissive File Handling. &lt;br /&gt;It’s possible to define BrowserFileHandling in the List Definition or List Instance Schema. Which I find appropriate for scenarios where you handle e.g. incoming documents differently from you working word documents. Be aware that the BrowserFileHandling attribute is not specified in &lt;a href="http://msdn.microsoft.com/en-us/library/ms415091.aspx" target="_blank" title="http://msdn.microsoft.com/en-us/library/ms415091.aspx"&gt;List Element&lt;/a&gt;, but still it works.&lt;br /&gt;&lt;div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:5fda9c7c-763e-416e-a7bb-8c0072bb7566" style="display: inline; float: none; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div style="border-bottom: #000080 1px solid; border-left: #000080 1px solid; border-right: #000080 1px solid; border-top: #000080 1px solid; color: black; font-family: &amp;quot;Courier New&amp;quot;, Courier, Monospace; font-size: 10pt;"&gt;&lt;div style="background: #000080; color: white; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding-bottom: 2px; padding-left: 5px; padding-right: 5px; padding-top: 2px;"&gt;schema.xml&lt;/div&gt;&lt;div style="background: #ddd; max-height: 300px; overflow: auto;"&gt;&lt;ol style="background: #ffffff; margin: 0px 0px 0px 2em; padding-bottom: 0px; padding-left: 5px; padding-right: 0px; padding-top: 0px;"&gt;&lt;li&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;List&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;xmlns:ows&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;Microsoft SharePoint&lt;/span&gt;"&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;Title&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;$Resources:shareddocuments_Title;&lt;/span&gt;"&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;Direction&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;$Resources:Direction;&lt;/span&gt;"&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;Url&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;References&lt;/span&gt;"&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;BaseType&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;1&lt;/span&gt;"&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;EnableContentTypes&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;TRUE&lt;/span&gt;"&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;BrowserFileHandling&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;Permissive&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;...&lt;/li&gt;&lt;li&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;List&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;h5&gt;Peculiarity &lt;/h5&gt;I’ve found that even though the list definition is correct and instances of that list is created in a site is Permissive if inspected and export of that site as a template will result in new instances of the templated site to be created with lists with incorrect BrowserFileHandling settings.This also applies when the entire Web Application is set to be Permissive, which really puzzled me. I’m considering it a bug in SharePoint&lt;br /&gt;The only workaround is to import the WSP to Visual Studio, change the List elements in the schema or optionally control creation of Lists or sites in an event receiver and update it in code, which really shouldn’t be necessary.&lt;br /&gt;&lt;div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:18951a38-58d9-43a3-ac8a-9f014790661c" style="display: inline; float: none; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div style="border-bottom: #000080 1px solid; border-left: #000080 1px solid; border-right: #000080 1px solid; border-top: #000080 1px solid; color: black; font-family: &amp;quot;Courier New&amp;quot;, Courier, Monospace; font-size: 10pt;"&gt;&lt;div style="background: #000080; color: white; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding-bottom: 2px; padding-left: 5px; padding-right: 5px; padding-top: 2px;"&gt;Event Receiver Function&lt;/div&gt;&lt;div style="background: #ddd; max-height: 200px; overflow: auto;"&gt;&lt;ol style="background: #ffffff; margin: 0px 0px 0px 2em; padding-bottom: 0px; padding-left: 5px; padding-right: 0px; padding-top: 0px;"&gt;&lt;li&gt;&lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; SetListPermissive(&lt;span style="color: #2b91af;"&gt;SPList&lt;/span&gt; list)&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;{&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt; (list &lt;span style="color: blue;"&gt;is&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;SPDocumentLibrary&lt;/span&gt; &amp;amp;&amp;amp; &lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.BrowserFileHandling != &lt;span style="color: #2b91af;"&gt;SPBrowserFileHandling&lt;/span&gt;.Permissive)&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.BrowserFileHandling = &lt;span style="color: #2b91af;"&gt;SPBrowserFileHandling&lt;/span&gt;.Permissive;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.Update();&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li&gt;}&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2485944830160065050-876815077878640009?l=ogarshol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ogarshol.blogspot.com/feeds/876815077878640009/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ogarshol.blogspot.com/2010/10/sharepoint2010-howto-properly-open-pdfs.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2485944830160065050/posts/default/876815077878640009'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2485944830160065050/posts/default/876815077878640009'/><link rel='alternate' type='text/html' href='http://ogarshol.blogspot.com/2010/10/sharepoint2010-howto-properly-open-pdfs.html' title='#SharePoint2010 #HowTo Properly open PDF’s in the browser'/><author><name>Øystein Garshol</name><uri>http://www.blogger.com/profile/12841414895483895925</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_Crymsa-IOEo/SsT8Md6_jaI/AAAAAAAAAAM/ScNLuzNqUvA/S220/OYSTEIN_GARSHOL.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_Crymsa-IOEo/TLSqWglW47I/AAAAAAAAAEQ/Jcy1pfsS7NE/s72-c/image_thumb.png?imgmax=800' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2485944830160065050.post-5641393820359191361</id><published>2010-05-25T13:00:00.007+02:00</published><updated>2011-05-05T09:16:14.201+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='RIA Services'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>WCF RIA Services 1.0 for SharePoint 2010 Part II</title><content type='html'>In &lt;a href="http://ogarshol.blogspot.com/2010/05/wcf-ria-services-10-for-sharepoint-2010.html"&gt;WCF RIA Services 1.0 for SharePoint 2010 Part I&lt;/a&gt; I outlined the goals I wanted to reach and gave a walkthrough on how to setup the initial solution. This post will show how to setup a SharePoint project for hosting the service, how to change the client factory to connect to SharePoint and how to be able to package and deploy the solution in one step.&lt;br /&gt;&lt;h4&gt;&lt;a name='more'&gt;&lt;/a&gt;Changing the current solution to support SharePoint hosting&lt;/h4&gt;This section will show how to change the existing solution to enable SharePoint hosting of the WCF Service created in &lt;a href="http://ogarshol.blogspot.com/2010/05/wcf-ria-services-10-for-sharepoint-2010.html"&gt;Part I&lt;/a&gt; of this post, and package and deploy everything nicely. &lt;br /&gt;Although the &lt;a href="http://msdn.microsoft.com/en-us/library/ee544361(v=office.14).aspx" target="_blank"&gt;SharePoint Client API&lt;/a&gt; is a good idea for many things I want to achieve abstraction of the underlying system for developing business applications with a smoother Silverlight development experience.&lt;br /&gt;&lt;h5&gt;Setting up the SharePoint project&lt;/h5&gt;Add a new Empty SharePoint project to the solution, select Deploy as a Farm solution, Custom WCF Services cannot be deployed in a sandbox solution.&lt;br /&gt;&lt;table border="0" cellpadding="2" cellspacing="0" style="width: 400px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;&lt;a href="http://lh4.ggpht.com/_Crymsa-IOEo/S_utrnuGALI/AAAAAAAAADM/hvSIzB982WM/s1600-h/image%5B11%5D.png"&gt;&lt;img alt="image" border="0" height="181" src="http://lh3.ggpht.com/_Crymsa-IOEo/S_utsKRrWWI/AAAAAAAAADQ/30PeYgfaQM8/image_thumb%5B5%5D.png?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline;" title="image" width="291" /&gt;&lt;/a&gt; &lt;/td&gt;&lt;td valign="top" width="200"&gt;&lt;a href="http://lh5.ggpht.com/_Crymsa-IOEo/S_uttCxpCEI/AAAAAAAAADU/MlWHouutg5s/s1600-h/image%5B14%5D.png"&gt;&lt;img alt="image" border="0" height="175" src="http://lh4.ggpht.com/_Crymsa-IOEo/S_uttlw-DdI/AAAAAAAAADY/zDLJdGnoqow/image_thumb%5B6%5D.png?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline;" title="image" width="244" /&gt;&lt;/a&gt; &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Enable Silverlight debugging in the project properties and make sure that Auto-retract is checked&lt;br /&gt;&lt;a href="http://lh6.ggpht.com/_Crymsa-IOEo/S_utt-I7iHI/AAAAAAAAADc/1vbYb1eqCN8/s1600-h/image%5B23%5D.png"&gt;&lt;img alt="image" border="0" height="47" src="http://lh6.ggpht.com/_Crymsa-IOEo/S_utu47HymI/AAAAAAAAADg/zhngNckKDhQ/image_thumb%5B9%5D.png?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline;" title="image" width="244" /&gt;&lt;/a&gt; &lt;br /&gt;Add SharePoint mapped ISAPI and LAYOUTS folder, create a Subfolder within the ISAPI folder named Pzl.Service. &lt;br /&gt;Copy the svc file from the Web folder to the Pzl.Service folder and change it by adding a Factory attribute and specifying the Service assembly&lt;br /&gt;&lt;div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:b4eab426-87b5-4f0a-9bc8-dddee2f340ce" style="display: inline; float: none; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div style="border-bottom: #000080 1px solid; border-left: #000080 1px solid; border-right: #000080 1px solid; border-top: #000080 1px solid; color: black; font-family: &amp;quot;Courier New&amp;quot;, Courier, Monospace; font-size: 10pt;"&gt;&lt;div style="background: #ddd; overflow: auto;"&gt;&lt;ol style="background: #ffffff; margin: 0px 0px 0px 2em; padding-bottom: 0px; padding-left: 5px; padding-right: 0px; padding-top: 0px;"&gt;&lt;li&gt;&lt;span style="background: #ffff00;"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color: blue;"&gt;@&lt;/span&gt; &lt;span style="color: maroon;"&gt;ServiceHost&lt;/span&gt; &lt;span style="color: red;"&gt;Language&lt;/span&gt;&lt;span style="color: blue;"&gt;="C#"&lt;/span&gt; &lt;span style="color: red;"&gt;Debug&lt;/span&gt;&lt;span style="color: blue;"&gt;="true"&lt;/span&gt; &lt;span style="color: red;"&gt;Factory&lt;/span&gt;&lt;span style="color: blue;"&gt;="Microsoft.SharePoint.Client.Services.MultipleBaseAddressBasicHttpBindingServiceHostFactory, &lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: blue;"&gt;Microsoft.SharePoint.Client.ServerRuntime, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: red;"&gt;Service&lt;/span&gt;&lt;span style="color: blue;"&gt;="Pzl.SilverlightSharePoint.Service.WebContextService, Pzl.SilverlightSharePoint.Service, Version=1.0.0.0, Culture=neutral, PublicKeyToken=684a49e2a9ebe594"&lt;/span&gt; &lt;span style="background: #ffff00;"&gt;%&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;The project should now look like this:&lt;br /&gt;&lt;a href="http://lh6.ggpht.com/_Crymsa-IOEo/S_utvnCwxwI/AAAAAAAAADk/0-tUL471h3k/s1600-h/image%5B20%5D.png"&gt;&lt;img alt="image" border="0" height="202" src="http://lh3.ggpht.com/_Crymsa-IOEo/S_utv_yg4yI/AAAAAAAAADo/RQMDCBQOvVc/image_thumb%5B8%5D.png?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline;" title="image" width="244" /&gt;&lt;/a&gt; &lt;br /&gt;Change the Service project by adding references to “Microsoft.SharePoint.Client.ServerRuntime” and Microsoft.SharePoint. Change the ServiceImplementation by adding the BasicHttpBindingServiceMetadataExchangeEndpoint attribute and set the RequirementsMode to Required. Implement some logic that utilizes the SharePoint OM&lt;br /&gt;&lt;div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:dcb51b24-0bcc-41c4-b545-7ffb282ff7ea" style="display: inline; float: none; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div style="border-bottom: #000080 1px solid; border-left: #000080 1px solid; border-right: #000080 1px solid; border-top: #000080 1px solid; color: black; font-family: &amp;quot;Courier New&amp;quot;, Courier, Monospace; font-size: 10pt;"&gt;&lt;div style="background: #ddd; overflow: auto;"&gt;&lt;ol style="background: #ffffff; margin: 0px 0px 0px 2.5em; padding-bottom: 0px; padding-left: 5px; padding-right: 0px; padding-top: 0px;"&gt;&lt;li&gt;[&lt;span style="color: #2b91af;"&gt;BasicHttpBindingServiceMetadataExchangeEndpoint&lt;/span&gt;]&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;span style="color: #2b91af;"&gt;AspNetCompatibilityRequirements&lt;/span&gt;(RequirementsMode = &lt;span style="color: #2b91af;"&gt;AspNetCompatibilityRequirementsMode&lt;/span&gt;.Required)]&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;WebContextService&lt;/span&gt; : &lt;span style="color: #2b91af;"&gt;IWebContextService&lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;WebContextInfo&lt;/span&gt; GetWebContextInfo()&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;WebContextInfo&lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Title = &lt;span style="color: #2b91af;"&gt;SPContext&lt;/span&gt;.Current != &lt;span style="color: blue;"&gt;null&lt;/span&gt; ? &lt;span style="color: #2b91af;"&gt;SPContext&lt;/span&gt;.Current.Web.Title : &lt;span style="color: #a31515;"&gt;"Not in SharePoint context"&lt;/span&gt;,&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Url = &lt;span style="color: #2b91af;"&gt;SPContext&lt;/span&gt;.Current != &lt;span style="color: blue;"&gt;null&lt;/span&gt; ? &lt;span style="color: #2b91af;"&gt;SPContext&lt;/span&gt;.Current.Web.Url : &lt;span style="color: blue;"&gt;string&lt;/span&gt;.Empty&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;Enter the Package.package file and Add the Service Assembly from project output. We’ll deploy to GAC for now. Make sure to sign the Service project with a strong name key to allow GAC deployment.&lt;br /&gt;&lt;a href="http://lh3.ggpht.com/_Crymsa-IOEo/S_utwgCNi3I/AAAAAAAAADs/3m1n_2v-x9k/s1600-h/image%5B17%5D.png"&gt;&lt;img alt="image" border="0" height="244" src="http://lh5.ggpht.com/_Crymsa-IOEo/S_utxHmpR7I/AAAAAAAAADw/ZUlRUC7Vw-Y/image_thumb%5B7%5D.png?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline;" title="image" width="226" /&gt;&lt;/a&gt; &lt;br /&gt;You should now be able to deploy the SharePoint project and test the url in the browser by entering: http://yourserver&lt;yoursharepointserver&gt;/_vti_bin/Pzl.Service/WebContextService.svc/MEX&lt;br /&gt;&lt;blockquote&gt;NOTE: deploying the Service project to GAC has an important side effect in the auto generation of client proxy in the Silverlight project since GAC deployed assemblies will supersede the local files. Retract the SharePoint package before doing any interface changes or local testing. &lt;/blockquote&gt;&lt;h5&gt;Changing the client factory&lt;/h5&gt;In order for the Silverlight app to be able to communicate with the SharePoint Deployed WCF service the ServiceClientFactory from &lt;a href="http://www.blogger.com/WCF%20RIA%20Services%201.0%20for%20SharePoint%202010%20Part%20I"&gt;Part I&lt;/a&gt; needs to change slightly for two reasons:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;binaryMessageEncoding is not (to my knowledge) supported without having to configure the serviceModel in the SharePoint web.config&lt;/li&gt;&lt;li&gt;The endpoint address defined in ServiceReferences.ClientConfig needs to point to the site that will host the Silverlight app.&lt;/li&gt;&lt;/ol&gt;Luckily the OOB Silverlight webpart always provides an Initparam to the current Web so It’s possible for the factory class to be aware of it’s deployment location. I changed the ServiceClientFactory to change the default binding and endpoint address. The Factory will support multiple services as long as they are deployed to the same folder within the ISAPI mapped folder.&lt;br /&gt;&lt;div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:0444accf-291e-4cee-8f58-7210157d1c27" style="display: inline; float: none; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div style="border-bottom: #000080 1px solid; border-left: #000080 1px solid; border-right: #000080 1px solid; border-top: #000080 1px solid; color: black; font-family: &amp;quot;Courier New&amp;quot;, Courier, Monospace; font-size: 10pt;"&gt;&lt;div style="background: #ddd; overflow: auto;"&gt;&lt;ol style="background: #ffffff; margin: 0px 0px 0px 2.5em; padding-bottom: 0px; padding-left: 5px; padding-right: 0px; padding-top: 0px;"&gt;&lt;li&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;ServiceClientFactory&lt;/span&gt; : &lt;span style="color: #2b91af;"&gt;IApplicationService&lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;const&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; MsSpUrlKey = &lt;span style="color: #a31515;"&gt;"MS.SP.url"&lt;/span&gt;;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;ServiceClientFactory&lt;/span&gt; Current { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Dictionary&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;String&lt;/span&gt;, &lt;span style="color: #2b91af;"&gt;String&lt;/span&gt;&amp;gt; InitParams { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;#region&lt;/span&gt; IApplicationService Members&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; StartService(&lt;span style="color: #2b91af;"&gt;ApplicationServiceContext&lt;/span&gt; context)&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Current = &lt;span style="color: blue;"&gt;this&lt;/span&gt;;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;InitParams = context.ApplicationInitParams;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; StopService()&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li&gt;&amp;nbsp;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;#endregion&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt; TClient CreateClient&amp;lt;TClient, T&amp;gt;()&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;where&lt;/span&gt; TClient : &lt;span style="color: #2b91af;"&gt;ClientBase&lt;/span&gt;&amp;lt;T&amp;gt;, &lt;span style="color: blue;"&gt;new&lt;/span&gt;()&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;where&lt;/span&gt; T : &lt;span style="color: blue;"&gt;class&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;var&lt;/span&gt; client = &lt;span style="color: blue;"&gt;new&lt;/span&gt; TClient();&lt;/li&gt;&lt;li&gt;&amp;nbsp;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt; (InitParams.ContainsKey(MsSpUrlKey))&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;var&lt;/span&gt; binding = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;BasicHttpBinding&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;BasicHttpSecurityMode&lt;/span&gt;.TransportCredentialOnly)&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MaxReceivedMessageSize = &lt;span style="color: blue;"&gt;int&lt;/span&gt;.MaxValue,&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MaxBufferSize = &lt;span style="color: blue;"&gt;int&lt;/span&gt;.MaxValue&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;/li&gt;&lt;li&gt;&amp;nbsp;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;client.Endpoint.Binding = binding;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;var&lt;/span&gt; serviceEndPointPath = client.Endpoint.Address.Uri.GetComponents(&lt;span style="color: #2b91af;"&gt;UriComponents&lt;/span&gt;.Path, &lt;span style="color: #2b91af;"&gt;UriFormat&lt;/span&gt;.Unescaped);&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;var&lt;/span&gt; currentSite = &lt;span style="color: #2b91af;"&gt;Uri&lt;/span&gt;.UnescapeDataString(InitParams[MsSpUrlKey]);&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;client.Endpoint.Address =&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;EndpointAddress&lt;/span&gt;(&lt;span style="color: blue;"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #a31515;"&gt;@"{0}/_vti_bin/Pzl.Service/{1}"&lt;/span&gt;, currentSite, serviceEndPointPath));&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt; client;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;No further changes are required to the Silverlight app, and it will work perfect both hosted in SharePoint and running locally in the web dev server.&lt;br /&gt;&lt;h5&gt;Preparing the package&lt;/h5&gt;To finalize the solution the XAP file has to be copied to the SharePoint project for packaging and deployment. This is easiest to achieve by adding a Pre-build event to the SharePoint project and setting a project dependency to the Web project to ensure the latest XAP file is present upon build:&lt;br /&gt;&lt;table border="0" cellpadding="2" cellspacing="0" style="width: 570px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;&lt;a href="http://lh6.ggpht.com/_Crymsa-IOEo/S_utynX4uGI/AAAAAAAAAD0/KEmg85rQEpQ/s1600-h/image%5B26%5D.png"&gt;&lt;img alt="image" border="0" height="154" src="http://lh4.ggpht.com/_Crymsa-IOEo/S_utzdnLcvI/AAAAAAAAAD4/oR5vqxG2Vu0/image_thumb%5B10%5D.png?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline;" title="image" width="244" /&gt;&lt;/a&gt; &lt;/td&gt;&lt;td valign="top" width="368"&gt;&lt;pre class="csharpcode"&gt;copy &lt;span class="str"&gt;"$(SolutionDir)Pzl.SilverlightSharePoint.App.Web\ClientBin\"*.xap  "&lt;/span&gt;$(ProjectDir)\Layouts\Pzl.SilverlightSharePoint" /Y&lt;/pre&gt;&lt;br /&gt;&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;Next add a Silverlight WebPart to any web in your target SharePoint server and configure the url to the xap to be _layouts/Pzl.SilverlightSharePoint/Pzl.SilverlightSharePoint.App.xap&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Test it and it could look something like this:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://lh5.ggpht.com/_Crymsa-IOEo/S_ut0OCVW_I/AAAAAAAAAD8/jr_CkikXxTc/s1600-h/image%5B30%5D.png"&gt;&lt;img alt="image" border="0" height="143" src="http://lh5.ggpht.com/_Crymsa-IOEo/S_ut0qDXBzI/AAAAAAAAAEA/b73rcgF1C08/image_thumb%5B12%5D.png?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline;" title="image" width="338" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;Debugging the service and Silverlight App is possible, for the smoothest experience set Start Action in the SharePoint project to “Start browser with URL” and enter the Url to the SharePoint Page with your SilverLight WebPart. Set the SharePoint Project to you startup project and Hit F5 (and you’re done)&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Conclusion&lt;/h4&gt;I have demonstrated how to get some of the WCF RIA Services development experience in Silverlight for SharePoint deployment. Although there are many features unavailable in this context I feel I’ve found a nice workaround on a few key concepts and made it possible to develop Silverlight apps capable of leveraging SharePoint concepts and list data without having to know the SharePoint (Client) Object Model for everyone in the development team.&lt;br /&gt;&lt;h5&gt;Pros&lt;/h5&gt;&lt;ul&gt;&lt;li&gt;Reusable WCF Services for other clients &lt;/li&gt;&lt;li&gt;Smooth development&amp;nbsp; &lt;/li&gt;&lt;ul&gt;&lt;li&gt;Build and and auto generate client proxies&lt;/li&gt;&lt;li&gt;Testable without SharePoint installed&lt;/li&gt;&lt;li&gt;Deploy in one step, no config required&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;SharePoint not necessary to develop basic features, mocking required&lt;/li&gt;&lt;/ul&gt;&lt;h5&gt;Cons&lt;/h5&gt;&lt;ul&gt;&lt;li&gt;Not really utilizing WCF RIA Services Runtime&lt;/li&gt;&lt;li&gt;DataAnnotation/MetaData generation is not currently supported. &lt;a href="http://dotnet.uservoice.com/forums/57026-wcf-ria-services/suggestions/778121-ria-services-toolkit-wcf-core-services-proxy-auto-" target="_blank"&gt;Vote for it here&lt;/a&gt;&lt;/li&gt;&lt;li&gt;BinaryMessageEncoding is not supported&lt;/li&gt;&lt;li&gt;SandBoxed solution not possible for custom WCF Services&lt;/li&gt;&lt;li&gt;GAC’ed assemblies has unwanted side effects and should be avoided.&lt;/li&gt;&lt;/ul&gt;&lt;a href="http://pzl.no/bqTmjL" target="_blank"&gt;Download Source Code here&lt;/a&gt;, hope my effort will be appreciated.&lt;br /&gt;&lt;br /&gt;NOTE: Make sure to set Site Url in the SharePoint project properties to your server url, before attempting to deploy the SharePoint package.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2485944830160065050-5641393820359191361?l=ogarshol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ogarshol.blogspot.com/feeds/5641393820359191361/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ogarshol.blogspot.com/2010/05/wcf-ria-services-10-for-sharepoint-2010_25.html#comment-form' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2485944830160065050/posts/default/5641393820359191361'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2485944830160065050/posts/default/5641393820359191361'/><link rel='alternate' type='text/html' href='http://ogarshol.blogspot.com/2010/05/wcf-ria-services-10-for-sharepoint-2010_25.html' title='WCF RIA Services 1.0 for SharePoint 2010 Part II'/><author><name>Øystein Garshol</name><uri>http://www.blogger.com/profile/12841414895483895925</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_Crymsa-IOEo/SsT8Md6_jaI/AAAAAAAAAAM/ScNLuzNqUvA/S220/OYSTEIN_GARSHOL.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_Crymsa-IOEo/S_utsKRrWWI/AAAAAAAAADQ/30PeYgfaQM8/s72-c/image_thumb%5B5%5D.png?imgmax=800' height='72' width='72'/><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2485944830160065050.post-5938407133885445912</id><published>2010-05-24T23:57:00.005+02:00</published><updated>2011-05-05T09:16:32.869+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='RIA Services'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>WCF RIA Services 1.0 for SharePoint 2010 Part I</title><content type='html'>After randomly following the various builds of WCF RIA Services the past 7-8 months I have grown to be found of many of the concepts introduced in WCF RIA Services and was very &lt;a href="http://ogarshol.blogspot.com/2010/04/sharepoint-hosted-wcf-ria-services-rip.html" target="_blank"&gt;sad&lt;/a&gt; to see that RIA Services v1.0 only supports the .NET 4.0 runtime which effectively excludes usage from SharePoint 2007/2010.&lt;br /&gt;The main concepts with RIA Services I enjoyed were:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Speeding up development by &lt;/li&gt;&lt;ul&gt;&lt;li&gt;Auto generating proxies&lt;/li&gt;&lt;li&gt;No server endpoint config &lt;/li&gt;&lt;li&gt;No client endpoint config&lt;/li&gt;&lt;li&gt;Easily debugging both client and server applications&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;DataAnnotation / Metadata&lt;/li&gt;&lt;li&gt;Deployment leaves no server config footprint&lt;/li&gt;&lt;/ul&gt;&lt;a name='more'&gt;&lt;/a&gt;All very powerful concepts for creating real business applications if combined with the possibility to mock or replace the datasource (currently SharePoint) in the service.&lt;br /&gt;I almost gave up the idea of having some development framework support until reading &lt;a href="http://blogs.msdn.com/wcftoolsteamblog/archive/2010/05/17/a-walk-through-on-silverlight-ria-service-toolkit-new-feature-wcf-client-proxy-auto-generation-updating-for-wcf-core-service.aspx" target="_blank"&gt;A Walk-Through on “WCF RIA Service Toolkit May 2010” New Feature: WCF Client Proxy Auto Generation/Updating for WCF Core Service&lt;/a&gt; and &lt;a href="http://www.sharepointbits.com/blog/custom-wcf-services-in-sharepoint-2010.html" target="_blank"&gt;Custom WCF Services in SharePoint 2010&lt;/a&gt;&lt;br /&gt;Combining the possibilities outlined in those posts gave me an idea on how to support a few of the key concepts from WCF RIA Services and i defined a few goals on how I wanted the development experience:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Being able to build Silverlight apps for SharePoint deployment utilizing the power of SharePoint while abstracting the SharePoint DOM &lt;/li&gt;&lt;li&gt;Building and debugging client and Business Logic without deploying to SharePoint &lt;/li&gt;&lt;li&gt;Auto-generation of client proxies &lt;/li&gt;&lt;li&gt;Easy SharePoint deployment and debugging of service and SilverLight Application&lt;/li&gt;&lt;/ol&gt;&lt;h4&gt;Setting up the solution outline&lt;/h4&gt;&lt;h5&gt;Prerequisites &lt;/h5&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://go.microsoft.com/fwlink/?LinkID=177508" target="_blank"&gt;WCF RIA Services v1.0&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=c4f02797-5f9e-4acf-a7dc-c5ded53960a6&amp;amp;displaylang=en" target="_blank"&gt;WCF RIA Services Toolkit May 2010&lt;/a&gt;&amp;nbsp;Update: Also works with &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=a23325ef-7b1f-4c92-9fd5-ffee48f7c7bc"&gt;WCF RIA Services Toolkit October 2010&lt;/a&gt; &lt;/li&gt;&lt;/ul&gt;I always start with an empty solution, and then add projects to it. Add a new Silverlight Application to the solution and setup the WCF RIA Services link by checking the checkbox in the dialog box.&lt;br /&gt;&lt;table border="0" cellpadding="2" cellspacing="0" style="width: 400px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;&lt;a href="http://lh5.ggpht.com/_Crymsa-IOEo/S_r2HzHzTiI/AAAAAAAAACc/ZTHQwLy7Uc0/s1600-h/image9.png" target="_blank"&gt;&lt;img alt="image" border="0" height="200" src="http://lh5.ggpht.com/_Crymsa-IOEo/S_r2JSvdRdI/AAAAAAAAACg/P70m5YduoWA/image_thumb5.png?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline;" title="image" width="339" /&gt;&lt;/a&gt; &lt;/td&gt;&lt;td valign="top" width="200"&gt;&lt;a href="http://lh6.ggpht.com/_Crymsa-IOEo/S_r2LAGP-nI/AAAAAAAAACk/DirCuuGFuj4/s1600-h/image8.png"&gt;&lt;img alt="image" border="0" height="195" src="http://lh6.ggpht.com/_Crymsa-IOEo/S_r2L80QPNI/AAAAAAAAACo/3x5aCEtQ5eg/image_thumb4.png?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline;" title="image" width="244" /&gt;&lt;/a&gt; &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Note: Even .net 3.5 selected in the template, the target framework for Pzl.SilverlightSharePoint.App.Web still has to be set to 3.5&lt;br /&gt;&lt;h5&gt;Creating the Service&lt;/h5&gt;Add new Item to Pzl.SilverlightSharePoint.App.Web, choose Silverlight and choose Silverlight -enabled WCF Service&lt;br /&gt;&lt;a href="http://lh3.ggpht.com/_Crymsa-IOEo/S_r2NW-XQ4I/AAAAAAAAACs/skrh1ebenWE/s1600-h/image19.png"&gt;&lt;img alt="image" border="0" height="217" src="http://lh6.ggpht.com/_Crymsa-IOEo/S_r2OKk7iGI/AAAAAAAAACw/CnbWtnMZ09c/image_thumb11.png?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline;" title="image" width="305" /&gt;&lt;/a&gt; &lt;br /&gt;This will create a WCF Service endpoint with a code behind service class and configure web.config for hosting the newly added service.&lt;br /&gt;To prepare for utilization of the service from multiple endpoints (Part II of this article series) you have to create a new Class Library for the actual Service Interface, implementation and any POCO’s required. I Added a Class Library named Pzl.SilverlightSharePoint.Service and added references to “System.ServiceModel”&lt;br /&gt;Define the Service Contract and Implementation as classes in Pzl.SilverlightSharePoint.Service&lt;br /&gt;&lt;div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:fffe317e-38cc-41b2-8ad8-7c23c92d827c" style="display: inline; float: none; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div style="border-bottom: #000080 1px solid; border-left: #000080 1px solid; border-right: #000080 1px solid; border-top: #000080 1px solid; color: black; font-family: &amp;quot;Courier New&amp;quot;, Courier, Monospace; font-size: 10pt;"&gt;&lt;div style="background: #ddd; overflow: auto;"&gt;&lt;ol style="background: #ffffff; margin: 0px 0px 0px 2.5em; padding-bottom: 0px; padding-left: 5px; padding-right: 0px; padding-top: 0px;"&gt;&lt;li&gt;&lt;span style="color: blue;"&gt;namespace&lt;/span&gt; Pzl.SilverlightSharePoint.Service&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;{&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;span style="color: #2b91af;"&gt;ServiceContract&lt;/span&gt;(Namespace = &lt;span style="color: #a31515;"&gt;@"http://puzzlepart.com/developernovelty/sharepoint/silverlight"&lt;/span&gt;)]&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;interface&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;IWebContextService&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;span style="color: #2b91af;"&gt;OperationContract&lt;/span&gt;]&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;WebContextInfo&lt;/span&gt; GetWebContextInfo();&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li&gt;&amp;nbsp;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;span style="color: #2b91af;"&gt;AspNetCompatibilityRequirements&lt;/span&gt;(RequirementsMode = &lt;span style="color: #2b91af;"&gt;AspNetCompatibilityRequirementsMode&lt;/span&gt;.Allowed)]&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;WebContextService&lt;/span&gt; : &lt;span style="color: #2b91af;"&gt;IWebContextService&lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;WebContextInfo&lt;/span&gt; GetWebContextInfo()&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;WebContextInfo&lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Title = &lt;span style="color: #a31515;"&gt;"Not in SharePoint context"&lt;/span&gt;,&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Url = &lt;span style="color: blue;"&gt;string&lt;/span&gt;.Empty&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li&gt;&amp;nbsp;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li&gt;&amp;nbsp;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;WebContextInfo&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; Title { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; Url { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li&gt;}&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;Next remove the codebehind file for WebContextService.svc and change the service attribute to point to the implementation you’ve just added&lt;br /&gt;&lt;div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:8e51a264-9ee2-4181-930e-00e95529bf35" style="display: inline; float: none; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div style="border-bottom: #000080 1px solid; border-left: #000080 1px solid; border-right: #000080 1px solid; border-top: #000080 1px solid; color: black; font-family: &amp;quot;Courier New&amp;quot;, Courier, Monospace; font-size: 10pt;"&gt;&lt;div style="background: #ddd; overflow: auto;"&gt;&lt;ol style="background: #ffffff; margin: 0px 0px 0px 2em; padding-bottom: 0px; padding-left: 5px; padding-right: 0px; padding-top: 0px;"&gt;&lt;li&gt;&lt;span style="background: #ffff00;"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color: blue;"&gt;@&lt;/span&gt; &lt;span style="color: maroon;"&gt;ServiceHost&lt;/span&gt; &lt;span style="color: red;"&gt;Language&lt;/span&gt;&lt;span style="color: blue;"&gt;="C#"&lt;/span&gt; &lt;span style="color: red;"&gt;Debug&lt;/span&gt;&lt;span style="color: blue;"&gt;="true"&lt;/span&gt; &lt;span style="color: red;"&gt;Service&lt;/span&gt;&lt;span style="color: blue;"&gt;="Pzl.SilverlightSharePoint.Service.WebContextService"&lt;/span&gt; &lt;span style="background: #ffff00;"&gt;%&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;Then change the web config servicemodel elements to match the correct namespace and classnames:&lt;br /&gt;&lt;div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:50cb23f5-353c-410b-b1b0-0e05085bf5cd" style="display: inline; float: none; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div style="border-bottom: #000080 1px solid; border-left: #000080 1px solid; border-right: #000080 1px solid; border-top: #000080 1px solid; color: black; font-family: &amp;quot;Courier New&amp;quot;, Courier, Monospace; font-size: 10pt;"&gt;&lt;div style="background: #ddd; overflow: auto;"&gt;&lt;ol style="background: #ffffff; margin: 0px 0px 0px 2.5em; padding-bottom: 0px; padding-left: 5px; padding-right: 0px; padding-top: 0px;"&gt;&lt;li&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;system.serviceModel&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;behaviors&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;serviceBehaviors&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;behavior&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;Pzl.SilverlightSharePoint.Service.WebContextServiceBehavior&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;serviceMetadata&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;httpGetEnabled&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;true&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;serviceDebug&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;includeExceptionDetailInFaults&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;false&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;behavior&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;serviceBehaviors&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;behaviors&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;bindings&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;customBinding&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;binding&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;Pzl.SilverlightSharePoint.Service.WebContextService.customBinding0&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;binaryMessageEncoding&lt;/span&gt;&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;httpTransport&lt;/span&gt;&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;binding&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;customBinding&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;bindings&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;serviceHostingEnvironment&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;aspNetCompatibilityEnabled&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;true&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;services&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;service&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;behaviorConfiguration&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;Pzl.SilverlightSharePoint.Service.WebContextServiceBehavior&lt;/span&gt;"&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;Pzl.SilverlightSharePoint.Service.WebContextService&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;endpoint&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;address&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;""&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;binding&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;customBinding&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;bindingConfiguration&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;Pzl.SilverlightSharePoint.Service.WebContextService.customBinding0&lt;/span&gt;"&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;contract&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;Pzl.SilverlightSharePoint.Service.IWebContextService&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;endpoint&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;address&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;mex&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;binding&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;mexHttpBinding&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;contract&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;IMetadataExchange&lt;/span&gt;"&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;service&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;services&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;system.serviceModel&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;Next, add a reference to the service project from the web project, compile and verify that the svc Uri will provide is working correctly&lt;br /&gt;&lt;a href="http://lh4.ggpht.com/_Crymsa-IOEo/S_r2PKyZFGI/AAAAAAAAAC0/bPi_AdUTzZM/s1600-h/image22.png"&gt;&lt;img alt="image" border="0" height="164" src="http://lh3.ggpht.com/_Crymsa-IOEo/S_r2RZYXVLI/AAAAAAAAAC4/xC6nLLcWJLk/image_thumb12.png?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline;" title="image" width="244" /&gt;&lt;/a&gt; &lt;br /&gt;Notice that WCF RIA Services Toolkit will (re)generate a WCF client proxy and ClientConfig on compile. Beeing hooked on ReSharper Intellisense I always include the generated file in the project.&lt;br /&gt;&lt;a href="http://lh6.ggpht.com/_Crymsa-IOEo/S_r2Sq4pkBI/AAAAAAAAAC8/4fSlEgV0lEI/s1600-h/image31.png"&gt;&lt;img alt="image" border="0" height="218" src="http://lh3.ggpht.com/_Crymsa-IOEo/S_r2TLKYsWI/AAAAAAAAADA/PkmwGI9BAzw/image_thumb15.png?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline;" title="image" width="218" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;h5&gt;Changing the Silverlight App to use the service&lt;/h5&gt;First add a ServiceFactory class that will be responsible for hooking up the service with the correct binding to the correct endpoint once working together with SharePoint:&lt;br /&gt;&lt;div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:5838a876-ddba-468e-b786-0ebb52c8ddab" style="display: inline; float: none; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div style="border-bottom: #000080 1px solid; border-left: #000080 1px solid; border-right: #000080 1px solid; border-top: #000080 1px solid; color: black; font-family: &amp;quot;Courier New&amp;quot;, Courier, Monospace; font-size: 10pt;"&gt;&lt;div style="background: #ddd; overflow: auto;"&gt;&lt;ol style="background: #ffffff; margin: 0px 0px 0px 2.5em; padding-bottom: 0px; padding-left: 5px; padding-right: 0px; padding-top: 0px;"&gt;&lt;li&gt;&lt;span style="color: blue;"&gt;namespace&lt;/span&gt; Pzl.SilverlightSharePoint.App&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;{&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;ServiceClientFactory&lt;/span&gt; : &lt;span style="color: #2b91af;"&gt;IApplicationService&lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;ServiceClientFactory&lt;/span&gt; Current { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Dictionary&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;String&lt;/span&gt;, &lt;span style="color: #2b91af;"&gt;String&lt;/span&gt;&amp;gt; InitParams { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;/li&gt;&lt;li&gt;&amp;nbsp;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;#region&lt;/span&gt; IApplicationService Members&lt;/li&gt;&lt;li&gt;&amp;nbsp;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; StartService(&lt;span style="color: #2b91af;"&gt;ApplicationServiceContext&lt;/span&gt; context)&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Current = &lt;span style="color: blue;"&gt;this&lt;/span&gt;;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;InitParams = context.ApplicationInitParams;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li&gt;&amp;nbsp;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; StopService()&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li&gt;&amp;nbsp;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;#endregion&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt; TClient CreateClient&amp;lt;TClient, T&amp;gt;()&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;where&lt;/span&gt; TClient : &lt;span style="color: #2b91af;"&gt;ClientBase&lt;/span&gt;&amp;lt;T&amp;gt;, &lt;span style="color: blue;"&gt;new&lt;/span&gt;()&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;where&lt;/span&gt; T : &lt;span style="color: blue;"&gt;class&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;var&lt;/span&gt; client = &lt;span style="color: blue;"&gt;new&lt;/span&gt; TClient();&lt;/li&gt;&lt;li&gt;&amp;nbsp;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;//&lt;/span&gt;&lt;span style="color: darkblue;"&gt;TODO: change when hosted by SharePoint&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt; client;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li&gt;}&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;Add the ServiceClientFactory as an ApplicationLifeTimeObject inn App.xaml&lt;br /&gt;&lt;div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:c7193286-46f4-4d41-8563-45b015517ded" style="display: inline; float: none; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div style="border-bottom: #000080 1px solid; border-left: #000080 1px solid; border-right: #000080 1px solid; border-top: #000080 1px solid; color: black; font-family: &amp;quot;Courier New&amp;quot;, Courier, Monospace; font-size: 10pt;"&gt;&lt;div style="background: #ddd; overflow: auto;"&gt;&lt;ol style="background: #ffffff; margin: 0px 0px 0px 2em; padding-bottom: 0px; padding-left: 5px; padding-right: 0px; padding-top: 0px;"&gt;&lt;li&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Application&lt;/span&gt;&lt;span style="color: red;"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: red;"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;x&lt;/span&gt;&lt;span style="color: blue;"&gt;="http://schemas.microsoft.com/winfx/2006/xaml"&lt;/span&gt; &lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: red;"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;svc&lt;/span&gt;&lt;span style="color: blue;"&gt;="clr-namespace:Pzl.SilverlightSharePoint.App"&lt;/span&gt;&lt;span style="color: red;"&gt; x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Class&lt;/span&gt;&lt;span style="color: blue;"&gt;="Pzl.SilverlightSharePoint.App.App"&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Application.Resources&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Application.Resources&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Application.ApplicationLifetimeObjects&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;svc&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ServiceClientFactory&lt;/span&gt;&lt;span style="color: blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Application.ApplicationLifetimeObjects&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Application&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;Change the xaml of MainPage&lt;br /&gt;&lt;div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:e1ae9f8a-e8a4-4458-8de2-ecd3dbd394c0" style="display: inline; float: none; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div style="border-bottom: #000080 1px solid; border-left: #000080 1px solid; border-right: #000080 1px solid; border-top: #000080 1px solid; color: black; font-family: &amp;quot;Courier New&amp;quot;, Courier, Monospace; font-size: 10pt;"&gt;&lt;div style="background: #ddd; overflow: auto;"&gt;&lt;ol style="background: #ffffff; margin: 0px 0px 0px 2em; padding-bottom: 0px; padding-left: 5px; padding-right: 0px; padding-top: 0px;"&gt;&lt;li&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color: red;"&gt; x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Name&lt;/span&gt;&lt;span style="color: blue;"&gt;="LayoutRoot"&lt;/span&gt;&lt;span style="color: red;"&gt; Background&lt;/span&gt;&lt;span style="color: blue;"&gt;="White"&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Grid.ColumnDefinitions&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ColumnDefinition&lt;/span&gt;&lt;span style="color: red;"&gt; Width&lt;/span&gt;&lt;span style="color: blue;"&gt;="*" /&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Grid.ColumnDefinitions&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Button&lt;/span&gt;&lt;span style="color: red;"&gt; Content&lt;/span&gt;&lt;span style="color: blue;"&gt;="Invoke Service"&lt;/span&gt;&lt;span style="color: red;"&gt; Height&lt;/span&gt;&lt;span style="color: blue;"&gt;="23"&lt;/span&gt;&lt;span style="color: red;"&gt; HorizontalAlignment&lt;/span&gt;&lt;span style="color: blue;"&gt;="Left"&lt;/span&gt;&lt;span style="color: red;"&gt; Margin&lt;/span&gt;&lt;span style="color: blue;"&gt;="12,12,0,0"&lt;/span&gt;&lt;span style="color: red;"&gt; Name&lt;/span&gt;&lt;span style="color: blue;"&gt;="invokeServiceButton"&lt;/span&gt;&lt;span style="color: red;"&gt; VerticalAlignment&lt;/span&gt;&lt;span style="color: blue;"&gt;="Top"&lt;/span&gt;&lt;span style="color: red;"&gt; Width&lt;/span&gt;&lt;span style="color: blue;"&gt;="auto"&lt;/span&gt;&lt;span style="color: red;"&gt; Click&lt;/span&gt;&lt;span style="color: blue;"&gt;="InvokeServiceButtonClick"&lt;/span&gt; &lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;sdk&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Label&lt;/span&gt;&lt;span style="color: red;"&gt; Height&lt;/span&gt;&lt;span style="color: blue;"&gt;="28"&lt;/span&gt;&lt;span style="color: red;"&gt; HorizontalAlignment&lt;/span&gt;&lt;span style="color: blue;"&gt;="Left"&lt;/span&gt;&lt;span style="color: red;"&gt; Margin&lt;/span&gt;&lt;span style="color: blue;"&gt;="12,41,0,0"&lt;/span&gt;&lt;span style="color: red;"&gt; Name&lt;/span&gt;&lt;span style="color: blue;"&gt;="theResponseLabel"&lt;/span&gt;&lt;span style="color: red;"&gt; VerticalAlignment&lt;/span&gt;&lt;span style="color: blue;"&gt;="Top"&lt;/span&gt;&lt;span style="color: red;"&gt; Width&lt;/span&gt;&lt;span style="color: blue;"&gt;="auto"&lt;/span&gt; &lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;sdk&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Label&lt;/span&gt;&lt;span style="color: red;"&gt; Height&lt;/span&gt;&lt;span style="color: blue;"&gt;="28"&lt;/span&gt;&lt;span style="color: red;"&gt; HorizontalAlignment&lt;/span&gt;&lt;span style="color: blue;"&gt;="Left"&lt;/span&gt;&lt;span style="color: red;"&gt; Margin&lt;/span&gt;&lt;span style="color: blue;"&gt;="12,63,0,0"&lt;/span&gt;&lt;span style="color: red;"&gt; Name&lt;/span&gt;&lt;span style="color: blue;"&gt;="debugServiceEndPointLabel"&lt;/span&gt;&lt;span style="color: red;"&gt; VerticalAlignment&lt;/span&gt;&lt;span style="color: blue;"&gt;="Top"&lt;/span&gt;&lt;span style="color: red;"&gt; Width&lt;/span&gt;&lt;span style="color: blue;"&gt;="auto"&lt;/span&gt; &lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #a31515;"&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;Setup the codebehind of MainPage, I’ve added some debugging info to ensure hitting the correct endpoint which will be useful in part II.&lt;br /&gt;&lt;div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:07ea0fcc-6024-4c7c-ab48-81c68025045c" style="display: inline; float: none; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div style="border-bottom: #000080 1px solid; border-left: #000080 1px solid; border-right: #000080 1px solid; border-top: #000080 1px solid; color: black; font-family: &amp;quot;Courier New&amp;quot;, Courier, Monospace; font-size: 10pt;"&gt;&lt;div style="background: #ddd; overflow: auto;"&gt;&lt;ol style="background: #ffffff; margin: 0px 0px 0px 2.5em; padding-bottom: 0px; padding-left: 5px; padding-right: 0px; padding-top: 0px;"&gt;&lt;li&gt;&lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;readonly&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;WebContextServiceClient&lt;/span&gt; _webContextServiceClient;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt; MainPage()&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;InitializeComponent();&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_webContextServiceClient =&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;ServiceClientFactory&lt;/span&gt;.Current.CreateClient&amp;lt;&lt;span style="color: #2b91af;"&gt;WebContextServiceClient&lt;/span&gt;, &lt;span style="color: #2b91af;"&gt;IWebContextService&lt;/span&gt;&amp;gt;();&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_webContextServiceClient.GetWebContextInfoCompleted += WebContextServiceClientOnGetWebContextInfoCompleted;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;debugServiceEndPointLabel.Content = &lt;span style="color: #a31515;"&gt;"Service Endpoint: "&lt;/span&gt; + _webContextServiceClient.Endpoint.Address.Uri;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li&gt;&amp;nbsp;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; WebContextServiceClientOnGetWebContextInfoCompleted(&lt;span style="color: blue;"&gt;object&lt;/span&gt; sender, &lt;span style="color: #2b91af;"&gt;GetWebContextInfoCompletedEventArgs&lt;/span&gt; getWebContextInfoCompletedEventArgs)&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;theResponseLabel.Content = &lt;span style="color: #a31515;"&gt;"The web is: "&lt;/span&gt; + getWebContextInfoCompletedEventArgs.Result.Title;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; InvokeServiceButtonClick(&lt;span style="color: blue;"&gt;object&lt;/span&gt; sender, &lt;span style="color: #2b91af;"&gt;RoutedEventArgs&lt;/span&gt; e)&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_webContextServiceClient.GetWebContextInfoAsync();&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;Test the application by running and invoking service.&lt;br /&gt;&lt;a href="http://lh5.ggpht.com/_Crymsa-IOEo/S_r2T13XB1I/AAAAAAAAADE/1uXSKoFb8D0/s1600-h/image%5B3%5D.png"&gt;&lt;img alt="image" border="0" height="90" src="http://lh6.ggpht.com/_Crymsa-IOEo/S_r2WL-jfnI/AAAAAAAAADI/lRfgZNlIOW0/image_thumb.png?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline;" title="image" width="244" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;h4&gt;Conclusion Part I&lt;/h4&gt;This blogpost has shown how to setup a Silverlight 4.0 solution which uses WCF Client Proxy Auto Generation. I have also demonstrated how to prepare for SharePoint deployment by separating service implementation from the current endpoint and added the basic outline of a service factory.&lt;br /&gt;Next: &lt;a href="http://ogarshol.blogspot.com/2010/05/wcf-ria-services-10-for-sharepoint-2010_25.html"&gt;WCF RIA Services 1.0 for SharePoint 2010 Part II&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2485944830160065050-5938407133885445912?l=ogarshol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ogarshol.blogspot.com/feeds/5938407133885445912/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ogarshol.blogspot.com/2010/05/wcf-ria-services-10-for-sharepoint-2010.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2485944830160065050/posts/default/5938407133885445912'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2485944830160065050/posts/default/5938407133885445912'/><link rel='alternate' type='text/html' href='http://ogarshol.blogspot.com/2010/05/wcf-ria-services-10-for-sharepoint-2010.html' title='WCF RIA Services 1.0 for SharePoint 2010 Part I'/><author><name>Øystein Garshol</name><uri>http://www.blogger.com/profile/12841414895483895925</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_Crymsa-IOEo/SsT8Md6_jaI/AAAAAAAAAAM/ScNLuzNqUvA/S220/OYSTEIN_GARSHOL.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_Crymsa-IOEo/S_r2JSvdRdI/AAAAAAAAACg/P70m5YduoWA/s72-c/image_thumb5.png?imgmax=800' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2485944830160065050.post-7141614451595730575</id><published>2010-04-24T23:15:00.002+02:00</published><updated>2010-05-26T12:55:05.735+02:00</updated><title type='text'>SharePoint hosted WCF RIA Services R.I.P ?</title><content type='html'>Last year I did a few experiments on RIA Services, and I found it very suitable framework for developing Silverlight Apps for hosting in SharePoint. I loved the way RIA Services and the later WCF RIA services made client development easy by always auto generating the client proxy and the way the client was aware of it’s host which allowed a no configuration of url’s to the server endpoints. &lt;br /&gt;&lt;br /&gt;Although the PDC release WCF RIA Services and SharePoint didn’t play together that well,&lt;a href="http://ogarshol.blogspot.com/2009/11/hosting-wcf-ria-services-in-sharepoint.html"&gt; I managed to find an adequate solution&lt;/a&gt; which made it possible to still enjoy WCF RIA Services features in a SharePoint Context. The real beauty was that I could develop context aware Domain Services abstracting the less friendly SharePoint web services as well as the SharePoint Object Model, in other words apply SOA principles to SharePoint and Silverlight.&lt;br /&gt;&lt;br /&gt;With a Framework built by &lt;a href="http://www.puzzlepart.com/"&gt;Puzzlepart&lt;/a&gt; I could even create SilverLight apps using a DomainService abstracting the entire SharePoint complexity, making it possible to use Excel Sheets instead of SharPoint lists as data backing on a local dev server. When the DomainServices were deployed to a SharePoint server they became context aware and used lists within the scope of the web site the DomainService were requested for. &lt;br /&gt;&lt;br /&gt;With WCF RIA Services RC it’s back to the drawing board. WCF RIA Services RC requires the .NET 4.0 CLR, which is not supported by SharePoint 2007 or SharePoint 2010. It’s a shame since RIA Services in my opinion could be a great catalyst for building Rich SharePoint applications leveraging both SharePoint and SilverLight features.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Update: Although the WCF RIA Services runtime can't be applied I've found a workaround that will provide parts of&amp;nbsp;the same development experience, see &lt;a href="http://ogarshol.blogspot.com/2010/05/wcf-ria-services-10-for-sharepoint-2010.html"&gt;WCF RIA Services 1.0 for SharePoint 2010 Part I&lt;/a&gt;&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2485944830160065050-7141614451595730575?l=ogarshol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ogarshol.blogspot.com/feeds/7141614451595730575/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ogarshol.blogspot.com/2010/04/sharepoint-hosted-wcf-ria-services-rip.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2485944830160065050/posts/default/7141614451595730575'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2485944830160065050/posts/default/7141614451595730575'/><link rel='alternate' type='text/html' href='http://ogarshol.blogspot.com/2010/04/sharepoint-hosted-wcf-ria-services-rip.html' title='SharePoint hosted WCF RIA Services R.I.P ?'/><author><name>Øystein Garshol</name><uri>http://www.blogger.com/profile/12841414895483895925</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_Crymsa-IOEo/SsT8Md6_jaI/AAAAAAAAAAM/ScNLuzNqUvA/S220/OYSTEIN_GARSHOL.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2485944830160065050.post-5504030170424762857</id><published>2010-01-13T23:28:00.001+01:00</published><updated>2010-01-14T14:22:38.365+01:00</updated><title type='text'>Change of plans</title><content type='html'>After only 4 months in then Insurance and Finance industry I this week joined my two of my former colleagues &lt;a href="http://kjellsj.blogspot.com/"&gt;Kjell-Sverre Jerijærvi&lt;/a&gt; and Mads Nissen in &lt;a href="http://www.puzzlepart.com/"&gt;Puzzlepart&lt;/a&gt;.&lt;br /&gt;Puzzlepart has already done some exciting stuff within SharePoint, which I’m sure will be a catalyst for future SharePoint solutions, and will also deliver excellent consulting services to the market. I’m very excited to be joining Mads and Kjell-Sverre and hope for prosperous times.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2485944830160065050-5504030170424762857?l=ogarshol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ogarshol.blogspot.com/feeds/5504030170424762857/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ogarshol.blogspot.com/2010/01/change-of-plans.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2485944830160065050/posts/default/5504030170424762857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2485944830160065050/posts/default/5504030170424762857'/><link rel='alternate' type='text/html' href='http://ogarshol.blogspot.com/2010/01/change-of-plans.html' title='Change of plans'/><author><name>Øystein Garshol</name><uri>http://www.blogger.com/profile/12841414895483895925</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_Crymsa-IOEo/SsT8Md6_jaI/AAAAAAAAAAM/ScNLuzNqUvA/S220/OYSTEIN_GARSHOL.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2485944830160065050.post-4707462733624096632</id><published>2009-11-29T16:02:00.003+01:00</published><updated>2010-01-04T18:28:59.807+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>Drag and drop in Silverlight 3</title><content type='html'>In my very slowly proceeding spare time project I’m attempting to create a Scrum application in Silverlight for SharePoint deployment.&lt;br /&gt;Basic features off the application is a Planning Board for prioritization of Backlog items and Sprints and organizing backlog items into sprints.&lt;br /&gt;&lt;a href="http://lh6.ggpht.com/_Crymsa-IOEo/SxKM_oLNzjI/AAAAAAAAACI/ryx7ypqRGoA/s1600-h/Planning%20board%5B4%5D.png"&gt;&lt;img alt="Planning board" border="0" height="179" src="http://lh4.ggpht.com/_Crymsa-IOEo/SxKNAJqhKYI/AAAAAAAAACM/Y_uYXzfZyTE/Planning%20board_thumb%5B2%5D.png?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline;" title="Planning board" width="346" /&gt;&lt;/a&gt; &lt;br /&gt;During sprint progress I want to be able to easily indicate the status of a backlog item/task.&lt;br /&gt;&lt;a href="http://lh6.ggpht.com/_Crymsa-IOEo/SxKNBc_WaLI/AAAAAAAAACQ/h8WUR1mroFs/s1600-h/task%20board%5B6%5D.png"&gt;&lt;img alt="Task board" border="0" height="168" src="http://lh4.ggpht.com/_Crymsa-IOEo/SxKNBnd_3EI/AAAAAAAAACU/tPXW8umjjos/task%20board_thumb%5B4%5D.png?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px;" title="Task board" width="351" /&gt;&lt;/a&gt; &lt;br /&gt;After some heavy googling I found &lt;a href="http://silverlightdragdrop.codeplex.com/" target="_blank"&gt;Silverlight Drag Drop Manager&lt;/a&gt; which was almost a perfect fit for my requirements. The only thing it didn’t support “out of the box” was a restriction in the Planning board that ensures that Sprints can’t be dropped in Backlog Items, which had to be hand coded:&lt;br /&gt;&lt;div class="wlWriterEditableSmartContent" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:cbe6dd29-561d-43b3-9f9d-a3efeee381c3" style="display: inline; float: none; margin: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div style="border-bottom: #000080 1px solid; border-left: #000080 1px solid; border-right: #000080 1px solid; border-top: #000080 1px solid; color: black; font-family: &amp;quot;Courier New&amp;quot;, Courier, Monospace; font-size: 10pt;"&gt;&lt;div style="background: #ddd; overflow: auto;"&gt;&lt;ol style="background: #ffffff; margin: 0px 0px 0px 2.5em; padding-bottom: 0px; padding-left: 5px; padding-right: 0px; padding-top: 0px; white-space: nowrap;"&gt;&lt;li&gt;&lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; SprintDropTarget_Loaded(&lt;span style="color: blue;"&gt;object&lt;/span&gt; sender, &lt;span style="color: #2b91af;"&gt;RoutedEventArgs&lt;/span&gt; e)&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;{&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt; (!SprintDropTargets.Contains((&lt;span style="color: #2b91af;"&gt;DropTarget&lt;/span&gt;) sender))&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SprintDropTargets.Add((&lt;span style="color: #2b91af;"&gt;DropTarget&lt;/span&gt;) sender);&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li&gt;}&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;&lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; SprintDragSource_Loaded(&lt;span style="color: blue;"&gt;object&lt;/span&gt; sender, &lt;span style="color: #2b91af;"&gt;RoutedEventArgs&lt;/span&gt; e)&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;{&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt; (!SprintDragSources.Contains((&lt;span style="color: #2b91af;"&gt;DragSource&lt;/span&gt;) sender))&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SprintDragSources.Add((&lt;span style="color: #2b91af;"&gt;DragSource&lt;/span&gt;) sender);&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;foreach&lt;/span&gt; (&lt;span style="color: #2b91af;"&gt;DragSource&lt;/span&gt; dragSource &lt;span style="color: blue;"&gt;in&lt;/span&gt; SprintDragSources)&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dragSource.DropTargets = SprintDropTargets;&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/li&gt;&lt;li style="background: #f3f3f3;"&gt;}&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;The complete code with engineer like design is available&amp;nbsp; below.&lt;br /&gt;&lt;iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://cid-048e137fcc45980d.skydrive.live.com/embedicon.aspx/.Public/ItemsDone4SharePoint-DragDrop.zip" style="background-color: #fcfcfc; height: 115px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; width: 98px;" title="Preview"&gt;&lt;/iframe&gt;&lt;br /&gt;Enjoy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2485944830160065050-4707462733624096632?l=ogarshol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ogarshol.blogspot.com/feeds/4707462733624096632/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ogarshol.blogspot.com/2009/11/drag-and-drop-in-silverlight-3.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2485944830160065050/posts/default/4707462733624096632'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2485944830160065050/posts/default/4707462733624096632'/><link rel='alternate' type='text/html' href='http://ogarshol.blogspot.com/2009/11/drag-and-drop-in-silverlight-3.html' title='Drag and drop in Silverlight 3'/><author><name>Øystein Garshol</name><uri>http://www.blogger.com/profile/12841414895483895925</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_Crymsa-IOEo/SsT8Md6_jaI/AAAAAAAAAAM/ScNLuzNqUvA/S220/OYSTEIN_GARSHOL.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_Crymsa-IOEo/SxKNAJqhKYI/AAAAAAAAACM/Y_uYXzfZyTE/s72-c/Planning%20board_thumb%5B2%5D.png?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2485944830160065050.post-8769646872811214396</id><published>2009-11-25T22:55:00.002+01:00</published><updated>2010-06-02T19:56:25.852+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint'/><category scheme='http://www.blogger.com/atom/ns#' term='RIA Services'/><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>Hosting WCF RIA Services in SharePoint 2007</title><content type='html'>After upgrading my private dev platform to Win 7 a few weeks ago it was time to start to play around with Silverlight and SharePoint again. The goal of my little project to make a Silverligt application that leverages RIA Services to easily use the SharePoint object model as a data store, and eventually provide a Scrum board and possible a Project site template to set everything up nicely.&lt;br /&gt;Unfortunately I didn’t have a copy of the previous version of RIA Services and had to install “WCF RIA Services” released last week on PDC. After upgrading my projects and going through the &lt;a href="http://code.msdn.microsoft.com/RiaServices/Release/ProjectReleases.aspx?ReleaseId=3570"&gt;Breaking Changes documentation&lt;/a&gt; my services worked just fine in local web server debug mode, but once deployed and hosted in SharePoint (_vti_bin) I was unable to get anything but a Not found exception (404) on service calls as well as calls to get WSDL from the deployed services.&lt;br /&gt;After some googling I stumbled across “&lt;a href="http://blah.winsmarts.com/2008-5-SharePoint_as_a_WCF_Host.aspx"&gt;SharePoint as a WCF Host&lt;/a&gt;” and the &lt;a href="http://www.codeplex.com/SPWCFSupport"&gt;Winsmarts SharePoint WCF Support&lt;/a&gt;.&amp;nbsp; The Winsmart wsp helped to some extent since I was able to at least reach the service in order to get WSDL (which is really unnecessary in RIA Services) but i still got 404 messages when posting to the binary channel on the service. &lt;br /&gt;To solve the issue I ended up disassembling System.Web.Ria.Services.DomainServiceHttpModule and refactored it into my own classes and debugged service calls inside and outside of SharePoint.&lt;br /&gt;My findings were that the Request.AppRelativeCurrentExecutionFilePath and Request.PathInfo were significantly different inside than outside SharePoint&lt;br /&gt;&lt;a href="http://lh6.ggpht.com/_Crymsa-IOEo/Sw2nvefrTMI/AAAAAAAAAB4/WQFpdSdx--8/s1600-h/image%5B6%5D.png"&gt;&lt;img alt="Outside Sharepoint" border="0" height="167" src="http://lh3.ggpht.com/_Crymsa-IOEo/Sw2nv4DqaeI/AAAAAAAAAB8/9DqRPbkv8nM/image_thumb%5B4%5D.png?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline;" title="Outside Sharepoint" width="244" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;a href="http://lh3.ggpht.com/_Crymsa-IOEo/Sw2nw1WatjI/AAAAAAAAACA/X53p6KEQxA4/s1600-h/image%5B15%5D.png"&gt;&lt;img alt="Inside SharePoint" border="0" height="157" src="http://lh3.ggpht.com/_Crymsa-IOEo/Sw2nxRfA1fI/AAAAAAAAACE/Jd3SHrPTnWk/image_thumb%5B11%5D.png?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline;" title="Inside SharePoint" width="244" /&gt;&lt;/a&gt; &lt;br /&gt;To compensate I rewrote the DomainServiceHttpModule and wrapped it inside a nice little WSP package that makes it pretty easy to deploy. If you are not hosting any other WCF services in SharePoint there is no need for additional HttpModules such as The Winsmart one.&lt;br /&gt;&lt;table border="0" cellpadding="2" cellspacing="0" style="width: 400px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;Get the wsp here:&lt;/td&gt;&lt;td valign="top" width="200"&gt;And the complete code here:&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;&lt;iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://cid-048e137fcc45980d.skydrive.live.com/embedicon.aspx/.Public/SharePoint.WcfRiaSupport.wsp" style="background-color: #fcfcfc; height: 114px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; width: 98px;" title="Preview"&gt;&lt;/iframe&gt;;&lt;/td&gt;&lt;td valign="top" width="200"&gt;&lt;iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://cid-048e137fcc45980d.skydrive.live.com/embedicon.aspx/.Public/SharePoint.WcfRiaSupport.zip" style="background-color: #fcfcfc; height: 115px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; width: 98px;" title="Preview"&gt;&lt;/iframe&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Enjoy&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;UPDATE!&lt;/strong&gt;&amp;nbsp;WCF RIA Services 1.0 &lt;strong&gt;does not support&lt;/strong&gt; .NET 2.0 runtime. &lt;a href="http://ogarshol.blogspot.com/2010/05/wcf-ria-services-10-for-sharepoint-2010.html"&gt;A possible workaround is found here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2485944830160065050-8769646872811214396?l=ogarshol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ogarshol.blogspot.com/feeds/8769646872811214396/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ogarshol.blogspot.com/2009/11/hosting-wcf-ria-services-in-sharepoint.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2485944830160065050/posts/default/8769646872811214396'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2485944830160065050/posts/default/8769646872811214396'/><link rel='alternate' type='text/html' href='http://ogarshol.blogspot.com/2009/11/hosting-wcf-ria-services-in-sharepoint.html' title='Hosting WCF RIA Services in SharePoint 2007'/><author><name>Øystein Garshol</name><uri>http://www.blogger.com/profile/12841414895483895925</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_Crymsa-IOEo/SsT8Md6_jaI/AAAAAAAAAAM/ScNLuzNqUvA/S220/OYSTEIN_GARSHOL.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_Crymsa-IOEo/Sw2nv4DqaeI/AAAAAAAAAB8/9DqRPbkv8nM/s72-c/image_thumb%5B4%5D.png?imgmax=800' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2485944830160065050.post-4990846873203147855</id><published>2009-10-06T19:43:00.146+02:00</published><updated>2009-10-06T23:39:38.212+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint'/><category scheme='http://www.blogger.com/atom/ns#' term='RIA Services'/><title type='text'>Development environment setup</title><content type='html'>&lt;span xmlns=""&gt;&lt;/span&gt;&lt;br /&gt;Since I do have an &lt;a href="http://ogarshol.blogspot.com/2009/10/idea.html"&gt;Idea&lt;/a&gt; of some sort of a Silverlight Application in SharePoint, I want a simple to setup and maintain development environment with the ability to easily debug both client and SharePoint functionality.&lt;br /&gt;I decided to run it all on my desktop, and thanks to &lt;a href="http://community.bamboosolutions.com/blogs/bambooteamblog/archive/2008/05/21/how-to-install-windows-sharepoint-services-3-0-sp1-on-vista-x64-x86.aspx"&gt;Bamboo Solutions&lt;/a&gt;&amp;nbsp;I was able to install WSS on my Vista computer. &lt;br /&gt;After I properly installed WSS and created a new WSS Web Application, I was good to go.&lt;br /&gt;&lt;span style="font-size: large;"&gt;Step 1: Configuring RIA Services and Silverlight in WSS&lt;br /&gt;&lt;/span&gt;Assuming the latest Servicepacks are installed, SilverLight/.NET 3.5 shouldn't be an issue, but if it is follow these &lt;a href="http://weblogs.asp.net/jan/archive/2008/10/10/enabling-net-3-5-in-sharepoint-2007-sites-the-lazy-way.aspx"&gt;lazy instructions.&lt;/a&gt;&lt;br /&gt;RIA Services clients uses JSon Serialization to communicate with it's server, so the server (WSS in our case) needs to be setup with proper handlers as described below.&lt;br /&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;system.web&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue; font-family: Courier New; font-size: x-small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 10pt;"&gt;&lt;span style="font-family: Courier New;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;httpHandlers&lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-family: Courier New;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue; font-family: Courier New; font-size: x-small;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size: 10pt;"&gt;&lt;span style="font-family: Courier New;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;add &lt;/span&gt;&lt;span style="color: red;"&gt;path&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;DataService.axd&lt;/span&gt;" &lt;span style="color: red;"&gt;verb&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;GET,POST&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;System.Web.Ria.DataServiceFactory, System.Web.Ria, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35&lt;/span&gt;" &lt;span style="color: red;"&gt;validate&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;false&lt;/span&gt;"&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-family: Courier New;"&gt; /&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;httpHandlers&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="color: green;"&gt; Yes it's a hack, but lets worry about that later &lt;/span&gt;&lt;span style="color: blue;"&gt;--&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;trust &lt;/span&gt;&lt;span style="color: red;"&gt;level&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;Full&lt;/span&gt;" &lt;span style="color: red;"&gt;originUrl&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;""&lt;span style="color: blue;"&gt; /&amp;gt; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;system.web&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;!--&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: green; font-family: Courier New; font-size: 10pt;"&gt;The system.webServer section is required for running ASP.NET AJAX under Internet&lt;br /&gt;&lt;/span&gt;&lt;span style="color: green; font-family: Courier New; font-size: 10pt;"&gt;Information Services 7.0. It is not necessary for previous version of IIS.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="color: blue;"&gt;--&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;system.webServer&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;handlers&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;add &lt;/span&gt;&lt;span style="color: red;"&gt;name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;DataService&lt;/span&gt;" &lt;span style="color: red;"&gt;verb&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;GET,POST&lt;/span&gt;" &lt;span style="color: red;"&gt;path&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;DataService.axd&lt;/span&gt;" &lt;span style="color: red;"&gt;type&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;System.Web.Ria.DataServiceFactory, System.Web.Ria, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35&lt;/span&gt;"&lt;span style="color: blue;"&gt;/&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;handlers&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;system.webServer&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Step 2: Testing RIA Services&lt;br /&gt;&lt;/span&gt;For my project I want to have some navigation features and RIA Services functionality, and chose a lazy approach by Selecting the Silverlight Business Application from the Visual Studio New project Dialog.&lt;br /&gt;&lt;br /&gt;I Removed a few UI Elements and took away all the Services but the AuthenticationService (Superstitious reasons). Furthermore I added references to the SharePoint DLL's from the .Web Project and added a new service that simply returns the Current Web Id and Title.&lt;br /&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;[&lt;span style="color: #2b91af;"&gt;EnableClientAccess&lt;/span&gt;]&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="color: blue;"&gt;public &lt;/span&gt;&lt;span style="color: blue;"&gt;class &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;WebInformationService&lt;/span&gt; : &lt;span style="color: #2b91af;"&gt;DomainService&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp; {&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp; SPWeb&lt;/span&gt; spWeb = &lt;span style="color: #2b91af;"&gt;SPContext&lt;/span&gt;.Current.Web;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp; SharePointWeb&lt;/span&gt; web = &lt;span style="color: blue;"&gt;new&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #2b91af;"&gt;&amp;nbsp;&amp;nbsp; SharePointWeb&lt;/span&gt; {Id = spWeb.ID, Title = spWeb.Title};&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&lt;/span&gt; web;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;In the Silverlight application I created a new Page that were to call the Ria Service upon load&lt;br /&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;public &lt;/span&gt;&lt;span style="color: blue;"&gt;partial &lt;/span&gt;&lt;span style="color: blue;"&gt;class &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Overview&lt;/span&gt; : &lt;span style="color: #2b91af;"&gt;Page&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; private &lt;/span&gt;&lt;span style="color: blue;"&gt;readonly&lt;/span&gt; Web.Services.&lt;span style="color: #2b91af;"&gt;WebInformationContext&lt;/span&gt; webContext;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; public&lt;/span&gt; Overview()&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp; {&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp; InitializeComponent();&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp; webContext = &lt;span style="color: blue;"&gt;new&lt;/span&gt; Web.Services.&lt;span style="color: #2b91af;"&gt;WebInformationContext&lt;/span&gt;();&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp; webContext.Load(webContext.GetCurrentWebQuery(), LoadedCompleted, &lt;span style="color: blue;"&gt;null&lt;/span&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp; }&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;private &lt;/span&gt;&lt;span style="color: blue;"&gt;void&lt;/span&gt; LoadedCompleted(&lt;span style="color: #2b91af;"&gt;LoadOperation&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;SharePointWeb&lt;/span&gt;&amp;gt; result)&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; if&lt;/span&gt; (result.HasError)&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw&lt;/span&gt; result.Error;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp; SiteName = result.Entities.First().Title;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&amp;nbsp; DataContext = &lt;span style="color: blue;"&gt;this&lt;/span&gt;;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="color: blue;"&gt;public &lt;/span&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt; SiteName { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&lt;br /&gt;...&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;XAML Snippet for the Overview Page: &lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;StackPanel&lt;/span&gt;&lt;span style="color: red;"&gt; Orientation&lt;/span&gt;&lt;span style="color: blue;"&gt;="Horizontal"&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color: red;"&gt; Style&lt;/span&gt;&lt;span style="color: blue;"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515;"&gt;StaticResource&lt;/span&gt;&lt;span style="color: red;"&gt; ContentTextStyle&lt;/span&gt;&lt;span style="color: blue;"&gt;}" &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="color: red;"&gt;Text&lt;/span&gt;&lt;span style="color: blue;"&gt;="Sitename (Found through RIA services) is " /&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color: red;"&gt; x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Name&lt;/span&gt;&lt;span style="color: blue;"&gt;="siteName"&lt;/span&gt;&lt;span style="color: red;"&gt; Style&lt;/span&gt;&lt;span style="color: blue;"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515;"&gt;StaticResource&lt;/span&gt;&lt;span style="color: red;"&gt; ContentTextStyle&lt;/span&gt;&lt;span style="color: blue;"&gt;}" &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="color: red;"&gt;Text&lt;/span&gt;&lt;span style="color: blue;"&gt;="{&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color: red;"&gt; SiteName&lt;/span&gt;&lt;span style="color: blue;"&gt;}"/&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;StackPanel&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Compiled and tested the functionality that does not require the WebInformationService to work. I then created a new SharePoint Site using the Team Site template, created a document library within the Team Site called Pages and create a Web Part page within the Pages library. I Simply copied the following from the test page created by the template:&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;object &lt;/span&gt;&lt;span style="color: red;"&gt;data&lt;/span&gt;&lt;span style="color: blue;"&gt;="data:application/x-silverlight-2," &lt;/span&gt;&lt;span style="color: red;"&gt;type&lt;/span&gt;&lt;span style="color: blue;"&gt;="application/x-silverlight-2" &lt;/span&gt;&lt;span style="color: red;"&gt;width&lt;/span&gt;&lt;span style="color: blue;"&gt;="100%" &lt;/span&gt;&lt;span style="color: red;"&gt;height&lt;/span&gt;&lt;span style="color: blue;"&gt;="100%"&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;param &lt;/span&gt;&lt;span style="color: red;"&gt;name&lt;/span&gt;&lt;span style="color: blue;"&gt;="source" &lt;/span&gt;&lt;span style="color: red;"&gt;value&lt;/span&gt;&lt;span style="color: blue;"&gt;="&lt;/span&gt;&lt;span style="background-color: yellow; color: grey;"&gt;../_vti_bin/&lt;/span&gt;&lt;span style="color: blue;"&gt;ItemsDone4SharePoint.xap"/&amp;gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;param &lt;/span&gt;&lt;span style="color: red;"&gt;name&lt;/span&gt;&lt;span style="color: blue;"&gt;="onError" &lt;/span&gt;&lt;span style="color: red;"&gt;value&lt;/span&gt;&lt;span style="color: blue;"&gt;="onSilverlightError" &lt;/span&gt;&lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;param &lt;/span&gt;&lt;span style="color: red;"&gt;name&lt;/span&gt;&lt;span style="color: blue;"&gt;="background" &lt;/span&gt;&lt;span style="color: red;"&gt;value&lt;/span&gt;&lt;span style="color: blue;"&gt;="white" &lt;/span&gt;&lt;span style="color: blue;"&gt;/&amp;gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;param &lt;/span&gt;&lt;span style="color: red;"&gt;name&lt;/span&gt;&lt;span style="color: blue;"&gt;="minRuntimeVersion" &lt;/span&gt;&lt;span style="color: red;"&gt;value&lt;/span&gt;&lt;span style="color: blue;"&gt;="3.0.40624.0" &lt;/span&gt;&lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;br /&gt;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;param &lt;/span&gt;&lt;span style="color: red;"&gt;name&lt;/span&gt;&lt;span style="color: blue;"&gt;="autoUpgrade" &lt;/span&gt;&lt;span style="color: red;"&gt;value&lt;/span&gt;&lt;span style="color: blue;"&gt;="true" &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="color: blue;"&gt;/&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;a &lt;/span&gt;&lt;span style="color: red;"&gt;href&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;a href="http://go.microsoft.com/fwlink/?LinkID=149156&amp;amp;v=3.0.40624.0"&gt;http://go.microsoft.com/fwlink/?LinkID=149156&amp;amp;v=3.0.40624.0&lt;/a&gt; s&lt;/span&gt;&lt;span style="color: red;"&gt;tyle&lt;/span&gt;&lt;span style="color: blue;"&gt;="text-decoration:none"&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;img &lt;/span&gt;&lt;span style="color: red;"&gt;src&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;a href="http://go.microsoft.com/fwlink/?LinkId=108181"&gt;http://go.microsoft.com/fwlink/?LinkId=108181&lt;/a&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;alt&lt;/span&gt;&lt;span style="color: blue;"&gt;="Get Microsoft Silverlight" &lt;/span&gt;&lt;span style="color: red;"&gt;style&lt;/span&gt;&lt;span style="color: blue;"&gt;="border-style:none"/&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;a&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;object&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;iframe i&lt;/span&gt;&lt;span style="color: red;"&gt;d&lt;/span&gt;&lt;span style="color: blue;"&gt;="_sl_historyFrame" &lt;/span&gt;&lt;span style="color: red;"&gt;style&lt;/span&gt;&lt;span style="color: blue;"&gt;="visibility:hidden;height:0px;width:0px;border:0px"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;iframe&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Copied the dll files of the .Web project to the bin folder of the WSS site and copied the XAP file to Web Server Extensions\12\ISAPI\&lt;br /&gt;&lt;br /&gt;I tried various locations for my XAP file, but since I want to be able to get the current SharePoint Context in any sub site and there seems to be some sort of magical binding between the JSON Url, the site, the service and the hosting websites url it seemed obvious that the file needed to be within the sub site created. Putting the XAP file in a doc lib will also work perfectly, but is not suitable for easy deployment in terms of debugging. I ended up putting the file in the ISAPI folder for those reasons. &lt;a href="http://www.fiddler2.com/fiddler2/"&gt;Fiddler&lt;/a&gt;&amp;nbsp;proved useful for debugging communications.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Step 3: Automating XAP file and RIA Service deployment&lt;/span&gt; Although I'm no big fan of post build events they do serve their purpose.In my Silverlight project I entered the following post build event:&lt;br /&gt;&lt;em&gt;copy /Y "$(TargetDir)"*.xap "C:\Program Files\Common Files\microsoft shared\Web Server Extensions\12\ISAPI\"&lt;/em&gt;&lt;br /&gt;And in the .Web project the following post build:&lt;br /&gt;&lt;em&gt;copy /Y "$(TargetDir)"*.dll C:\inetpub\wwwroot\wss\VirtualDirectories\80\bin&lt;/em&gt;&lt;br /&gt;... and voila everythin I need for easy deployment and debugging is ready.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Step 4:&amp;nbsp;Debugging&lt;/span&gt;&lt;br /&gt;The goal of all my efforts so far has been to have a easy setup for changing my silverlight app and related RIA services. To be able to hit F5 and be able to debug both the client and RIA Services in a WSS context was only in mye dreams (Yes, I have other dreams to). &lt;br /&gt;&lt;br /&gt;In order to debug in WSS do the following in the project properties of the .web project:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_Crymsa-IOEo/Ssu3jZUwTOI/AAAAAAAAABI/snCKfceqZts/s1600-h/debug+settings.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img $r="true" border="0" src="http://3.bp.blogspot.com/_Crymsa-IOEo/Ssu3jZUwTOI/AAAAAAAAABI/snCKfceqZts/s400/debug+settings.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Then set debug to true within the web.config file of the WSS app&lt;br /&gt;&lt;/div&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;system.web&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;!--&lt;/span&gt;&lt;span style="color: green;"&gt; Set debug to true in order to be able to debug directly from VS &lt;/span&gt;&lt;span style="color: blue;"&gt;--&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;compilation &lt;/span&gt;&lt;span style="color: red;"&gt;batch&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;false&lt;/span&gt;" &lt;span style="color: red;"&gt;debug&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;true&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!—&lt;/span&gt;&lt;span style="color: green;"&gt;Probably some settings here already &lt;/span&gt;&lt;span style="color: blue;"&gt;--&amp;gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;compilation&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Courier New; font-size: 10pt;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;system.web&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Hit F5: GREAT SUCCESS &lt;br /&gt;The complete solution, including web part definitions and a pages library with content&amp;nbsp;is available &lt;a href="http://www.4shared.com/file/138043824/a28303da/ItemsDone4SharePoint-Part_1.html"&gt;here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2485944830160065050-4990846873203147855?l=ogarshol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ogarshol.blogspot.com/feeds/4990846873203147855/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ogarshol.blogspot.com/2009/10/development-environment-setup_06.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2485944830160065050/posts/default/4990846873203147855'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2485944830160065050/posts/default/4990846873203147855'/><link rel='alternate' type='text/html' href='http://ogarshol.blogspot.com/2009/10/development-environment-setup_06.html' title='Development environment setup'/><author><name>Øystein Garshol</name><uri>http://www.blogger.com/profile/12841414895483895925</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_Crymsa-IOEo/SsT8Md6_jaI/AAAAAAAAAAM/ScNLuzNqUvA/S220/OYSTEIN_GARSHOL.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_Crymsa-IOEo/Ssu3jZUwTOI/AAAAAAAAABI/snCKfceqZts/s72-c/debug+settings.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2485944830160065050.post-1410081670835354218</id><published>2009-10-03T16:23:00.001+02:00</published><updated>2009-10-06T19:36:58.504+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ideas'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint'/><title type='text'>An Idea</title><content type='html'>It struck me a couple of days ago that I wanted to play around&amp;nbsp;with Silverlight in a SharePoint context in my spare time as I'm currently unable to work with those technologies at work. &lt;br /&gt;&lt;br /&gt;I've previously created a generic Silverlight 2.0 application that allows concurrent work work with SharePoint lists in a more flexible and interactive way than what you achieve out of the Box, however in 2.0 I found that accessing SharePoint through it's standard&amp;nbsp;web services (and doing it all asynchronously)&amp;nbsp;is fairly cumbersome&amp;nbsp;when you require data from multiple sources. The option tocreat custom web services and deploy them to SharePoint&amp;nbsp;was also ruled out because&amp;nbsp;it required to many steps for changing interfaces. InstedeaI want to do a different approach using RIA Services and Silverlight 3.0. I want to be able to edit list items without having to write my own UI, so another goal is to see whether I can use dynamically annotate my classes using SharePoint meta data.&lt;br /&gt;&lt;br /&gt;As I prefer to work on a business case rather than just play with the technology, I decided to create a&amp;nbsp;digital Scrum Task/Planning Board&amp;nbsp;much like what you would find in Jira/Green Hopper (by the way, I'm a great fan!) but leveraging what SharePoint will offer in terms of security, content types etc). Hopefully in the coming months&amp;nbsp;I will create: &lt;br /&gt;&lt;ul&gt;&lt;li&gt;A set of SharePoint lists as containers for backlog items and sprint definitions&lt;/li&gt;&lt;li&gt;A Silverlight Application for creating and maintaining sprints with backlog items and subtasks&lt;/li&gt;&lt;li&gt;Burndown functionality&lt;/li&gt;&lt;li&gt;Attachment upload to backlog items&lt;/li&gt;&lt;li&gt;Ultimately:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;AWSP that puts it all together allowing it all to be deployed to a server and activated as features in any site&lt;/li&gt;&lt;li&gt;By changing content types or list definitions making it possible to extend functionality/fields for end users&lt;/li&gt;&lt;li&gt;Having fun&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2485944830160065050-1410081670835354218?l=ogarshol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ogarshol.blogspot.com/feeds/1410081670835354218/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ogarshol.blogspot.com/2009/10/idea.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2485944830160065050/posts/default/1410081670835354218'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2485944830160065050/posts/default/1410081670835354218'/><link rel='alternate' type='text/html' href='http://ogarshol.blogspot.com/2009/10/idea.html' title='An Idea'/><author><name>Øystein Garshol</name><uri>http://www.blogger.com/profile/12841414895483895925</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_Crymsa-IOEo/SsT8Md6_jaI/AAAAAAAAAAM/ScNLuzNqUvA/S220/OYSTEIN_GARSHOL.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2485944830160065050.post-1218703027815589053</id><published>2009-10-01T21:13:00.001+02:00</published><updated>2009-10-03T15:54:57.842+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Generic'/><category scheme='http://www.blogger.com/atom/ns#' term='Misc'/><title type='text'>Hello World</title><content type='html'>This evening I finally realized that time has come for me to step up and create a blog. As I'm a technical kind of guy the content will be mostly related to technical stuff, primarily Dynamics CRM, Sharepoint and related technologies.&lt;br /&gt;&lt;br /&gt;In the coming months I will hopefully spend some of my spare time investigating Silverlight and RIA services, and I'm currently eager to apply them all in a SharePoint context..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2485944830160065050-1218703027815589053?l=ogarshol.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ogarshol.blogspot.com/feeds/1218703027815589053/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ogarshol.blogspot.com/2009/10/hello-world.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2485944830160065050/posts/default/1218703027815589053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2485944830160065050/posts/default/1218703027815589053'/><link rel='alternate' type='text/html' href='http://ogarshol.blogspot.com/2009/10/hello-world.html' title='Hello World'/><author><name>Øystein Garshol</name><uri>http://www.blogger.com/profile/12841414895483895925</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_Crymsa-IOEo/SsT8Md6_jaI/AAAAAAAAAAM/ScNLuzNqUvA/S220/OYSTEIN_GARSHOL.jpg'/></author><thr:total>0</thr:total></entry></feed>
