<?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>Work Together Better</description>
	<lastBuildDate>Thu, 17 May 2012 19:39:29 +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>Custom Search Refiners</title>
		<link>http://www.threewill.com/2012/04/custom-search-refiners/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=custom-search-refiners</link>
		<comments>http://www.threewill.com/2012/04/custom-search-refiners/#comments</comments>
		<pubDate>Thu, 19 Apr 2012 17:29:44 +0000</pubDate>
		<dc:creator>William Holland</dc:creator>
				<category><![CDATA[Insights]]></category>
		<category><![CDATA[refiner]]></category>
		<category><![CDATA[search]]></category>
		<category><![CDATA[sharepoint-2010]]></category>

		<guid isPermaLink="false">http://www.threewill.com/?p=9381</guid>
		<description><![CDATA[Will Holland shares what you need to know about improving SharePoint Search with Custom Search Refiners.  Take advantage of this important way to help increase productivity.]]></description>
			<content:encoded><![CDATA[<div id="attachment_9382" class="wp-caption alignright" style="width: 310px"><img class="size-medium wp-image-9382 " title="Default Refinement Panel" src="http://www.threewill.com/wp-content/uploads/default-refinement-panel-300x217.jpg" alt="" width="300" height="217" /><p class="wp-caption-text">Default refiners are great....if you have some pre-existing knowledge of the document.</p></div>
<p style="text-align: justify;">Out of the box, SharePoint&#8217;s search feature makes finding documents, videos, and other items much easier when the user doesn&#8217;t know where to begin looking. Sometimes, however, it&#8217;s just not enough. If your site collection contains a large number of documents, as was the case with a recent project I was on, a user&#8217;s search may return hundreds of results. The only methods the user has at their immediate disposal for narrowing those results down is to either search again with more keywords or use some crummy filters provided by the Search Refinement Panel. The default refiners, such as author, require that the searching user know details of the document prior to searching for it. Great if you just published a document and immediately had a brain fart; not so useful for the rest of us though.</p>
<p style="text-align: justify;">Fortunately, it&#8217;s not all that difficult to create your own custom refiners that will provide your users with the experience they have been <strong>search</strong>ing for. All puns aside, adding custom refiners will allow your user to narrow their search results down by more meaningful filters, thereby reducing the amount of time spent searching and, hopefully, increase productivity.</p>
<h2 style="text-align: justify;">Requirements</h2>
<ul>
<li>You have an existing site collection with the Search feature active and configured.</li>
<li>You have sufficient permissions to access and modify Central Administration.</li>
<li>You have permissions to edit pages and web parts.</li>
</ul>
<h2>Scenario</h2>
<p>For the sake of consistency, I&#8217;ll be using the &#8220;Productivity Hub&#8221; as my example site collection. The Productivity Hub is a SharePoint 2010 site collection that contains a plethora of content for users making the migration from Office 2007 to Office 2010. It&#8217;s a free download, available at <a href="http://www.microsoft.com/download/en/details.aspx?id=7122">http://www.microsoft.com/download/en/details.aspx?id=7122</a>.</p>
<p>The content for the Productivity Hub is stored in a document library, aptly named &#8220;Content Library&#8221;. The content library contains a &#8220;Product&#8221; column which indicates what Office product the document is intended for. This is the column that I will use during this tutorial.</p>
<h2>In the beginning&#8230;</h2>
<p>To start things off, the first thing we must do is determine what data we have that could be useful to searching users. Something that helps them define what they&#8217;re looking for. If your site collection contains a large number of documents that relate to specific clients, it would probably be useful if the user could narrow their search by documents that only pertained to a chosen customer. In my case, my documents all pertain to various products in Microsoft Office 2010, so I&#8217;ll use the &#8220;Product&#8221; column so that my users can narrow their search results down based on specific Office products.</p>
<p>As a best practice, the best columns to use for metadata are those that are indicative of the document contents, which is why I&#8217;m not a huge fan of the OOB search refiners. It&#8217;s also best if the data stored in the column is NOT a multi-value choice or multi-line text.</p>
<p>If your library doesn&#8217;t contain a particularly useful column&#8230;create one!</p>
<h2>If you must walk before you run, before you walk you must have crawled.</h2>
<p>Unless you created a new column for your library, the chances are that your desired column has already been indexed when the last scheduled site crawl ran. Regardless, we still need to verify that it was crawled. You know what they say happens when you assume something.</p>
<div id="attachment_9397" class="wp-caption alignright" style="width: 310px"><img class="size-medium wp-image-9397 " title="crawled properties" src="http://www.threewill.com/wp-content/uploads/crawled-properties-300x183.jpg" alt="" width="300" height="183" /><p class="wp-caption-text">The Crawled Properties Page of Central Administration</p></div>
<ul>
<li>Open up Central Administration and navigate to <strong><strong>Application Management | Manage Service Applications</strong></strong></li>
<li>From list of Service Applications click <strong>Search Service Application</strong></li>
<li>From the <em>Queries and Results </em>section, click the <strong>Metadata Properties </strong>link.</li>
<li>Finally, click the <strong>Crawled Properties </strong>link.</li>
</ul>
<p style="text-align: justify;">This page contains a list of every column captured during a crawl and, hopefully, your column will be in this list somewhere. To find out, type the name of the column in the search bar towards the top of the page and let&#8217;er rip. With any luck, you&#8217;ll receive a few results. My search for &#8220;Product&#8221; resulted in quite a few, but the one I&#8217;m interested in is <em>ows_Product(Text). </em>If given the choice, the crawled property that contains the ows_ prefix is usually the one you want.</p>
<p style="text-align: justify;">If you created your own column or your search results didn&#8217;t include an ows_{YourColumnName}({YourColumnType}) type result, then I&#8217;m sorry to say that before you can continue, you&#8217;re going to have to do a full or incremental crawl. This may or may not be an issue for you depending on how long a crawl takes to complete.</p>
<p style="text-align: justify;">Once you have verified that your column has been crawled, click the <strong>Managed Properties </strong>link followed by the <strong>New Managed Property</strong> link.</p>
<div id="attachment_9403" class="wp-caption alignright" style="width: 310px"><img class="size-medium wp-image-9403 " title="NewManagedProperty" src="http://www.threewill.com/wp-content/uploads/NewManagedProperty-300x192.jpg" alt="" width="300" height="192" /><p class="wp-caption-text">The &quot;New Managed Property&quot; window.</p></div>
<ul>
<li>Fill out this new window by giving your property a useful name.</li>
<ul>
<li>Try keeping the name to one word, but if you need to use multiple words be sure to use Pascal casing.</li>
</ul>
<li>Give your property a useful description.</li>
<li>Select the appropriate type.</li>
<li>In the second section, select <strong>Include values from a single crawled property based on the order specified.</strong></li>
<li>Click the <strong>Add Mapping </strong>button.</li>
<li>Type the name of your crawled property and click the <strong>F</strong><strong>ind </strong>button.</li>
<li>Select your crawled property from the list and click the <strong>OK </strong>button.</li>
<li>Everything else can be left at its default values, so click the <strong>OK </strong>button.</li>
</ul>
<h2>Setup for Search Success</h2>
<p>With our new managed property in place, we&#8217;re ready to begin adding our refiners.</p>
<p>Navigate your way to your search results page and put it in edit mode. The first thing we need to do is include our new metadata in the search results.</p>
<ul>
<li>Locate the Search Core Results Web Part, located roughly in the middle of the page.</li>
<li>From the web part context menu, click <strong>Edit Web Part.</strong></li>
<li>In the web part editor, expand the <strong>Display Properties </strong>section.</li>
<li>In the <strong>Fetched Properties </strong>text box, scroll towards the end until your cursor is directly in front of the &lt;/Columns&gt; tag.</li>
<li>Add the following: &lt;Column Name=&#8221;ProductName&#8221;/&gt;, replace ProductName with whatever you named your managed property.</li>
<li>Click the <strong>Apply </strong>button.</li>
<li>Click the <strong>OK </strong>button.</li>
</ul>
<p>Next, we need to define our actual refiner.</p>
<ul>
<li>Locate the Search Refinement Panel web part, located on the left side of the page.</li>
<li>From the web part context menu, click <strong>Edit Web Part</strong></li>
<li>In the web part editor, expand the <strong>Refinement</strong> section.</li>
</ul>
<p>We need to add our refiner definition in the <strong>Filter Category Definition </strong>text box. This text box is quite a bit wordy, so it may be easier for you to copy the contents and paste them in an editor that will format it for you, such as NotePad++ or Visual Studio.</p>
<h2>I do declare!</h2>
<p>Once you have your code formatted, you can see that it&#8217;s an XML document that contains a series of &lt;Category&gt; definitions. These definitions are what define the refiners that appear on the refinement panel web part. You may also notice that they appear on the web part in the order that they are defined here, so a decision must be made on where you want your refiner to appear. I think the Product refiner is pretty useful, so I&#8217;ll simply insert my code before the other categories. Below is the definition I&#8217;ll use to declare my refiner.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;FilterCategories&gt;
  &lt;Category Title=&quot;Product&quot;
  Description=&quot;The Product associated with the item&quot;
  Type=&quot;Microsoft.Office.Server.Search.WebControls.ManagedPropertyFilterGenerator&quot;
  MetadataThreshold=&quot;1&quot; NumberOfFiltersToDisplay=&quot;5&quot;
  MaxNumberOfFilters=&quot;0&quot; SortBy=&quot;Name&quot;
  SortDirection=&quot;Ascending&quot; SortByForMoreFilters=&quot;Name&quot;
  SortDirectionForMoreFilters=&quot;Descending&quot; ShowMoreLink=&quot;True&quot;
  MappedProperty=&quot;ProductName&quot; MoreLinkText=&quot;show more&quot;
  LessLinkText=&quot;show fewer&quot;&gt;
	&lt;CustomFilters MappingType=&quot;ValueMapping&quot; DataType=&quot;String&quot;
	ValueReference=&quot;Absolute&quot; ShowAllInMore=&quot;False&quot;&gt;
	  &lt;CustomFilter CustomValue=&quot;OutLook&quot;&gt;
		&lt;OriginalValue&gt;OutLook&lt;/OriginalValue&gt;
	  &lt;/CustomFilter&gt;
	  &lt;CustomFilter CustomValue=&quot;Lync&quot;&gt;
		&lt;OriginalValue&gt;Lync&lt;/OriginalValue&gt;
	  &lt;/CustomFilter&gt;
	  &lt;CustomFilter CustomValue=&quot;Word&quot;&gt;
		&lt;OriginalValue&gt;Word&lt;/OriginalValue&gt;
	  &lt;/CustomFilter&gt;
	  &lt;CustomFilter CustomValue=&quot;Excel&quot;&gt;
		&lt;OriginalValue&gt;Excel&lt;/OriginalValue&gt;
	  &lt;/CustomFilter&gt;
	  &lt;CustomFilter CustomValue=&quot;PowerPoint&quot;&gt;
		&lt;OriginalValue&gt;PowerPoint&lt;/OriginalValue&gt;
	  &lt;/CustomFilter&gt;
	  &lt;CustomFilter CustomValue=&quot;OneNote&quot;&gt;
		&lt;OriginalValue&gt;OneNote&lt;/OriginalValue&gt;
	  &lt;/CustomFilter&gt;
	  &lt;CustomFilter CustomValue=&quot;SharePoint&quot;&gt;
		&lt;OriginalValue&gt;SharePoint&lt;/OriginalValue&gt;
	  &lt;/CustomFilter&gt;
	&lt;/CustomFilters&gt;
  &lt;/Category&gt;
</pre>
<p>As you can see, the Category tag contains a large number of properties that you can configure. Here are a few that you&#8217;ll certainly want to understand.</p>
<ul>
<li>Title &#8211; This is the display name for your refiner category.</li>
<li>MappedProperty &#8211; Extremely important. This should match the name of your managed property and the name specified when you added the column tag to the search core results web part. <strong>It is case sensitive!</strong></li>
<li>MetadataThreshold &#8211; The number you specify is how many search results are required to be returned that match a filter before it will be presented to the user.</li>
<li>NumberOfFilterToDisplay &#8211; The number of filters to be displayed before the user has to click the &#8220;show more&#8221; link.</li>
<li>MaxNumberOfFilters &#8211; If the user clicks the &#8220;show more&#8221; link, how many filters do you want them to see. Set the value to zero if you want to show all filters.</li>
</ul>
<p>For the complete list, please refer to this MSDN article: <a href="http://msdn.microsoft.com/en-us/library/ee819920.aspx">Refinement Panel XML Schema</a></p>
<p>The CustomFilters element has a few properties of its own, but for the most part, it will use the values shown above. The most common exception to that is when you&#8217;re refining by dates. The link above provides an explanation for each of these properties as well.</p>
<p>Finally, you have the CustomFilter and OriginalValue nodes. The &#8220;Name&#8221; property of CustomFilter is the text that will be displayed on the refinement panel, so keep it short and precise. The value between the OriginalValue tags is the value we expect for each custom filter. Again, this value <strong>is case sensitive. </strong></p>
<p>Once you&#8217;ve created your declaration, copy the contents of your editor and find your way back to that cluttered text box. Replace its contents with your code.</p>
<p>Click the <strong>Apply </strong>button and stop editing the page.</p>
<p>And you&#8217;re done! Well, almost. If you do a search, you notice that your refiners aren&#8217;t showing up.</p>
<h2>I just learned to run, now you tell me to crawl again?</h2>
<p>Yup. You&#8217;ll have to do another full crawl before your refiner will appear. Pretty much anytime you make a change to the search metadata, you&#8217;ll be forced to do this.</p>
<p>However, once that&#8217;s completed&#8230;.</p>
<div id="attachment_9429" class="wp-caption aligncenter" style="width: 230px"><img class="size-full wp-image-9429 " title="TaDa" src="http://www.threewill.com/wp-content/uploads/TaDa.jpg" alt="" width="220" height="457" /><p class="wp-caption-text">Ta-Da! My Custom Refiner LIVES!</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.threewill.com/2012/04/custom-search-refiners/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Flooding the Sandbox</title>
		<link>http://www.threewill.com/2012/03/flooding-the-sandbox/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=flooding-the-sandbox</link>
		<comments>http://www.threewill.com/2012/03/flooding-the-sandbox/#comments</comments>
		<pubDate>Mon, 19 Mar 2012 20:36:10 +0000</pubDate>
		<dc:creator>John Underwood</dc:creator>
				<category><![CDATA[Insights]]></category>
		<category><![CDATA[code-samples]]></category>
		<category><![CDATA[deployment]]></category>
		<category><![CDATA[sandboxed-solutions]]></category>

		<guid isPermaLink="false">http://www.threewill.com/?p=9253</guid>
		<description><![CDATA[In this blog post John Underwood, ThreeWill's Technical Evangelist, talks about exceeding quotas in a Sandboxed Solution. ]]></description>
			<content:encoded><![CDATA[<p>As you work with and develop sandboxed solutions, you may find the need to intentionally exceed a solution’s quota for testing or demonstration purposes. Here’s a little insight on a demo I recently created that does that very thing.</p>
<h2>Rewarded For Doing the Wrong Thing?</h2>
<p>Usually developers don’t get rewarded for writing code that blows up, but in this case that’s precisely what I wanted to do. I wanted to create a simple sandboxed solution that could easily and predictably exceed a resource quota so that I could demonstrate what happens when an errant sandboxed solution gets “locked up” for the day. To accomplish this, I created an Empty SharePoint Project using Visual Studio 2010, and then I wrote a simple web part (not a <em>visual</em> web part, mind you) that would throw an exception in its OnLoad() method as follows:</p>
<div id="attachment_9257" class="wp-caption alignnone" style="width: 512px"><a href="http://www.threewill.com/wp-content/uploads/SandboxCode1.png" rel="shadowbox[sbpost-9253];player=img;" title="SandboxCode1"><img class="wp-image-9257   " title="SandboxCode1" src="http://www.threewill.com/wp-content/uploads/SandboxCode1.png" alt="" width="502" height="231" /></a><p class="wp-caption-text">A Web Part That&#39;s Guaranteed to Fail!</p></div>
<p>From there, I deployed the solution to the site, created a new page in the Site Pages library, and added my web part to the page. Obviously, from this point forward any time the page loads, the web part will generate an unhandled exception.</p>
<h2>Setting The Bar Low</h2>
<p>Next, I set artificially low quotas so that I could reach my quota limit very quickly. This involved the following steps:</p>
<ul>
<li>Navigate to <strong>Central Administration | Application Management | Specify quota templates</strong></li>
<li>Create a new template named “Small Sandbox” with the following settings:</li>
</ul>
<div id="attachment_9260" class="wp-caption alignnone" style="width: 425px"><a href="http://www.threewill.com/wp-content/uploads/Sandbox1QuotaTemplate.png" rel="shadowbox[sbpost-9253];player=img;" title="Sandbox1QuotaTemplate"><img class=" wp-image-9260     " title="Sandbox1QuotaTemplate" src="http://www.threewill.com/wp-content/uploads/Sandbox1QuotaTemplate.png" alt="" width="415" height="179" /></a><p class="wp-caption-text">Creating the Quota Template</p></div>
<ul>
<li>Click <strong>OK</strong> to save changes.</li>
</ul>
<p>Once the quota template is created, we&#8217;ll need to use it:</p>
<ul>
<li>Navigate to <strong>Central Administration | Application Management | Configure quotas and locks</strong></li>
<li>Select the correct web application and then apply the previously created template as follows:</li>
</ul>
<div id="attachment_9261" class="wp-caption alignnone" style="width: 500px"><a href="http://www.threewill.com/wp-content/uploads/Sandbox2SpecifyQuota.png" rel="shadowbox[sbpost-9253];player=img;" title="Sandbox2SpecifyQuota"><img class=" wp-image-9261   " title="Sandbox2SpecifyQuota" src="http://www.threewill.com/wp-content/uploads/Sandbox2SpecifyQuota.png" alt="" width="490" height="334" /></a><p class="wp-caption-text">Selecting the Quota Template</p></div>
<ul>
<li>Click <strong>OK</strong> to save changes.</li>
</ul>
<h2> It’s All in the Timing</h2>
<p>Now that we’ve configured the quota limit at a single point, one would assume that we could simply request the page with the errant web part a sufficient number of times and immediately exceed the quota. However, there’s one problem: the statistics used to measure quotas do not update instantly, but instead wait on the following timer jobs:</p>
<ul>
<li>Solution Resource Usage Log Processing (runs every 5 minutes by default)</li>
<li>Solution Resource Usage Update (runs every 15 minutes by default)</li>
</ul>
<p>In order to actually get to the point where I’d exceed the daily quota I could have done any of the following:</p>
<ul>
<li>Sit around and wait on the timer jobs (boring, and a time-waster)</li>
<li>Interactively choose to run the jobs from Central Administration (useful, but a bit tedious after a while)</li>
<li>Run them from PowerShell (yes!)</li>
</ul>
<p>Now, if the timer job is named “Solution Resource Usage Log Processing” then one would assume that’s the name we’d use in PowerShell, amirite? Well, not so fast… there’s a completely different name that must be used from PowerShell and, as far as I can tell, these alternate names aren’t documented on the Microsoft site (if anyone <em>does</em> have a link, I’ll take it). So, I used the following PowerShell script to list all of the timer jobs for my web application:</p>
<div id="attachment_9264" class="wp-caption alignnone" style="width: 443px"><a href="http://www.threewill.com/wp-content/uploads/SandboxCode1b.png" rel="shadowbox[sbpost-9253];player=img;" title="SandboxCode1b"><img class=" wp-image-9264   " title="SandboxCode1b" src="http://www.threewill.com/wp-content/uploads/SandboxCode1b.png" alt="" width="433" height="100" /></a><p class="wp-caption-text">List Available Timer Jobs for Web Application</p></div>
<p>Using the output from the PowerShell script (and a few Google searches), I deduced that I needed the following jobs:</p>
<ul>
<li>job-solution-resource-usage-log</li>
<li>job-solution-resource-usage-update</li>
</ul>
<p>The completed PowerShell script exercises the errant web part by repeatedly requesting the page that hosts it, and then kicks off the correct time jobs. Remember, the PowerShell script simply kicks off the jobs – it doesn’t wait until they finish! Because of this there still might be a short lag time between the running of the job and the updating of the statistics.</p>
<div id="attachment_9265" class="wp-caption alignnone" style="width: 573px"><a href="http://www.threewill.com/wp-content/uploads/SandboxCode2.png" rel="shadowbox[sbpost-9253];player=img;" title="SandboxCode2"><img class=" wp-image-9265   " title="SandboxCode2" src="http://www.threewill.com/wp-content/uploads/SandboxCode2.png" alt="" width="563" height="345" /></a><p class="wp-caption-text">Exceeding the Quotas and Updating the Results</p></div>
<h2>All Locked Up</h2>
<p>To show the current quota usage, do the following:</p>
<ul>
<li>Click <strong>Site Actions | Site Settings</strong></li>
<li>On the Site Settings page click <strong>Solutions</strong> (in the Galleries section)</li>
</ul>
<p>Once the quota is exceeded the following information is presented:</p>
<div id="attachment_9272" class="wp-caption alignnone" style="width: 450px"><a href="http://www.threewill.com/wp-content/uploads/Sandbox3SolutionDisabled1.png" rel="shadowbox[sbpost-9253];player=img;" title="Sandbox3SolutionDisabled"><img class=" wp-image-9272   " title="Sandbox3SolutionDisabled" src="http://www.threewill.com/wp-content/uploads/Sandbox3SolutionDisabled1.png" alt="" width="440" height="120" /></a><p class="wp-caption-text">Daily Quota Exceeded</p></div>
<p>Upon returning to my page I get a different error message indicating that the daily quota has been exceeded:</p>
<div id="attachment_9273" class="wp-caption alignnone" style="width: 534px"><a href="http://www.threewill.com/wp-content/uploads/Sandbox4DeadPart.png" rel="shadowbox[sbpost-9253];player=img;" title="Sandbox4DeadPart"><img class=" wp-image-9273   " title="Sandbox4DeadPart" src="http://www.threewill.com/wp-content/uploads/Sandbox4DeadPart.png" alt="" width="524" height="118" /></a><p class="wp-caption-text">Web Part Throws a Different Exception</p></div>
<h2>Hitting the Reset Button</h2>
<p>Presumably, one would want to be able to reset the quota once the demo or test was complete. Again, the key lies with a timer job. In this case it is the “Solution Daily Resource Usage Update” job that resets the daily quota count back to zero. Using the name “job-solution-daily-resource-usage” I was able to kick off the timer job from PowerShell as follows:</p>
<div id="attachment_9276" class="wp-caption alignnone" style="width: 415px"><a href="http://www.threewill.com/wp-content/uploads/SandboxCode3.png" rel="shadowbox[sbpost-9253];player=img;" title="SandboxCode3"><img class=" wp-image-9276   " title="SandboxCode3" src="http://www.threewill.com/wp-content/uploads/SandboxCode3.png" alt="" width="405" height="150" /></a><p class="wp-caption-text">Resetting the Locked Solution</p></div>
<h2>Other Ways to Fail</h2>
<p>If you wish to stress test other aspects of the quota points calculation, the following articles may be of interest:</p>
<ul>
<li><a href="http://msdn.microsoft.com/en-us/library/gg615462.aspx" target="_blank">Resource Usage Limits on Sandboxed Solutions in SharePoint 2010</a></li>
<li><a href="http://technet.microsoft.com/en-us/library/hh230318.aspx" target="_blank">Configure resource points for sandboxed solutions (SharePoint Server 2010)</a></li>
</ul>
<h2>Have Fun Playing in the Sandbox!</h2>
<p>Download <a href="http://www.threewill.com/wp-content/uploads/SandboxBlogPenaltyBox.zip">sample code</a> and <a href="http://www.threewill.com/wp-content/uploads/SandboxBlogPowershell.zip">PowerShell scripts</a>&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.threewill.com/2012/03/flooding-the-sandbox/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<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 who 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 time 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 above 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 that 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;" title="contract1"><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;" title="contract2"><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 used 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;" title="contract3"><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;" title="contract4"><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;" title="contract5"><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;" title="contract6"><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 a 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;" title="contract7"><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 in 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 the scenario where you’re working in a Sandboxed Solution, since such solutions cannot store files in the SharePoint Root (or “14 hive”). Additionally, it is 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/?attachment_id=9051" rel="attachment wp-att-9051" title="recipe1a"><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/?attachment_id=9052" rel="attachment wp-att-9052" title="recipe1b"><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/?attachment_id=9053" rel="attachment wp-att-9053" title="recipe1c"><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;" title="recipe2a"><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 <strong>Insert tab | Web Part | Custom | jQueryPart</strong>; 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;" title="recipe2b"><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;" title="recipe2c"><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/?attachment_id=9057" rel="attachment wp-att-9057" title="recipe2d"><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;" title="recipe3a"><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;" title="recipe3b"><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 <strong>HTML | Edit HTML Source</strong>.</p>
<p style="text-align: center;"><a href="http://www.threewill.com/wp-content/uploads/recipe3c.png" rel="shadowbox[sbpost-9175];player=img;" title="recipe3c"><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 <strong>OK</strong>:</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 <strong>OK</strong> 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/?attachment_id=9061" rel="attachment wp-att-9061" title="recipe3d"><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 an 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>6</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[Podcasts]]></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>Podcasts</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" title="Figure 1 JavaScript Code Listing"><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" title="hyperlink blog 2"><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" title="hyperlink blog 3"><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" title="hyperlink blog 4"><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" title="Supported Types for EMail Handler"><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" title="ProcessMessage Method listing"><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" title="SPEmailHandler and its subclasses"><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 extremely 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, and 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>
]]></content:encoded>
			<wfw:commentRss>http://www.threewill.com/2011/10/threewill-hero-jason-jones/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 0.433 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2012-05-17 15:39:47 -->
<!-- Compression = gzip -->
