<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
		xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
	xmlns:media="http://search.yahoo.com/mrss/"
>

<channel>
	<title>ThreeWill</title>
	<atom:link href="http://www.threewill.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.threewill.com</link>
	<description>SharePoint Showcase</description>
	<lastBuildDate>Tue, 31 Jan 2012 16:04:16 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<copyright>Copyright © ThreeWill 2012 </copyright>
	<managingEditor>dryan@threewill.com (John Underwood - ThreeWill)</managingEditor>
	<webMaster>dryan@threewill.com (John Underwood - ThreeWill)</webMaster>
	<ttl>1440</ttl>
	<image>
		<url>http://www.threewill.com/wp-content/uploads/SharePoint-Showcase-Podcast-144x144.png</url>
		<title>ThreeWill</title>
		<link>http://www.threewill.com</link>
		<width>144</width>
		<height>144</height>
	</image>
	<itunes:subtitle>SharePoint Showcase Podcast</itunes:subtitle>
	<itunes:summary>SharePoint Showcase</itunes:summary>
	<itunes:keywords>sharepoint, showcase, threewill</itunes:keywords>
	<itunes:category text="Technology">
		<itunes:category text="Software How-To" />
	</itunes:category>
	<itunes:author>John Underwood - ThreeWill</itunes:author>
	<itunes:owner>
		<itunes:name>John Underwood - ThreeWill</itunes:name>
		<itunes:email>dryan@threewill.com</itunes:email>
	</itunes:owner>
	<itunes:block>no</itunes:block>
	<itunes:explicit>no</itunes:explicit>
	<itunes:image href="http://www.threewill.com/wp-content/uploads/SharePoint-Showcase-Podcast.png" />
		<item>
		<title>Sandboxed Web Services</title>
		<link>http://www.threewill.com/2012/01/sandboxed-web-service/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=sandboxed-web-service</link>
		<comments>http://www.threewill.com/2012/01/sandboxed-web-service/#comments</comments>
		<pubDate>Wed, 25 Jan 2012 22:10:37 +0000</pubDate>
		<dc:creator>Kirk Liemohn</dc:creator>
				<category><![CDATA[Insights]]></category>
		<category><![CDATA[code-samples]]></category>
		<category><![CDATA[sandboxed-solutions]]></category>
		<category><![CDATA[web-services]]></category>

		<guid isPermaLink="false">http://www.threewill.com/?p=9194</guid>
		<description><![CDATA[Kirk Liemohn shares need to know details about using DataContracts within a Custom Sandboxed Web Service.  Enjoy learning more about this important subject!]]></description>
			<content:encoded><![CDATA[<h3>Playing in the Sand</h3>
<p>Those of you that have worked with Sandboxed Solutions know the give and take they represent: they provide solace and security to the administrators by insuring that runaway code doesn&#8217;t kill a server but at the same they can handcuff a developer in their quest to meet the customer&#8217;s needs.</p>
<p>I recently worked on a project that needed to provide a web service from within SharePoint in a way that was sandbox-friendly. A coworker of mine found a great link on creating custom web services within a sandbox: <a href="http://blogs.msdn.com/b/billgr/archive/2011/01/31/sandboxed-web-request-handler.aspx" target="_blank">Sandboxed Web Service &#8211; BillGr&#8217;s Blog &#8211; Site Home &#8211; MSDN Blogs</a>. I&#8217;ve done a bit of research to build upon the ideas presented in this article.</p>
<h3>Digging Deeper</h3>
<p>The example provided in the link about used a StringBuilder to emit JSON.  I like JSON, but I also like XML, especially when I want to use XSLT.  I also like using <a href="http://msdn.microsoft.com/en-us/library/ms733127.aspx" target="_blank">DataContracts</a>.  Here are some changes to the example provided in the blog referenced above showing a simple DataContract.  This has been tested not only in a sandboxed solution, but also in SharePoint Online.  To show it is possible to read post data, we also return a POSTed request body.</p>
<div id="attachment_9203" class="wp-caption alignnone" style="width: 534px"><a href="http://www.threewill.com/wp-content/uploads/contract11.png" rel="shadowbox[sbpost-9194];player=img;"><img class="size-full wp-image-9203 " title="contract1" src="http://www.threewill.com/wp-content/uploads/contract11.png" alt="" width="524" height="332" /></a><p class="wp-caption-text">Custom Data Contract Definition</p></div>
<p>In order to produce the desired output I provided an override to the Render() method in the Web Part. In this simple example I put the list items into an array of Task objects and output the data as XML or JSON.  Note that in lieu of custom XML, you can emit <a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.splistitemcollection.xml.aspx">SPListItemCollection.Xml</a>, but in many cases you want more control of what you are providing and it may not be list data at all (not to mention that the XML is quite bloated).</p>
<div id="attachment_9200" class="wp-caption alignnone" style="width: 553px"><a href="http://www.threewill.com/wp-content/uploads/contract2.png" rel="shadowbox[sbpost-9194];player=img;"><img class=" wp-image-9200  " title="contract2" src="http://www.threewill.com/wp-content/uploads/contract2.png" alt="" width="543" height="577" /></a><p class="wp-caption-text">Updated Web Part Code, Including Override to Render() Method</p></div>
<p>An example of the rendered XML is below (newlines and white space added for clarity).  Note that when using a browser to call the web service manually, you may have to choose to &#8220;view source&#8221; to see the output because of the limitation that we are unable to specify the Content-Type in the response header.  I was using the REST Client for Firefox so I could POST some data and easily set the Accept request header.</p>
<div id="attachment_9199" class="wp-caption alignnone" style="width: 542px"><a href="http://www.threewill.com/wp-content/uploads/contract3.png" rel="shadowbox[sbpost-9194];player=img;"><img class=" wp-image-9199  " title="contract3" src="http://www.threewill.com/wp-content/uploads/contract3.png" alt="" width="532" height="184" /></a><p class="wp-caption-text">XML Returned from Web Service Call</p></div>
<p>Using the JSON option, we get this output:</p>
<div id="attachment_9198" class="wp-caption alignnone" style="width: 534px"><a href="http://www.threewill.com/wp-content/uploads/contract4.png" rel="shadowbox[sbpost-9194];player=img;"><img class=" wp-image-9198  " title="contract4" src="http://www.threewill.com/wp-content/uploads/contract4.png" alt="" width="524" height="17" /></a><p class="wp-caption-text">Returned JSON from Web Service Call</p></div>
<p>Starting with the sample page referenced in the original blog post, I added a few more methods to test in different ways (note that I didn&#8217;t modify the existing method that was already in the code).</p>
<div id="attachment_9197" class="wp-caption alignnone" style="width: 567px"><a href="http://www.threewill.com/wp-content/uploads/contract5.png" rel="shadowbox[sbpost-9194];player=img;"><img class=" wp-image-9197  " title="contract5" src="http://www.threewill.com/wp-content/uploads/contract5.png" alt="" width="557" height="488" /></a><p class="wp-caption-text">Modified Script for Test Page</p></div>
<p>In addition to the above script, I added some markup for buttons:</p>
<div id="attachment_9196" class="wp-caption alignnone" style="width: 514px"><a href="http://www.threewill.com/wp-content/uploads/contract6.png" rel="shadowbox[sbpost-9194];player=img;"><img class=" wp-image-9196 " title="contract6" src="http://www.threewill.com/wp-content/uploads/contract6.png" alt="" width="504" height="43" /></a><p class="wp-caption-text">Buttons for Invoking Test Scripts</p></div>
<p>Testing my new code produced the following results (note that I&#8217;m using Tasks list because I&#8217;m expecting there to be a Status in the returned results):</p>
<div id="attachment_9195" class="wp-caption alignnone" style="width: 507px"><a href="http://www.threewill.com/wp-content/uploads/contract7.png" rel="shadowbox[sbpost-9194];player=img;"><img class="size-full wp-image-9195 " title="contract7" src="http://www.threewill.com/wp-content/uploads/contract7.png" alt="" width="497" height="587" /></a><p class="wp-caption-text">Results From New Methods on Test Page</p></div>
<h3>Building Castles In The Sand</h3>
<p>While there are still possible limitations to this (particularly related to the fact that we cannot manipulate the Response-Type in the HTTP Response Header), this is an interesting and exciting technique for implementing web services in a Sandboxed Solution.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.threewill.com/2012/01/sandboxed-web-service/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adding jQuery to SharePoint</title>
		<link>http://www.threewill.com/2012/01/adding-jquery-to-sharepoint/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=adding-jquery-to-sharepoint</link>
		<comments>http://www.threewill.com/2012/01/adding-jquery-to-sharepoint/#comments</comments>
		<pubDate>Wed, 25 Jan 2012 20:14:17 +0000</pubDate>
		<dc:creator>John Underwood</dc:creator>
				<category><![CDATA[Insights]]></category>
		<category><![CDATA[analogies]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://www.threewill.com/?p=9175</guid>
		<description><![CDATA[In this post, ThreeWill Technical Evangelist John Underwood looks at various approaches for introducing jQuery into the SharePoint environment.  As with most design decisions with SharePoint, there's not one best way but a number of options, each with their own pros and cons.]]></description>
			<content:encoded><![CDATA[<h3>Options, Options, Options</h3>
<p>As I research and learn more about SharePoint programming I occasionally come across blog posts that start with titles like “the best way…” or “the correct way…” to accomplish a certain task. If there’s anything I’ve learned with SharePoint along the way, it’s that there is rarely one correct and proper way of doing things; rather, there are usually a variety of approaches, each with its own pros and cons. To that end, this post attempts to document some of the ways one might include jQuery into a SharePoint site.</p>
<p>Note that this article isn’t intended to be a tutorial for jQuery (click <a href="http://docs.jquery.com/Tutorials" target="_blank">here</a> to learn more about jQuery). The presumption is that you’re reading this because you already know something about the power of jQuery and you wish to unleash that power in the context of SharePoint 2010. Also, note that I’m not trying to document every single way this problem can be solved; I’m just serving up some recipes that have worked for me. In addition, this article assumes that you already have some knowledge about SharePoint programming (such as using Visual Studio 2010 to create SharePoint projects). Finally, note that the demos below assume that you have Visual Studio 2010 and that you’re working against a Team Site.</p>
<h3>A Fork in the Road</h3>
<p>As Yogi Berra is alleged to have said, “If you see a fork in the road… take it!” In our case, there are several forks in the road:</p>
<ol>
<li>Do you need to include jQuery for the majority of the pages in a site, or just for one or two?</li>
<li>Where do you need to use jQuery (i.e. in a Visual Web Part, on an Application Page, on a Site Page)?</li>
<li>Will you be working with a Sandboxed Solution?</li>
</ol>
<p>The answers to these questions will influence which of the following recipes will work for you.</p>
<h3>Recipe 1: Loading jQuery from a Document Library with a Custom Action</h3>
<p>This approach is useful when you need to have jQuery available to most or all of the pages in a site. It is also useful in scenario where you’re working in a Sandboxed Solution, since such solutions cannot store files in the SharePoint Root (or “14 hive”). It is also useful in that .js files stored in a document library can be easily maintained without administrator intervention.</p>
<p>On the downside, storing .js files in a library means they could accidentally or intentionally be deleted or changed, resulting in improper functioning of the application.</p>
<p>This recipe also includes a small bit of custom jQuery code that will be included on each page for demonstration.</p>
<p>1. Create a Visual Studio 2010 Empty SharePoint Project (either Farm Solution or Sandboxed Solution).</p>
<p>2. Add a Module named DeployJQuery; delete the sample.txt file and add your jQuery file to the module.</p>
<p style="text-align: center;"><a href="http://www.threewill.com/2012/01/recipes-for-adding-jquery-to-sharepoint-2010/recipe1a/" rel="attachment wp-att-9051" class="broken_link"><img class="size-full wp-image-9051 aligncenter" title="recipe1a" src="http://www.threewill.com/wp-content/uploads/recipe1a.png" alt="DeployJQuery Module" width="149" height="56" /></a></p>
<p>3. Modify the Elements.xml file for the DeployJQuery module as follows (note that all line numbers are provided for convenience only, and should not be included in source):</p>
<p><code>&lt;?xml version="1.0" encoding="utf-8"?&gt;<br />
&lt;Elements xmlns="http://schemas.microsoft.com/sharepoint/"&gt;<br />
&lt;Module Name="DeployJQuery"&gt;<br />
&lt;File Path="DeployJQuery\jquery-1.6.4.js" Url="SiteAssets/jquery-1.6.4.js" /&gt;<br />
&lt;/Module&gt;<br />
&lt;/Elements&gt;</code></p>
<p>4. Add a second Module named DeployCustomJS; rename the sample.txt file to Custom.js.</p>
<p style="text-align: center;"><a href="http://www.threewill.com/2012/01/recipes-for-adding-jquery-to-sharepoint-2010/recipe1b/" rel="attachment wp-att-9052" class="broken_link"><img class="size-full wp-image-9052 aligncenter" title="recipe1b" src="http://www.threewill.com/wp-content/uploads/recipe1b.png" alt="" width="146" height="52" /></a></p>
<p>5. Modify the contents of the Custom.js file:</p>
<p><code>$(document).ready(function () {<br />
$('.static.menu-item').mouseover(function () {<br />
$(this).fadeTo("fast", 0.33);<br />
$(this).fadeTo("fast", 1);<br />
});<br />
});</code></p>
<p>6. Modify the Elements.xml for the DeployCustomJS module as follows:</p>
<p><code>&lt;?xml version="1.0" encoding="utf-8"?&gt;<br />
&lt;Elements xmlns="http://schemas.microsoft.com/sharepoint/"&gt;<br />
&lt;Module Name="DeployCustomJS"&gt;<br />
&lt;File Path="DeployCustomJS\Custom.js" Url="SiteAssets/Custom.js" /&gt;<br />
&lt;/Module&gt;<br />
&lt;/Elements&gt;</code></p>
<p>7. Add an Empty Element named LoadJQuery and then modify its Elements.xml file as follows:</p>
<p><code><span style="text-align: left;">&lt;?xml version="1.0" encoding="utf-8"?&gt;</span><br />
<span style="text-align: left;">&lt;Elements xmlns="http://schemas.microsoft.com/sharepoint/"&gt;</span><br />
<span style="text-align: left;">&lt;CustomAction</span> <span style="text-align: left;">Id="BlogSample.LoadJQuery"</span><br />
<span style="text-align: left;">ScriptSrc="~site/SiteAssets/jquery-1.6.4.js"</span><br />
<span style="text-align: left;">Location="ScriptLink"</span> <span style="text-align: left;">Sequence="10020" /&gt;</span><br />
<span style="text-align: left;">&lt;/Elements&gt;</span></code></p>
<p>8. Add a second Empty Element named LoadCustomJS; modify its Elements.xml to match the following:</p>
<p><code>&lt;?xml version="1.0" encoding="utf-8"?&gt;<br />
&lt;Elements xmlns="http://schemas.microsoft.com/sharepoint/"&gt;<br />
&lt;CustomAction Id="BlogSample.Script"<br />
ScriptSrc="~site/SiteAssets/Custom.js"<br />
Location="ScriptLink" Sequence="10030" /&gt;<br />
&lt;/Elements&gt;</code></p>
<p>9. Deploy the project.</p>
<p>10. Navigate to the site. As you float your mouse over the menu items in the quick-launch menu you should see them pulse from solid to opaque to solid.</p>
<p style="text-align: center;"><a href="http://www.threewill.com/2012/01/recipes-for-adding-jquery-to-sharepoint-2010/recipe1c/" rel="attachment wp-att-9053" class="broken_link"><img class="size-full wp-image-9053 aligncenter" title="recipe1c" src="http://www.threewill.com/wp-content/uploads/recipe1c.gif" alt="" width="158" height="139" /></a></p>
<h3>Recipe 2: Loading jQuery from SharePoint Root using ScriptLink Control</h3>
<p>This is useful when you’re using jQuery on an application page or a Visual Web Part; both can easily be configured to use one or more ScriptLink controls.</p>
<p>Obvious limitations include: jQuery is only made available to one page at a time; use of ScriptLink control is limited to certain kinds of pages; and deployment of files to SharePoint root precludes the use of this technique for Sandboxed Solutions.</p>
<p>1. Create a new Farm Solution in Visual Studio 2010.</p>
<p>2. Add a new SharePoint mapped folder to the project; the mapped folder should point to {SharePointRoot}\Template\LAYOUTS\1033.</p>
<p>3. Underneath the mapped folder create a new mapped folder with the same name as your project (in my case, Recipe2 is the name of the sample project). You can see the results below:</p>
<p style="text-align: center;"><a href="http://www.threewill.com/wp-content/uploads/recipe2a.png" rel="shadowbox[sbpost-9175];player=img;"><img class="size-full wp-image-9054 aligncenter" title="recipe2a" src="http://www.threewill.com/wp-content/uploads/recipe2a.png" alt="" width="163" height="53" /></a></p>
<p>4. Deploy the project (this is done here so the ScriptLink control won’t produce an error on a later step when you try to use the .js file).</p>
<p>5. Add a Visual Web Part to the project and name it jQueryPart.</p>
<p>6. Add a ScriptLink control to the web part (see source below). Set the ScriptLink’s Name property to &lt;projectname&gt;/jquery-1.6.4.js (where &lt;projectname&gt; is the name of the folder you created in step 3 above).</p>
<p><code>&lt;SharePoint:ScriptLink ID="ScriptLinkJQuery" runat="server"<br />
Name="Recipe2/jquery-1.6.4.js" /&gt;</code></p>
<p>7. Add the following markup to the web part just below the ScriptLink:</p>
<p><code>&lt;script type="text/javascript"&gt;<br />
var colors = ['lime', 'aqua', 'orange'];<br />
var i = 0; $(document).ready(function () {<br />
$('#sample').css('background-color', colors[i]);<br />
$('#sample').click(function () {<br />
i++;<br />
if (i &gt;= colors.length) { i = 0; }<br />
$(this).css('background-color', colors[i]);<br />
});<br />
});<br />
&lt;/script&gt;</code></p>
<p>&lt;span id=&#8221;sample&#8221; style=&#8221;cursor: pointer&#8221;&gt; Click me &lt;/span&gt;</p>
<p>8. Deploy the project.</p>
<p>9. Navigate to the site and then navigate to the Site Pages library.</p>
<p>10. Add a new page named jQueryTest.</p>
<p>11. On the jQuery test page click Insert tab | Web Part | Custom | jQueryPart; then click the Add button to place the part on the page as follows:</p>
<p style="font-size: 10px; text-align: center;"><a href="http://www.threewill.com/wp-content/uploads/recipe2b.png" rel="shadowbox[sbpost-9175];player=img;"><img class="wp-image-9055 aligncenter" title="recipe2b" src="http://www.threewill.com/wp-content/uploads/recipe2b.png" alt="" width="458" height="317" /></a></p>
<p>12. Click the Save and Close button to save your changes.</p>
<p style="text-align: center;"><a href="http://www.threewill.com/wp-content/uploads/recipe2c.png" rel="shadowbox[sbpost-9175];player=img;"><img class="wp-image-9056 aligncenter" title="recipe2c" src="http://www.threewill.com/wp-content/uploads/recipe2c.png" alt="" width="189" height="144" /></a></p>
<p>13. Click the “Click me” text and observe the color change.</p>
<p style="text-align: center;"><a href="http://www.threewill.com/2012/01/recipes-for-adding-jquery-to-sharepoint-2010/recipe2d/" rel="attachment wp-att-9057" class="broken_link"><img class="size-full wp-image-9057 aligncenter" title="recipe2d" src="http://www.threewill.com/wp-content/uploads/recipe2d.gif" alt="" width="162" height="96" /></a></p>
<h3>Recipe 3: Loading jQuery from a Content Delivery Network (CDN) using the Content Editor web part</h3>
<p>This approach is beneficial when you only need to use jQuery on one or a small number of site pages (both Wiki and Web Part Pages). It is also advantageous in that it does not require storing any extra files on the SharePoint server: the jQuery source is loaded from a <a href="http://docs.jquery.com/Downloading_jQuery" target="_blank">Content Delivery Network</a> while the jQuery code that you author is embedded directly into the page itself. Additionally, this solution doesn’t violate any of the tenets of Sandboxed Solutions.</p>
<p>Obviously this isn’t a useful approach for site-wide jQuery needs. Also, there may be some rare cases where you can’t accomplish what you want with this approach because the jQuery links and source are placed down within the document as opposed to the preferred approach of locating script in the &lt;head&gt; section of the HTML markup.</p>
<p>1. Navigate to the site pages library and add a new page named jQueryContent.</p>
<p>2. Add a Content Editor Web Part to the page.</p>
<p style="text-align: center;"><a href="http://www.threewill.com/wp-content/uploads/recipe3a.png" rel="shadowbox[sbpost-9175];player=img;"><img class="wp-image-9058 aligncenter" title="recipe3a" src="http://www.threewill.com/wp-content/uploads/recipe3a.png" alt="" width="446" height="279" /></a></p>
<p>3. Edit the Content Editor Web Part and click on the “Click Here to add new content” link.</p>
<p style="text-align: center;"><a href="http://www.threewill.com/wp-content/uploads/recipe3b.png" rel="shadowbox[sbpost-9175];player=img;"><img class="wp-image-9059 aligncenter" title="recipe3b" src="http://www.threewill.com/wp-content/uploads/recipe3b.png" alt="" width="457" height="121" /></a></p>
<p>4. On the Ribbon select HTML | Edit HTML Source.</p>
<p style="text-align: center;"><a href="http://www.threewill.com/wp-content/uploads/recipe3c.png" rel="shadowbox[sbpost-9175];player=img;"><img class="wp-image-9060 aligncenter" title="recipe3c" src="http://www.threewill.com/wp-content/uploads/recipe3c.png" alt="" width="321" height="205" /></a></p>
<p>5. In the Edit HTML Source dialog enter the following markup and then click OK:</p>
<p><code>&lt;script language="javascript" type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"&gt; &lt;/script&gt; &lt;script language="javascript" type="text/javascript"&gt;<br />
$(document).ready(function() { alert("jQuery"); });<br />
&lt;/script&gt;</code></p>
<p>6. Click OK to stop editing web part, then click Save and Close button.</p>
<p>7. The page should now display a popup as follows:</p>
<p style="text-align: center;"><a href="http://www.threewill.com/2012/01/recipes-for-adding-jquery-to-sharepoint-2010/recipe3d/" rel="attachment wp-att-9061" class="broken_link"><img class="wp-image-9061 aligncenter" title="recipe3d" src="http://www.threewill.com/wp-content/uploads/recipe3d.png" alt="" width="487" height="263" /></a></p>
<h3>What about Master Pages?</h3>
<p>One can certainly embed the needed jQuery references directly in a master page, using either a ScriptLink control or a simple &lt;script&gt; tag. However, I’ve chosen not to focus on that approach simply because I’m inclined to view modifying the Master Page as something I don’t want to do unless I absolutely must. If you’ll be changing the Master Page as a part of a bigger branding solution then it certainly makes sense to embed jQuery there; otherwise, Recipe 1 above will give you similar site-wide functionality in what is perhaps and easier and safer way.</p>
<h3>Learning to be a great cook</h3>
<p>One of the attributes of a great cook is the ability to synthesize ingredients to come up with something new and delicious. The same can be said of these SharePoint recipes. For example, the use of a Content Delivery Network to serve up jQuery isn’t limited to just one recipe. Experience and experimentation will allow you to find the mix of ingredients that works best for your masterpiece.</p>
<h3>Careful not to burn yourself…</h3>
<p>There are always hazards when cooking: hot stoves, sharp knives, and dropped pans. Likewise there are hazards involved in integrating jQuery with SharePoint, including the following:</p>
<ul>
<li>The risk that some other developer would introduce their own jQuery solution, resulting in a possible conflict of versions or files.</li>
<li>Failure to test thoroughly resulting in erratic behavior in the SharePoint UI.</li>
<li>The lack of Microsoft providing an “officially sanctioned” approach to introducing jQuery into SharePoint means that any introduction of jQuery involves a certain amount of wizardry.</li>
</ul>
<p>Hazards notwithstanding, the power of jQuery makes it a compelling option for customizing and enhancing the SharePoint UI.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.threewill.com/2012/01/adding-jquery-to-sharepoint/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SharePoint Showcase Podcast</title>
		<link>http://www.threewill.com/2011/12/sharepoint-showcase-podcast-01-01/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=sharepoint-showcase-podcast-01-01</link>
		<comments>http://www.threewill.com/2011/12/sharepoint-showcase-podcast-01-01/#comments</comments>
		<pubDate>Wed, 21 Dec 2011 14:41:55 +0000</pubDate>
		<dc:creator>John Underwood</dc:creator>
				<category><![CDATA[Podcast]]></category>

		<guid isPermaLink="false">http://www.threewill.com/?p=8951</guid>
		<description><![CDATA[Inaugural episode. Includes an introduction to the SharePoint Showcase Podcast, an interview with Andy Lowe of Informative Graphics, and a technical tip for creating a clickable hyperlink from a calculated list or library column.]]></description>
			<content:encoded><![CDATA[<p>Links from podcast:</p>
<ul>
<li><a title="SharePoint Hyperlink Column" href="http://www.threewill.com/2011/12/sharepoint-hyperlink-column/" target="_blank">SharePoint Hyperlink Column</a></li>
<li><a href="http://www.infograph.com/" target="_blank">Informative Graphics</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.threewill.com/2011/12/sharepoint-showcase-podcast-01-01/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
			<enclosure url="http://www.threewill.com/wp-content/uploads/SharePoint-Showcase-01-01.mp3" length="17909469" type="audio/mpeg" />
		<itunes:duration>0:18:39</itunes:duration>
		<itunes:subtitle>Inaugural episode. Includes an introduction to the SharePoint Showcase Podcast, an interview with Andy Lowe of Informative Graphics, and a technical tip for creating a clickable hyperlink from a calculated list or library column.</itunes:subtitle>
		<itunes:summary>SharePoint Showcase</itunes:summary>
		<itunes:keywords>Podcast</itunes:keywords>
		<itunes:author>John Underwood - ThreeWill</itunes:author>
		<itunes:explicit>no</itunes:explicit>
		<itunes:block>no</itunes:block>
	</item>
		<item>
		<title>SharePoint Hyperlink Column</title>
		<link>http://www.threewill.com/2011/12/sharepoint-hyperlink-column/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=sharepoint-hyperlink-column</link>
		<comments>http://www.threewill.com/2011/12/sharepoint-hyperlink-column/#comments</comments>
		<pubDate>Tue, 20 Dec 2011 19:37:26 +0000</pubDate>
		<dc:creator>John Underwood</dc:creator>
				<category><![CDATA[Insights]]></category>
		<category><![CDATA[code-samples]]></category>
		<category><![CDATA[computed-fields]]></category>
		<category><![CDATA[hyperlinks]]></category>

		<guid isPermaLink="false">http://www.threewill.com/?p=8911</guid>
		<description><![CDATA[Learn about how to use JavaScript to create a SharePoint field that is a click-able hyperlink.  John Underwood walks you through what you need to know.]]></description>
			<content:encoded><![CDATA[<p>If you Google “SharePoint hyperlink calculated column” you’ll find plenty of blog posts and discussions about how to turn a calculated column into a clickable hyperlink for your users. Most of these examples are based on deriving a URL that allows a user to navigate to a particular place or document (such as http://spsite/mylib/sample.doc). However, in my case I needed to run a JavaScript statement from my link (such as &lt;a href=”javascript:alert(‘hello world!’)”&gt;Hello&lt;/a&gt;)</p>
<p>I could give you the full multi-paragraph tour of the different options that I tried (and failed on) – but’s let’s skip that and just get to the solution.</p>
<h3>Creating the Calculated Column</h3>
<p>My calculated column needed to provide two things: (a) the Title of the entry in the library, and (b) a unique token where I could find all instances of the calculated column on the page and convert their contents as desired. I accomplished that with the following formula:</p>
<p>=&#8221;{125ED6EA-0E45-4A0B-9235-B898B1C104D4}&#8221;&amp;[Title]</p>
<h3>Making the Results Behave</h3>
<p>Now obviously, the formula above would produce output that would scare our users. So the next step was to create a chunk of JavaScript that would find the GUID, strip it off, and then formulate the remaining title into a clickable link. After doing a little inspection of the HTML produced by SharePoint, I was able to deduce that my data was always inserted into an element that had a certain CSS class associated with it (ms-vb2 in this case), so I created a jQuery selector that would search for elements that were decorated with that class and contained the GUID. If you reference Figure 1 below, you’ll see the selector code on lines 14 through 16.</p>
<div id="attachment_8913" class="wp-caption alignnone" style="width: 545px"><a href="http://www.threewill.com/2011/12/sharepoint-hyperlink-column/figure-1-javascript-code-listing-2/" rel="attachment wp-att-8913"><img class="size-full wp-image-8913 " title="Figure 1 JavaScript Code Listing" src="http://www.threewill.com/wp-content/uploads/hyperlink-blog-1.png" alt="" width="535" height="274" /></a><p class="wp-caption-text">Figure 1: JavaScript Code Listing</p></div>
<p>The remaining code in Figure 1 breaks down as follows:</p>
<ul>
<li>Line 17: extract the text node from the element</li>
<li>Line 18: strip off the GUID, leaving just the Title remaining</li>
<li>Line 19: create a string that contained the anchor tag to be added</li>
<li>Line 20: replace the matching element’s HTML with the newly formatted anchor tag</li>
</ul>
<p>One other thought: don’t be distracted by the fact that I’m simply calling the JavaScript alert() function. I could call any JavaScript function I want, including my own custom code or functions of the SharePoint client API. On the project where I employed this technique I called SP.UI.ModalDialog.showModalDialog() to display information in a modal dialog.</p>
<h3>Before and After</h3>
<p>Every great late-night infomercial has to have a before and after shot to drive home the effectiveness of the product. Figure 2 and Figure 3 show us the fabulous results in this case.</p>
<div id="attachment_8914" class="wp-caption alignnone" style="width: 511px"><a href="http://www.threewill.com/2011/12/sharepoint-hyperlink-column/hyperlink-blog-2/" rel="attachment wp-att-8914"><img class="size-full wp-image-8914  " title="hyperlink blog 2" src="http://www.threewill.com/wp-content/uploads/hyperlink-blog-2.png" alt="" width="501" height="59" /></a><p class="wp-caption-text">Figure 2: Calculated column before JavaScript</p></div>
<div id="attachment_8915" class="wp-caption alignnone" style="width: 508px"><a href="http://www.threewill.com/2011/12/sharepoint-hyperlink-column/hyperlink-blog-3/" rel="attachment wp-att-8915"><img class="size-full wp-image-8915  " title="hyperlink blog 3" src="http://www.threewill.com/wp-content/uploads/hyperlink-blog-3.png" alt="" width="498" height="54" /></a><p class="wp-caption-text">Figure 3: Calculated column after JavaScript</p></div>
<p>You can also see in Figure 4 that upon clicking the link the popup shows the Title of the library item.</p>
<div id="attachment_8916" class="wp-caption alignnone" style="width: 512px"><a href="http://www.threewill.com/2011/12/sharepoint-hyperlink-column/hyperlink-blog-4/" rel="attachment wp-att-8916"><img class="size-full wp-image-8916  " title="hyperlink blog 4" src="http://www.threewill.com/wp-content/uploads/hyperlink-blog-4.png" alt="" width="502" height="111" /></a><p class="wp-caption-text">Figure 4: Popup appears when calculated column link is clicked</p></div>
<h3> Constraints, Gotchas, and Notes</h3>
<p>Obviously, you will have to add jQuery to your SharePoint page or pages in order to have this work. There are several ways to add jQuery to SharePoint, but enumerating each of them is beyond the scope of this article (maybe we’ll get to that one in a future blog post).</p>
<p>In my case I loaded jQuery and my own script from .js files that I loaded to the Site Assets library. Why? Because I was working in a Sandboxed Solution and therefore couldn’t store anything under the LAYOUTS folder (I smell another future blog post).</p>
<p>Finally, it would be very easy for a user to enter a single quote in the Title column and break my code. That’s right, the same issues that led us to SQL injection are present here. In the real world we’d have to add the additional code to scrub the data and properly escape any characters that would interfere with the proper function of our code.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.threewill.com/2011/12/sharepoint-hyperlink-column/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>November 2011 Newsletter</title>
		<link>http://www.threewill.com/2011/11/november-2011-newsletter/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=november-2011-newsletter</link>
		<comments>http://www.threewill.com/2011/11/november-2011-newsletter/#comments</comments>
		<pubDate>Mon, 21 Nov 2011 16:00:57 +0000</pubDate>
		<dc:creator>Danny Ryan</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[newsletters]]></category>

		<guid isPermaLink="false">http://www.threewill.com/?p=5161</guid>
		<description><![CDATA[ThreeWill reaches our 10 year anniversary, meet the newest ThreeWiller, and sign up for a Lunch and Learn Workshop on December 1st in Atlanta.]]></description>
			<content:encoded><![CDATA[<p><img id="nov2011newsletter" src="/wp-content/uploads/nov-2011-newsletter.jpg" alt="" name="November 2011 Newsletter" width="570" height="680" usemap="#m_nov2011newsletter" border="0" /></p>
<map id="m_nov2011newsletter" name="m_nov2011newsletter">
<area shape="rect" coords="0,628,570,680" href="http://www.threewill.com/" alt="" />
<area shape="poly" coords="-1,485,571,485,571,610,0,610,-1,485" href="http://www.regonline.com/jiveatlanta" alt="" />
<area shape="poly" coords="129,125,132,110,140,97,151,89,165,86,498,86,513,89,524,97,532,110,535,125,535,202,532,217,524,230,513,238,498,241,165,241,151,238,140,230,132,217,129,202,129,125,129,125" href="http://www.threewill.com/tag/threewill-heroes/" alt="" />
<area shape="poly" coords="339,327,541,327,541,407,339,407,339,327" href="http://www.threewill.com/2011/11/not-all-lists-are-created-equal/" alt="" />
<area shape="poly" coords="126,327,328,327,328,407,126,407,126,327" href="http://www.threewill.com/kpuffenberger" alt="" />
<area shape="poly" coords="215,253,416,253,416,303,215,304,215,253" href="http://www.threewill.com/dryan" alt="" />
<area shape="poly" coords="165,415,364,415,364,466,165,466,165,415" href="http://www.threewill.com/kpuffenberger" alt="" />
<area shape="rect" coords="375,414,570,466" href="http://www.threewill.com/pskelly" alt="" />
<area shape="poly" coords="18,344,94,344,94,376,18,376,18,344" href="http://www.threewill.com/careers/home/job-openings/" alt="" />
<area shape="poly" coords="18,425,96,425,96,457,18,457,18,425" href="http://www.threewill.com/contactus/" alt="" />
<area shape="poly" coords="18,384,96,384,96,416,18,416,18,384" href="http://www.threewill.com/events/" alt="" />
<area shape="poly" coords="18,304,99,304,99,336,18,336,18,304" href="http://www.threewill.com/careers/" alt="" />
<area shape="poly" coords="18,264,103,264,103,296,18,296,18,264" href="http://www.threewill.com/catalog/" alt="" />
<area shape="poly" coords="18,221,96,221,96,253,18,253,18,221" href="http://www.linkedin.com/companies/threewill" alt="" />
<area shape="poly" coords="18,181,102,181,102,213,18,213,18,181" href="http://www.threewill.com/blog" alt="" />
<area shape="poly" coords="18,137,96,137,96,169,18,169,18,137" href="http://twitter.com/threewill" alt="" />
<area shape="poly" coords="18,95,98,95,98,127,18,127,18,95" href="http://www.facebook.com/pages/ThreeWill/88792767817" alt="" /> </map>
]]></content:encoded>
			<wfw:commentRss>http://www.threewill.com/2011/11/november-2011-newsletter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Not All Lists Are Created Equal</title>
		<link>http://www.threewill.com/2011/11/not-all-lists-are-created-equal/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=not-all-lists-are-created-equal</link>
		<comments>http://www.threewill.com/2011/11/not-all-lists-are-created-equal/#comments</comments>
		<pubDate>Mon, 14 Nov 2011 17:53:50 +0000</pubDate>
		<dc:creator>Pete Skelly</dc:creator>
				<category><![CDATA[Insights]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[gotchas]]></category>
		<category><![CDATA[lists]]></category>
		<category><![CDATA[SPEmailHandler]]></category>

		<guid isPermaLink="false">http://www.threewill.com/?p=8846</guid>
		<description><![CDATA[Pete Skelly shares a gotcha regarding custom lists and using SPEmailHandler (with the help of .NET Reflector, again).]]></description>
			<content:encoded><![CDATA[<p>Apparently, not all lists are created equal as far as email is concerned.  Custom lists cannot be email enabled by the standard &#8220;List Settings::Incoming email settings” configuration setting.</p>
<p>Digging into the code (via .NET Reflector) I uncovered more detail. There is a property on each list named &#8220;CanReceiveEmail&#8221; which enables email for a list. Unfortunately, the code associated with this property only functions for the out-of-the-box list templates.</p>
<p>The overall email process goes as follows:</p>
<ol>
<li>A timer job calls the SPIncomingEmailServiceInstance.ProcessEmail() method; it picks up the *.eml files and begins the processing (for development environments this can be configured to a local folder in IIS for testing).</li>
<li>Further into the process the SPEmailMap.GetEmailAliasRecord() method calls a stored procedure in the SharePoint Admin database called proc_getEmailEnabledListsByAlias.</li>
<li>The proc_getEmailEnabledListsByAlias stored procedure checks for the alias portion of the incoming email settings (e.g. the portion of the address <em>before</em> the “@” sign) in the EmailEnabledLists table.</li>
<li>The stored procedure returns the guids for the site, web, and list for the email alias; from there, the SPEmailEngine.HandleEmailFilesForWeb() begins processing the emails for the Web/Lists.</li>
<li>At this point the SPEmailHandler.GetHandler(SPList) method is called and determines the email handler for a list.</li>
</ol>
<p>The SPEmailHandler implementation (such as SPDocLibEmailHandler) is then responsible for carrying out the reception of emails for the list. For reference, see the figure below:</p>
<div class="mceTemp mceIEcenter" style="text-align: center;">
<dl id="attachment_8850" class="wp-caption aligncenter" style="width: 366px;">
<dt class="wp-caption-dt"><a href="http://www.threewill.com/2011/11/not-all-lists-are-created-equal/supported-types-for-email-handler-2/" rel="attachment wp-att-8850"><img class="size-full wp-image-8850 " title="Supported Types for EMail Handler" src="http://www.threewill.com/wp-content/uploads/SPEmailHandler_21.png" alt="Supported Types for EMail Handler" width="356" height="412" /></a></dt>
<dd class="wp-caption-dd">Supported Types for EMail Handler</dd>
</dl>
</div>
<p>So then, how can we have email enabled Custom Lists? The SPExternalEmailHandler is the key. As seen in the code listing below, the SPExternalEMailHandler class is actually an SPEmailHandler subclass which  has a ProcessMessage() method.</p>
<div id="attachment_8857" class="wp-caption aligncenter" style="width: 536px"><a href="http://www.threewill.com/2011/11/not-all-lists-are-created-equal/processmessage-method-listing/" rel="attachment wp-att-8857"><img class="size-full wp-image-8857 " title="ProcessMessage Method listing" src="http://www.threewill.com/wp-content/uploads/processmessage-method-listing.png" alt="ProcessMessage Method listing" width="526" height="197" /></a><p class="wp-caption-text">ProcessMessage() Method listing</p></div>
<p>So, we can attach SPEmailEventReceivers to any list based on this code, but what do we lose?   Since the processing of the message is now totally on you, you now have to manage the storage of the attachments, security of who is posting, virus scanning, and a whole host of other things.  Doing a full run through of the SPEmailHandler and its subclasses (like the ones below) is probably a prerequisite for estimation and expectation setting  before rolling your own for a client.</p>
<div id="attachment_8858" class="wp-caption aligncenter" style="width: 414px"><a href="http://www.threewill.com/2011/11/not-all-lists-are-created-equal/spemailhandler-and-its-subclasses/" rel="attachment wp-att-8858"><img class="size-full wp-image-8858 " title="SPEmailHandler and its subclasses" src="http://www.threewill.com/wp-content/uploads/spemailhandler-and-its-subclasses.png" alt="SPEmailHandler and its subclasses" width="404" height="160" /></a><p class="wp-caption-text">SPEmailHandler and its subclasses</p></div>
<p>While it is great to have options, remember that if you undertake writing your own handler you&#8217;ll have several important expectations to meet in your code. Proceed with caution!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.threewill.com/2011/11/not-all-lists-are-created-equal/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>October 2011 Newsletter</title>
		<link>http://www.threewill.com/2011/10/october-2011-newsletter/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=october-2011-newsletter</link>
		<comments>http://www.threewill.com/2011/10/october-2011-newsletter/#comments</comments>
		<pubDate>Mon, 31 Oct 2011 15:00:13 +0000</pubDate>
		<dc:creator>Danny Ryan</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[client-object-model]]></category>
		<category><![CDATA[newsletters]]></category>

		<guid isPermaLink="false">http://www.threewill.com/?p=5159</guid>
		<description><![CDATA[ThreeWill is hiring, meet the newest ThreeWiller, and find out who was our final ThreeWill Hero.]]></description>
			<content:encoded><![CDATA[<p><img id="oct2011newsletter" src="/wp-content/uploads/oct-2011-newsletter.jpg" alt="" name="October 2011 Newsletter" width="570" height="680" usemap="#m_oct2011newsletter" border="0" /></p>
<map id="m_oct2011newsletter" name="m_oct2011newsletter">
<area shape="rect" coords="0,628,570,680" href="http://www.threewill.com/" alt="" />
<area shape="poly" coords="-1,485,571,485,571,610,0,610,-1,485" href="http://www.threewill.com/2011/10/threewill-hero-jason-jones/" alt="" />
<area shape="poly" coords="129,125,132,110,140,97,151,89,165,86,498,86,513,89,524,97,532,110,535,125,535,202,532,217,524,230,513,238,498,241,165,241,151,238,140,230,132,217,129,202,129,125,129,125" href="http://www.threewill.com/careers/home/job-openings/" alt="" />
<area shape="poly" coords="339,327,541,327,541,407,339,407,339,327" href="http://www.threewill.com/2011/10/client-object-model/" alt="" />
<area shape="poly" coords="126,327,328,327,328,407,126,407,126,327" href="http://www.threewill.com/bmorris" alt="" />
<area shape="poly" coords="215,253,416,253,416,303,215,304,215,253" href="http://www.threewill.com/dryan" alt="" />
<area shape="poly" coords="165,415,364,415,364,466,165,466,165,415" href="http://www.threewill.com/bmorris" alt="" />
<area shape="rect" coords="375,414,570,466" href="http://www.threewill.com/pskelly" alt="" />
<area shape="poly" coords="18,344,94,344,94,376,18,376,18,344" href="http://www.threewill.com/careers/home/job-openings/" alt="" />
<area shape="poly" coords="18,425,96,425,96,457,18,457,18,425" href="http://www.threewill.com/contactus/" alt="" />
<area shape="poly" coords="18,384,96,384,96,416,18,416,18,384" href="http://www.threewill.com/events/" alt="" />
<area shape="poly" coords="18,304,99,304,99,336,18,336,18,304" href="http://www.threewill.com/careers/" alt="" />
<area shape="poly" coords="18,264,103,264,103,296,18,296,18,264" href="http://www.threewill.com/catalog/" alt="" />
<area shape="poly" coords="18,221,96,221,96,253,18,253,18,221" href="http://www.linkedin.com/companies/threewill" alt="" />
<area shape="poly" coords="18,181,102,181,102,213,18,213,18,181" href="http://www.threewill.com/blog" alt="" />
<area shape="poly" coords="18,137,96,137,96,169,18,169,18,137" href="http://twitter.com/threewill" alt="" />
<area shape="poly" coords="18,95,98,95,98,127,18,127,18,95" href="http://www.facebook.com/pages/ThreeWill/88792767817" alt="" /> </map>
]]></content:encoded>
			<wfw:commentRss>http://www.threewill.com/2011/10/october-2011-newsletter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ThreeWill Hero &#8211; Jason Jones</title>
		<link>http://www.threewill.com/2011/10/threewill-hero-jason-jones/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=threewill-hero-jason-jones</link>
		<comments>http://www.threewill.com/2011/10/threewill-hero-jason-jones/#comments</comments>
		<pubDate>Mon, 31 Oct 2011 13:00:46 +0000</pubDate>
		<dc:creator>Danny Ryan</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[threewill-heroes]]></category>
		<category><![CDATA[we-love-our-partners]]></category>

		<guid isPermaLink="false">http://www.threewill.com/?p=8786</guid>
		<description><![CDATA[To celebrate ThreeWill reaching our ten year anniversary in 2011, each month from January until October we are going to highlight ten key people who were influential to our success. October’s hero is Jason Jones from the Microsoft Corporation.]]></description>
			<content:encoded><![CDATA[<h3>Ending with a Bang</h3>
<p>Wow, we&#8217;re at our last ThreeWill Hero. In this final post, we want to recognize both a special person and a special company. The person that we would like to recognize is Jason Jones and the company is Microsoft. Jason epitomizes all that is good about partnering with Microsoft. He&#8217;s a great communicator, he&#8217;s energetic and aggressive at the right times, and he looks for opportunities that make sense for both Microsoft and ThreeWill.</p>
<a href="http://www.crunchbase.com/company/microsoft">CrunchBase Information on Microsoft</a><br/>
<h3>A Microsoft Partner Since the Beginning</h3>
<p>One of the first things that we did as a business was to register as a Microsoft partner. Besides the generous licensing offered from partnering with Microsoft, this gave us the confidence that we were not starting our business alone. We felt like our company was starting out with one of the best brands in the industry and gained credibility that comes only by working with a company that has a strong reputation like Microsoft.</p>
<h3>How Many Thousands of Companies Have Started Because of Microsoft?</h3>
<p>It seems like sometimes it&#8217;s fashionable to take shots at Microsoft (I think it&#8217;s a part of human nature for people to try and knock success). But there is one thing that is undeniable about Microsoft &#8211; they are a partner focused company. For all that is said about the greatness of Apple and Google, Microsoft has provided thousands of companies like ThreeWill the opportunity to start and succeed because they are partner focused. For that, we are grateful. We wouldn&#8217;t have started ThreeWill without Microsoft &#8211; they gave us a business model that helped us grow and thrive.</p>
<h3>Deepening the Relationship</h3>
<p>About five years in (and lots of conversations to convince certain people) we became a managed partner for Microsoft. We have had a number of Partner Account Managers (PAMs). We started out with Trey Kimbel, another real gem at Microsoft. Trey provided a great introduction to working well with Microsoft. We learned that PAMs have one of the most demanding and difficult jobs out there. Lots of responsibility with little authority and the difficulties of trying to serve multiple masters.</p>
<h3>Partnering as a Systems Integrator</h3>
<p>As a systems integrator, your business is making things work together. We&#8217;ve built a business around making SharePoint work with other platforms and key emerging technologies (including Enterprise Video with Polycom, Mobile with Rover Apps, Social with Jive Software). Although sometimes these integrations might lead to competitive situations, most folks at Microsoft understand that all Microsoft solutions might not be the right solution for all companies (I said most). No one can deny Microsoft&#8217;s success in focusing on the Enterprise over the last ten years, and a key part of this success is their willingness to work well with other products/platforms. <em>Kudos, Microsoft.</em></p>
<h3>Back to Jason</h3>
<p>I&#8217;ve been talking a lot about Microsoft in the last couple of paragraphs, but many of the positive attributes could also be said about Jason as a person. Jason is always looking out for us &#8211; talking to us about how to improve what we do based on what he learns from other companies like us. Part advocate, part mentor, part friend &#8211; he checks in with frequent calls to make sure things are going well and he looks to connect us to people both inside and outside of Microsoft that have the potential to make an impact on our business. Jason is also a man of faith &#8211; the highlight of every Microsoft Partner Conference is attending the Partners in Christ meeting that Jason helps lead. He&#8217;s got his head set on straight and knows what is important &#8211; another reason why we enjoy working with him and trust him. Jason is also very involved with his local Church serving in the middle school ministry which shows Jason has a heart for his community as well as his business.</p>
<h3>Our PAM is a Celebrity</h3>
<p>Jason is a bit of a celebrity &#8212; or at least his family is…his daughters, Mary-Charles Jones &#8211; <a href="http://www.imdb.com/name/nm2325460/">http://www.imdb.com/name/nm2325460/</a> and Maggie Elizabeth Jones &#8211; <a href="http://www.imdb.com/name/nm1369619/">http://www.imdb.com/name/nm1369619/</a>, are successful young actors. Mary-Charles has been on Grey&#8217;s Anatomy and she plays the recurring role of a younger version of Hanna Montana. Both girls were in the recent remake of Footloose. In December of 2011, Maggie will star opposite Matt Damon in Cameron Crowe’s “We Bought a Zoo” which is sure to be a big family hit! I&#8217;m not sure how he does this, but for a good part of the year his family is in Hollywood to meet the demands of success. <em>Pretty amazing.</em></p>
<h3>The Future</h3>
<p>We recently brought on a twenty year veteran of Microsoft (<a href="http://www.threewill.com/kp">Kirk Puffenberger</a>). Kirk will be taking the lead in building our partnership with Microsoft (working quite a bit with Jason) and other companies that we are aligning with for success. We look forward to seeing where this partnership leads us and what the next 10 years has in store for both companies. Like any healthy relationship, we&#8217;ve had our share of disagreements…(we&#8217;re still waiting for an app store for SharePoint) But, by pushing each other, we have learned to grow stronger.</p>
<h3>A Word from Jason</h3>
<p>Jason had the following to share upon hearing that he was a ThreeWill Hero…</p>
<blockquote><p>”I am truly honored to be featured as a THREEWILL HERO. It is working with companies like THREEWILL that truly make my job a joy each and every day. Threewill has shown unwavering commitment to not only Microsoft but to building great relationships with everyone they work with. Over the years I have seen how the Threewill team has positively impacted customers with their innovative approach to technology and knowing them has certainly impacted me personally over the years as well. I know that the next ten years will hold tremendous success for the entire Threewill team and I am excited to watch it happen.”</p></blockquote>
<p>Thanks for being our final ThreeWill Hero Jason and thanks Microsoft for your support through the years!</p>
<p><a class="BigButton orangebutton" href="http://twitter.com/jasonjoneslives">Follow Jason Jones on Twitter</a></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.threewill.com/2011/10/threewill-hero-jason-jones/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Client Object Model</title>
		<link>http://www.threewill.com/2011/10/client-object-model/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=client-object-model</link>
		<comments>http://www.threewill.com/2011/10/client-object-model/#comments</comments>
		<pubDate>Thu, 20 Oct 2011 14:55:31 +0000</pubDate>
		<dc:creator>John Underwood</dc:creator>
				<category><![CDATA[Events]]></category>
		<category><![CDATA[client-object-model]]></category>

		<guid isPermaLink="false">http://www.threewill.com/?p=8664</guid>
		<description><![CDATA[John Underwood presented to the <a href="http://www.atlspug.com/default.aspx" target="_blank">Atlanta SharePoint User Group</a> this past Monday (Oct 17). His presentation was about the SharePoint Client Object Model, and here's a brief synopsis of some of the material covered.]]></description>
			<content:encoded><![CDATA[<h3>Getting Started</h3>
<p>Microsoft has implemented a resource center for the object model (<a href="http://msdn.microsoft.com/en-us/sharepoint/ff770207">http://msdn.microsoft.com/en-us/sharepoint/ff770207</a>). Any study of the object model should begin with this resource.</p>
<p>The SharePoint Client Object Model can prove useful to address the following problems:</p>
<ul>
<li>Integrate data between SharePoint and other systems in cases where Business Connectivity Services don’t provide an appropriate solution.</li>
<li>Allow users to manipulate SharePoint data from a Windows application or web application without any SharePoint knowledge.</li>
<li>Enhance the SharePoint browser-based user interface by providing new capabilities or refreshing data without a costly refresh of the entire screen.</li>
<li>Allow developers to work around constraints where Sandboxed Solutions are required (see <a href="http://msdn.microsoft.com/en-us/magazine/ee335711.aspx">http://msdn.microsoft.com/en-us/magazine/ee335711.aspx</a> for more details about sandboxed solutions).</li>
</ul>
<h3>Three Delicious Flavors!</h3>
<p>The SharePoint Client Object Model supports three programming environments:</p>
<ul>
<li>.NET 3.5 or greater</li>
<li>Silverlight</li>
<li>EMCAScript (JavaScript, JScript)</li>
</ul>
<p>As you would expect, .NET and Silverlight model each other most closely because, after all, Silverlight logic is implemented using a .NET langauge. In some cases JavaScript simply cannot implement the exact same syntax as a .NET language, but wherever possible Microsoft has maintained a consistent syntax. Not only that, the syntax for all three flavors maintains a level of consistency to the SharePoint Server Object Model.</p>
<h3>Understanding Context</h3>
<p>Most remote programming models use some sort of proxy to act as the mediator between local client code and the server code that’s being invoked remotely. In the case of the Client Object Model the ClientContext class provides that plumbing. For .NET and Silverlight, the class accepts a URL for the site to be accessed. On the other hand, the JavaScript implementation of ClientContext requires no URL because the JavaScript on a page must implicitly work with resources from the site where the page loaded from; to attempt to load another site would violate rules concerning cross-site scripting.</p>
<h3>Hello, World!</h3>
<p>To write Hello, World! (or the Client Object Model equivalent) I did the following:</p>
<ol>
<li>Create a console app using Visual Studio 2010.</li>
<li>Add a reference to two DLLs:  Microsoft.SharePoint.Client.dll and Microsoft.SharePoint.Client.Runtime.dll (these can be found at “C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\ISAPI”).</li>
<li>Add a using statement for the Microsoft.SharePoint.Client namespace.</li>
<li>Write the code below and run the app.</li>
</ol>
<pre>using (ClientContext ctx = new ClientContext("http://demo2010a/sites/spcom"))</pre>
<pre>{</pre>
<pre>   Site siteColl = ctx.Site;</pre>
<pre>   ctx.Load(siteColl); // ask for siteColl object</pre>
<pre>   ctx.ExecuteQuery(); // go to server and get it!</pre>
<pre>   Console.WriteLine(siteColl.Url);</pre>
<pre>}</pre>
<p>Running the app produces this result:</p>
<p><a href="http://www.threewill.com/2011/10/client-object-model/hello-world-2/" rel="attachment wp-att-8669"><img class="size-medium wp-image-8669 alignleft" title="hello world" src="http://www.threewill.com/wp-content/uploads/hello-world1-300x72.jpg" alt="" width="300" height="72" /></a></p>
<p>Now, let’s look at the code…</p>
<p>First, notice what you don’t see: the keyword <strong>new</strong>. That’s not to say that you’d never allocate an object in the Client Object Model, but in this case everything that is needed is provided by the client context.</p>
<p>Second, notice the Load() method. It would be natural to assume that it’s loading the siteColl object, but in reality Load() is simply queuing up a request for data. It’s as though we’re making a shopping list of things we’re going to need before going to the store. Given that analogy, it stands to reason that one might have multiple Load() statements each doing a different thing: requesting an object, loading list data, etc.</p>
<p>Finally, observe the ExecuteQuery() method. This is where we actually go off to the store and pickup what we need – in this case, the siteColl object. Attempting to access any properties of the siteColl object before we run ExecuteQuery() would result in an exception.</p>
<h3>Coming Attractions</h3>
<p>In an upcoming blog post I’ll dig deeper and show you how to manipulate list data. For now I hope I’ve given you a brief intro to the object model and given you some food for thought on how you might use it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.threewill.com/2011/10/client-object-model/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>September 2011 Newsletter</title>
		<link>http://www.threewill.com/2011/09/september-2011-newsletter/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=september-2011-newsletter</link>
		<comments>http://www.threewill.com/2011/09/september-2011-newsletter/#comments</comments>
		<pubDate>Fri, 30 Sep 2011 22:00:58 +0000</pubDate>
		<dc:creator>Danny Ryan</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[newsletters]]></category>
		<category><![CDATA[sharepoint-conference]]></category>
		<category><![CDATA[testing-tricks]]></category>

		<guid isPermaLink="false">http://www.threewill.com/?p=5156</guid>
		<description><![CDATA[Meet a new ThreeWiller and congratulate this month's ThreeWill Hero!]]></description>
			<content:encoded><![CDATA[<p><img id="sep2011newsletter" src="http://www.threewill.com/wp-content/uploads/sep-2011-newsletter.jpg" alt="" name="September 2011 Newsletter" width="570" height="680" usemap="#m_sep2011newsletter" border="0" /></p>
<map id="m_sep2011newsletter" name="m_sep2011newsletter">
<area shape="rect" coords="0,628,570,680" href="http://www.threewill.com/" alt="" />
<area shape="poly" coords="-1,485,571,485,571,610,0,610,-1,485" href="http://www.threewill.com/2011/08/threewill-hero-clint-padgett/" alt="" />
<area shape="poly" coords="129,125,132,110,140,97,151,89,165,86,498,86,513,89,524,97,532,110,535,125,535,202,532,217,524,230,513,238,498,241,165,241,151,238,140,230,132,217,129,202,129,125,129,125" href="http://www.threewill.com/2011/09/see-you-in-anaheim/" alt="" />
<area shape="poly" coords="339,327,541,327,541,407,339,407,339,327" href="http://www.threewill.com/2011/09/generate-sharepoint-test-data/" alt="" />
<area shape="poly" coords="126,327,328,327,328,407,126,407,126,327" href="http://www.threewill.com/bharple" alt="" />
<area shape="poly" coords="215,253,416,253,416,303,215,303,215,253" href="http://www.threewill.com/dryan" alt="" />
<area shape="poly" coords="165,415,364,415,364,466,165,466,165,415" href="http://www.threewill.com/bharple" alt="" />
<area shape="rect" coords="375,414,570,466" href="http://www.threewill.com/pskelly" alt="" />
<area shape="poly" coords="18,344,94,344,94,376,18,376,18,344" href="http://www.threewill.com/careers/home/job-openings/" alt="" />
<area shape="poly" coords="18,425,96,425,96,457,18,457,18,425" href="http://www.threewill.com/contactus/" alt="" />
<area shape="poly" coords="18,384,96,384,96,416,18,416,18,384" href="http://www.threewill.com/events/" alt="" />
<area shape="poly" coords="18,304,99,304,99,336,18,336,18,304" href="http://www.threewill.com/careers/" alt="" />
<area shape="poly" coords="18,264,103,264,103,296,18,296,18,264" href="http://www.threewill.com/catalog/" alt="" />
<area shape="poly" coords="18,221,96,221,96,253,18,253,18,221" href="http://www.linkedin.com/companies/threewill" alt="" />
<area shape="poly" coords="18,181,102,181,102,213,18,213,18,181" href="http://www.threewill.com/blog" alt="" />
<area shape="poly" coords="18,137,96,137,96,169,18,169,18,137" href="http://twitter.com/threewill" alt="" />
<area shape="poly" coords="18,95,98,95,98,127,18,127,18,95" href="http://www.facebook.com/pages/ThreeWill/88792767817" alt="" /> </map>
]]></content:encoded>
			<wfw:commentRss>http://www.threewill.com/2011/09/september-2011-newsletter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 0.345 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2012-02-04 09:54:33 -->
<!-- Compression = gzip -->
