<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://www.dotnetmafia.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Corey Roth [MVP] : Office 365</title><link>http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/Office+365/default.aspx</link><description>Tags: Office 365</description><dc:language>en</dc:language><generator>CommunityServer 2007.1 (Build: 20917.1142)</generator><item><title>Slides and code samples from my Search talk at SharePoint Summit Toronto</title><link>http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2013/05/16/slides-and-code-samples-from-my-search-talk-at-sharepoint-summit-toronto.aspx</link><pubDate>Thu, 16 May 2013 14:42:53 GMT</pubDate><guid isPermaLink="false">ceb7fe2a-c56b-4d85-99e6-8dd548580538:6331</guid><dc:creator>CoreyRoth</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.dotnetmafia.com/blogs/dotnettipoftheday/rsscomments.aspx?PostID=6331</wfw:commentRss><comments>http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2013/05/16/slides-and-code-samples-from-my-search-talk-at-sharepoint-summit-toronto.aspx#comments</comments><description>&lt;p&gt;I’ve had yet another fun week up here in Canada.&amp;#160; I gave a brand new talk about the new ways to query search in SharePoint 2013.&amp;#160; I had a room full of developers that asked a lot of great questions.&amp;#160; As promised, my slide deck is below at SlideShare.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.slideshare.net/CoreyRoth/fives-ways-to-query-share-point-2013-search-sharepoint-summit-toronto-2013"&gt;Five ways to query SharePoint 2013 Search&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;In the session, I mentioned that I had code samples on MSDN Code, so I am providing the link below.&amp;#160; Try them out and download them and rate them if you find them useful.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://code.msdn.microsoft.com/site/search?f%5B0%5D.Type=User&amp;amp;f%5B0%5D.Value=CoreyRoth%20%5BMVP%5D"&gt;SharePoint 2013 Search Samples&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Follow me on twitter: &lt;a href="https://twitter.com/coreyroth"&gt;@coreyroth&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.dotnetmafia.com/aggbug.aspx?PostID=6331" width="1" height="1"&gt;</description><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/Enterprise+Search/default.aspx">Enterprise Search</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/Presentations/default.aspx">Presentations</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/Office+365/default.aspx">Office 365</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/SharePoint+2013/default.aspx">SharePoint 2013</category></item><item><title>SharePoint 2013 Autocomplete textboxes using the term store and CSOM</title><link>http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2013/04/30/sharepoint-2013-autocomplete-textboxes-using-the-term-store-and-csom.aspx</link><pubDate>Tue, 30 Apr 2013 15:30:00 GMT</pubDate><guid isPermaLink="false">ceb7fe2a-c56b-4d85-99e6-8dd548580538:6302</guid><dc:creator>CoreyRoth</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.dotnetmafia.com/blogs/dotnettipoftheday/rsscomments.aspx?PostID=6302</wfw:commentRss><comments>http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2013/04/30/sharepoint-2013-autocomplete-textboxes-using-the-term-store-and-csom.aspx#comments</comments><description>&lt;p&gt;I wanted to create an autocomplete textbox in a SharePoint app recently by using terms from the term store.&amp;#160; Since retrieving items from the term store can be a bit involved I wanted to show you the steps involved.&amp;#160; This solution make use of &lt;a href="http://jqueryui.com/autocomplete/"&gt;jQuery UI Autocomplete&lt;/a&gt;.&amp;#160; The code loads the terms from the term store and then sets the source.&amp;#160; This implementation is really only ideal for a small amount of terms, but it’s enough to get you started.&lt;/p&gt;  &lt;p&gt;For this example, I am going to use a simple set of terms using state names in the United States.&amp;#160; My terms are included in a group named &lt;em&gt;Classification&lt;/em&gt; and a Term Set named &lt;em&gt;States&lt;/em&gt;.&amp;#160; Here is what my term store looks like.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/TermStoreStates_54DB147C.png"&gt;&lt;img title="TermStoreStates" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="TermStoreStates" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/TermStoreStates_thumb_3A2E7863.png" width="285" height="264" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;In this example, we’re going to build our code inside a &lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2013/04/09/how-to-build-client-web-parts-in-sharepoint-2013-with-office-developer-tools-rtm.aspx"&gt;Client Web Part&lt;/a&gt;.&amp;#160; Take a look at that post if you are not familiar with the process yet.&amp;#160; We then need to add a heap of JavaScript references.&amp;#160; Some of these are included already, but specifically we need to load &lt;strong&gt;SP.Taxonomy.js&lt;/strong&gt;.&amp;#160; We also need to include &lt;strong&gt;init.js&lt;/strong&gt; as I mentioned in an earlier &lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2013/04/29/javascript-runtime-error-notifyscriptloadedandexecutewaitingjobs-is-undefined.aspx"&gt;blog post&lt;/a&gt;.&lt;/p&gt;  &lt;div style="font-size:10pt;font-family:consolas;background:white;color:black;"&gt;   &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;script&lt;/span&gt; &lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;text/javascript&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;src&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;../Scripts/jquery-1.7.1.min.js&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;script&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;script&lt;/span&gt; &lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;text/javascript&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;src&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;/_layouts/15/MicrosoftAjax.js&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;script&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;script&lt;/span&gt; &lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;text/javascript&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;src&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;/_layouts/15/init.js&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;script&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;script&lt;/span&gt; &lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;text/javascript&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;src&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;/_layouts/15/sp.runtime.js&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;script&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;script&lt;/span&gt; &lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;text/javascript&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;src&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;/_layouts/15/sp.js&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;script&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;script&lt;/span&gt; &lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;text/javascript&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;src&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;/_layouts/15/sp.taxonomy.js&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;script&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;/div&gt;   &lt;p&gt;My web part is called &lt;em&gt;AutocompleteWebPart.aspx&lt;/em&gt; so I am going to add a JavaScript file for my code called &lt;em&gt;AutocompleteWebPart.js&lt;/em&gt;.&amp;#160; We also need to include a reference to &lt;a href="http://jqueryui.com"&gt;jQuery UI&lt;/a&gt;&amp;#160; You’ll need to download this and include it in your project or pull it from a CDN.&lt;/p&gt;  &lt;div style="font-size:10pt;font-family:consolas;background:white;color:black;"&gt;   &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;script&lt;/span&gt; &lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;text/javascript&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;src&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;../Scripts/AutocompleteWebPart.js&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;script&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;script&lt;/span&gt; &lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;text/javascript&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;src&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;../Scripts/jquery-ui-1.9.1.custom.min.js&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;script&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;/div&gt;   &lt;p&gt;Lastly to use jQuery UI, you need to include it’s CSS file in the &lt;em&gt;Content&lt;/em&gt; folder of your project.&lt;/p&gt;  &lt;div style="font-size:10pt;font-family:consolas;background:white;color:black;"&gt;   &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;link&lt;/span&gt; &lt;span style="color:red;"&gt;rel&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Stylesheet&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;text/css&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;href&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;../Content/jquery-ui-1.8.22.custom.css&amp;quot;&lt;/span&gt; &lt;span style="color:blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;/div&gt;   &lt;p&gt;Now, I am just going to add a textbox to the body of our page.&lt;/p&gt;  &lt;div style="font-size:10pt;font-family:consolas;background:white;color:black;"&gt;   &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;body&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;div&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;input&lt;/span&gt; &lt;span style="color:red;"&gt;id&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;autocompleteTextBox&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;text&amp;quot;&lt;/span&gt; &lt;span style="color:blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;div&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;body&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;/div&gt;   &lt;p&gt;The process for querying terms is involved.&amp;#160; You first need to get a reference to the Taxonomy Session, followed by the Group, the Term Set, and finally you can iterate the terms.&amp;#160; There are a lot of good examples out there but many of them take short cuts by using GUIDs for values for things like the group and term set.&amp;#160; This works but is absolutely useless when you are writing proper code that can be deployed to any environment.&amp;#160; You need to be able to reference these items by name, but unfortunately the API makes accessing anything in the term store by name difficult.&amp;#160; It’s not impossible though, it just requires extra code and iteration.&amp;#160; Let’s walk through our JavaScript example below with absolutely no hard-coded GUIDs.&lt;/p&gt;  &lt;p&gt;We’ll start by adding some global variables.&amp;#160; We’ll populate these as we go.&lt;/p&gt;  &lt;div style="font-size:10pt;font-family:consolas;background:white;color:black;"&gt;   &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;var&lt;/span&gt; context;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;var&lt;/span&gt; session;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;var&lt;/span&gt; termStore;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;var&lt;/span&gt; groups;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;var&lt;/span&gt; termSets;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;var&lt;/span&gt; termsArray = [];&lt;/p&gt; &lt;/div&gt;   &lt;p&gt;We’ll start in a document ready function.&amp;#160; We use the standard code to get a reference to the current context.&amp;#160; We’ll need this to create a new TaxonomySession object.&amp;#160; We then &lt;em&gt;session.GetDefaultSiteCollectionTermStore()&lt;/em&gt; to get the default term store.&amp;#160; From there, we need to context.load on the session and termStore objects.&amp;#160; We then use a typical &lt;em&gt;executeQueryAsync &lt;/em&gt;method to execute our query.&amp;#160; The &lt;em&gt;onTaxonomySession&lt;/em&gt; method will handle success and we’ll use a shared &lt;em&gt;onTaxonomyFailed&lt;/em&gt; method to handle any failures.&lt;/p&gt;  &lt;div style="font-size:10pt;font-family:consolas;background:white;color:black;"&gt;   &lt;p style="margin:0px;"&gt;$(document).ready(&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;function&lt;/span&gt; () {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; context = &lt;span style="color:blue;"&gt;new&lt;/span&gt; SP.ClientContext.get_current();&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; session = SP.Taxonomy.TaxonomySession.getTaxonomySession(context);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; termStore = session.getDefaultSiteCollectionTermStore();&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; context.load(session);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; context.load(termStore);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; context.executeQueryAsync(onTaxonomySession, onTaxonomyFailed);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; });&lt;/p&gt; &lt;/div&gt;   &lt;p&gt;Just like with the managed API, you must configure your Managed Metadata Service Application Client appropriately in order for the default term store call to work.&amp;#160; Click on the &lt;em&gt;Managed Metadata Service Connection&lt;/em&gt; and then click &lt;em&gt;Properties&lt;/em&gt;.&amp;#160; Now, make sure the checkbox next to &lt;em&gt;This service application is the default storage location for column specific term sets &lt;/em&gt;is checked.&amp;#160; Once, you have made this change your code should work.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/ManagedMetadataServiceDefaultChecked_6AE1800E.png"&gt;&lt;img title="ManagedMetadataServiceDefaultChecked" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="ManagedMetadataServiceDefaultChecked" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/ManagedMetadataServiceDefaultChecked_thumb_5E735CE5.png" width="527" height="174" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The &lt;em&gt;onTaxonomySession &lt;/em&gt;method then retrieves a list of groups.&amp;#160; We have to retrieve all groups because there isn’t a method to just retrieve one by name.&amp;#160; Although there is a method to retrieve a group by id.&amp;#160; Since we don’t want to hard code any GUIDs though.&amp;#160; We have to retrieve all groups and iterate them to find the one we want.&amp;#160; A successful query will call &lt;em&gt;onGroupsLoaded&lt;/em&gt;.&lt;/p&gt;  &lt;div style="font-size:10pt;font-family:consolas;background:white;color:black;"&gt;   &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;function&lt;/span&gt; onTaxonomySession() {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; groups = termStore.get_groups();&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; context.load(groups);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; context.executeQueryAsync(onGroupsLoaded, onTaxonomyFailed);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;}&lt;/p&gt; &lt;/div&gt;   &lt;p&gt;In this method we have a list of the groups so we need to iterate through them and find the one we want.&amp;#160; In this case, &lt;em&gt;Classification&lt;/em&gt;.&amp;#160; The code isn’t ideal but it works.&amp;#160; We start by getting an enumerator with &lt;em&gt;getEnumerator()&lt;/em&gt;.&amp;#160; We then use this enumerator to examine the groups.&amp;#160; In our loop, we use &lt;em&gt;get_current() &lt;/em&gt;to get &lt;em&gt;currentGroup&lt;/em&gt;.&amp;#160; We then use &lt;em&gt;get_name()&lt;/em&gt; to compare against the one we want.&amp;#160; When a match is found, we call another method &lt;em&gt;getTermSets&lt;/em&gt; and pass the term set.&lt;/p&gt;  &lt;div style="font-size:10pt;font-family:consolas;background:white;color:black;"&gt;   &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;function&lt;/span&gt; onGroupsLoaded() {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:green;"&gt;// iterate termStores&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;var&lt;/span&gt; groupEnumerator = groups.getEnumerator();&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;while&lt;/span&gt; (groupEnumerator.moveNext()) {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;var&lt;/span&gt; currentGroup = groupEnumerator.get_current();&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (currentGroup.get_name() == &lt;span style="color:#a31515;"&gt;&amp;#39;Classification&amp;#39;&lt;/span&gt;)&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; getTermSets(currentGroup);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;    &lt;p style="margin:0px;"&gt;}&lt;/p&gt; &lt;/div&gt;   &lt;p&gt;In the &lt;em&gt;getTermSets&lt;/em&gt; method, we call &lt;em&gt;get_termSets.&lt;/em&gt;&lt;/p&gt;  &lt;div style="font-size:10pt;font-family:consolas;background:white;color:black;"&gt;   &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;function&lt;/span&gt; getTermSets(currentGroup) {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; termSets = currentGroup.get_termSets();&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; context.load(termSets);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; context.executeQueryAsync(onTermSetsLoaded, onTaxonomyFailed);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;}&lt;/p&gt; &lt;/div&gt;   &lt;p&gt;The &lt;em&gt;onTermSetLoaded&lt;/em&gt; method will then iterate through the term sets returned and compare by name in the same way.&amp;#160; In this case, we are looking for the term set named &lt;em&gt;States&lt;/em&gt;.&amp;#160; When the match is found, we call &lt;em&gt;getTerms()&lt;/em&gt;.&lt;/p&gt;  &lt;div style="font-size:10pt;font-family:consolas;background:white;color:black;"&gt;   &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;function&lt;/span&gt; onTermSetsLoaded() {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;var&lt;/span&gt; termSetEnumerator = termSets.getEnumerator();&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;while&lt;/span&gt; (termSetEnumerator.moveNext()) {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;var&lt;/span&gt; currentTermSet = termSetEnumerator.get_current();&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;var&lt;/span&gt; termSetName = currentTermSet.get_name();&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (termSetName == &lt;span style="color:#a31515;"&gt;&amp;#39;States&amp;#39;&lt;/span&gt;)&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; getTerms(currentTermSet);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;    &lt;p style="margin:0px;"&gt;}&lt;/p&gt; &lt;/div&gt;   &lt;p&gt;This is now the last call we need to make.&amp;#160; This retrieves all of the terms for the term set.&amp;#160; Unfortunately, we have to get all of them (as far as I know) which is why I don’t recommend this with large term sets.&lt;/p&gt;  &lt;div style="font-size:10pt;font-family:consolas;background:white;color:black;"&gt;   &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;function&lt;/span&gt; getTerms(termSet) {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; terms = termSet.get_terms();&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; context.load(terms);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; context.executeQueryAsync(onTermsLoaded, onTaxonomyFailed);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;}&lt;/p&gt; &lt;/div&gt;   &lt;p&gt;The &lt;em&gt;onTermsLoaded&lt;/em&gt; method will iterate through the terms and add them to an array that the jQuery UI autocomplete method will accept.&amp;#160; There you have it all of the code to get items from a term set without a hard coded GUID.&amp;#160; It’s a lot of code, but not too bad once you get used to it.&lt;/p&gt;  &lt;p&gt;Lastly, we’ll get a reference to our textbox and use the &lt;em&gt;.autocomplete()&lt;/em&gt; method passing in the value of our array.&lt;/p&gt;  &lt;div style="font-size:10pt;font-family:consolas;background:white;color:black;"&gt;   &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;function&lt;/span&gt; onTermsLoaded() {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;var&lt;/span&gt; termsEnumerator = terms.getEnumerator();&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;while&lt;/span&gt; (termsEnumerator.moveNext()) {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;var&lt;/span&gt; currentTerm = termsEnumerator.get_current();&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; termsArray.push(currentTerm.get_name());&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; $(&lt;span style="color:#a31515;"&gt;&amp;quot;#autocompleteTextBox&amp;quot;&lt;/span&gt;).autocomplete({ source: termsArray });&lt;/p&gt;    &lt;p style="margin:0px;"&gt;}&lt;/p&gt; &lt;/div&gt;   &lt;p&gt;At this point, we are done, but we do need to implement our failure method.&lt;/p&gt;  &lt;div style="font-size:10pt;font-family:consolas;background:white;color:black;"&gt;   &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;function&lt;/span&gt; onTaxonomyFailed(sender, args) {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; alert(&lt;span style="color:#a31515;"&gt;&amp;#39;Taxonomy Error:&amp;#39;&lt;/span&gt; + args.get_message());&lt;/p&gt;    &lt;p style="margin:0px;"&gt;}&lt;/p&gt; &lt;/div&gt;   &lt;p&gt;If you are using this code in an app, the last thing you need to do is set the &lt;em&gt;Taxonomy &lt;/em&gt;permission to &lt;em&gt;Read&lt;/em&gt; in the &lt;em&gt;AppManifest.xml&lt;/em&gt; file.&amp;#160; This will let us query the term store.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/AppManifrstTaxonomy_6F0B57D3.png"&gt;&lt;img title="AppManifrstTaxonomy" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="AppManifrstTaxonomy" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/AppManifrstTaxonomy_thumb_06C28F3A.png" width="490" height="148" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;At this point, we can test it.&amp;#160; Deploy your app and add the app part to a page.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/AutocompleteExample_0C9D32D3.png"&gt;&lt;img title="AutocompleteExample" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="AutocompleteExample" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/AutocompleteExample_thumb_39B21FA1.png" width="423" height="301" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;So, a little code involved here but the results are great.&amp;#160; You can configure the jQuery autocomplete plugin in a variety of ways too.&amp;#160; This code could probably be optimized some so if you have improvements, let me know.&lt;/p&gt;&lt;img src="http://www.dotnetmafia.com/aggbug.aspx?PostID=6302" width="1" height="1"&gt;</description><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/Office+365/default.aspx">Office 365</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/Office+365+Grid/default.aspx">Office 365 Grid</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/SharePoint+2013/default.aspx">SharePoint 2013</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/Apps/default.aspx">Apps</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/Client+Object+Model/default.aspx">Client Object Model</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/JavaScript/default.aspx">JavaScript</category></item><item><title>Speaking at SharePoint Saturday Houston, San Antonio SharePoint Users Group, and SharePoint Summit Toronto</title><link>http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2013/04/10/speaking-at-sharepoint-saturday-houston-san-antonio-sharepoint-users-group-and-sharepoint-summit-toronto.aspx</link><pubDate>Wed, 10 Apr 2013 18:54:51 GMT</pubDate><guid isPermaLink="false">ceb7fe2a-c56b-4d85-99e6-8dd548580538:6267</guid><dc:creator>CoreyRoth</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.dotnetmafia.com/blogs/dotnettipoftheday/rsscomments.aspx?PostID=6267</wfw:commentRss><comments>http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2013/04/10/speaking-at-sharepoint-saturday-houston-san-antonio-sharepoint-users-group-and-sharepoint-summit-toronto.aspx#comments</comments><description>&lt;p&gt;I’ve got a number of talks coming up that I am excited about.&amp;#160; It turns out that talking about my experiences publishing SharePoint 2013 apps to the Office Store is hot!&amp;#160; I’ve already spoken about it in Austin and now I’ll be speaking about it at the following events:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.sharepointsaturday.org/houston/default.aspx"&gt;SharePoint Saturday Houston&lt;/a&gt; (4/13)&lt;/li&gt;    &lt;li&gt;&lt;a href="http://sasug.net/SitePages/Home.aspx"&gt;San Antonio SharePoint Users Group&lt;/a&gt; (4/26)&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.dfwsharepoint.com/"&gt;Dallas Fort Worth Users Group&lt;/a&gt; (6/18)&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;If you’re in a major city in Texas and want to hear about apps, I’ve got you covered!&amp;#160; This talk covers my personal experiences building a business around selling apps in the Office Store.&amp;#160; The talk is mostly non-technical and covers more of the details around what you need to submit and publish an app.&amp;#160; If you’re going to be at any of the events be sure and check it out.&lt;/p&gt;  &lt;p&gt;I’m also giving a talk about the various aspects of the Search API in SharePoint 2013 at &lt;a href="http://www.sharepointsummit.org/toronto/Pages/default.aspx"&gt;SharePoint Summit Toronto&lt;/a&gt; (5/13 – 5/15).&amp;#160; If you’re going to be in the area, be sure and check it out!&lt;/p&gt;  &lt;p&gt;Follow me on twitter: &lt;a href="https://twitter.com/coreyroth"&gt;@coreyroth&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://www.dotnetmafia.com/aggbug.aspx?PostID=6267" width="1" height="1"&gt;</description><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/Presentations/default.aspx">Presentations</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/Office+365/default.aspx">Office 365</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/SharePoint+2013/default.aspx">SharePoint 2013</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/Apps/default.aspx">Apps</category></item><item><title>How to: Query SharePoint 2013 using REST and JavaScript</title><link>http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2013/04/09/how-to-query-sharepoint-2013-using-rest-and-javascript.aspx</link><pubDate>Tue, 09 Apr 2013 19:15:40 GMT</pubDate><guid isPermaLink="false">ceb7fe2a-c56b-4d85-99e6-8dd548580538:6261</guid><dc:creator>CoreyRoth</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.dotnetmafia.com/blogs/dotnettipoftheday/rsscomments.aspx?PostID=6261</wfw:commentRss><comments>http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2013/04/09/how-to-query-sharepoint-2013-using-rest-and-javascript.aspx#comments</comments><description>&lt;p&gt;I have a session coming up at SharePoint Summit Toronto this year about the many different ways you can query search.&amp;#160; Whenever I am working on a new talk, it is customary for me to write blog posts about my examples so here it is. :)&amp;#160; I first learned how to query SharePoint 2013 search with the new REST API and JavaScript from looking at examples from &lt;a href="http://twitter.com/scothillier"&gt;@ScotHillier&lt;/a&gt; on &lt;a href="http://code.msdn.microsoft.com/SharePoint-2013-Perform-a-1bf3e87d"&gt;MSDN&lt;/a&gt;.&amp;#160; However, the last time I tried the example, I noticed an issue which I equate to most likely a change between beta and RTM.&amp;#160; This post shows you my version of how to query search using the REST API and JavaScript.&amp;#160; &lt;/p&gt;  &lt;p&gt;For this post, I am using the RTM Office Developer tools (which I have a post coming out on soon).&amp;#160; I am going to use a SharePoint-hosted app for my example but you could also use this in a web part with farm solution as well.&amp;#160; When it comes to apps, you need to be sure and request permission to access search.&amp;#160; Do this by editing your &lt;strong&gt;AppManifest.xml&lt;/strong&gt; and clicking on the permissions tab.&amp;#160; Select &lt;em&gt;Search&lt;/em&gt; and then select &lt;em&gt;QueryAsUserIgnoreAppPrincipal&lt;/em&gt;.&amp;#160; If you forget this step, you won’t get an error, your queries will simply just return zero results.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SearchAppRESTPermission_0FF5692D.png"&gt;&lt;img title="SearchAppRESTPermission" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="SearchAppRESTPermission" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SearchAppRESTPermission_thumb_01B6F03D.png" width="469" height="160" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;For my example, I am just going to add my code to the default.aspx page in the app.&amp;#160; I simply add a textbox, a button, and a div to hold the results.&amp;#160; The user will type in his or her query, click the button, and then see search results.&amp;#160; You could put this in a &lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2013/01/03/how-to-build-client-web-parts-in-sharepoint-2013-with-office-developer-tools-preview-2.aspx"&gt;Client Web Part&lt;/a&gt; if you wanted.&amp;#160; &lt;/p&gt;  &lt;div style="font-size:10pt;font-family:consolas;background:white;color:black;"&gt;   &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;div&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;label&lt;/span&gt; &lt;span style="color:red;"&gt;for&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;searchTextBox&amp;quot;&amp;gt;&lt;/span&gt;Search: &lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;label&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;input&lt;/span&gt; &lt;span style="color:red;"&gt;id&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;searchTextBox&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;text&amp;quot;&lt;/span&gt; &lt;span style="color:blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;input&lt;/span&gt; &lt;span style="color:red;"&gt;id&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;searchButton&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;button&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;value&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Search&amp;quot;&lt;/span&gt; &lt;span style="color:blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;div&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;div&lt;/span&gt; &lt;span style="color:red;"&gt;id&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;resultsDiv&amp;quot;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;div&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;/div&gt;   &lt;p&gt;Now, we need to add the necessary code to &lt;strong&gt;App.js&lt;/strong&gt;.&amp;#160; I start by removing the example code that retrieves the user information.&amp;#160; I instead, add a click handler to my &lt;em&gt;searchButton&lt;/em&gt; to execute the search query.&amp;#160; If you remember from my &lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2012/09/07/getting-started-with-the-search-rest-api-in-sharepoint-2013-preview.aspx"&gt;previous post on REST&lt;/a&gt;, we assemble a URL by appending &lt;em&gt;/api/search/query&lt;/em&gt; to a SharePoint host URL.&amp;#160; For example.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;http://server/_api/search/query&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;However, in an app, we have to request the URL to the App.&amp;#160; One way to do this is by query string using the &lt;em&gt;SPAppWebUrl&lt;/em&gt; parameter.&amp;#160; SharePoint passes this parameter to your app start page automatically.&amp;#160; We can request it with a line line this.&amp;#160; Remember &lt;em&gt;getQueryStringParameter() &lt;/em&gt;is a helper method that we have gotten from some of the SharePoint examples.&amp;#160; I’ll include it in the full code listing at the bottom of this post.&lt;/p&gt; &lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;       &lt;p&gt;var&lt;/p&gt;     &lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font color="#000000" size="2" face="Consolas"&gt;spAppWebUrl = decodeURIComponent(getQueryStringParameter(&lt;/font&gt;&lt;/font&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&amp;#39;SPAppWebUrl&amp;#39;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;&lt;font color="#000000"&gt;));&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;   &lt;p&gt;To pass the user’s query to SharePoint, we need to include the &lt;em&gt;querytext&lt;/em&gt; parameter on the REST URL.&amp;#160; Be sure to enclose the value in single quotes.&amp;#160; Again more details in my &lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2012/09/07/getting-started-with-the-search-rest-api-in-sharepoint-2013-preview.aspx"&gt;previous post&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;font size="2"&gt;&lt;a href="http://server/_api/search/query?querytext=&amp;rsquo;SharePoint&amp;rsquo;"&gt;http://server/_api/search/query?querytext=’SharePoint’&lt;/a&gt;&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Now, we need to create a click handler for the search button, build the URL, and then execute the query.&lt;/p&gt; &lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;     &lt;p&gt;$(&lt;/p&gt;   &lt;/font&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&lt;font color="#a31515" size="2" face="Consolas"&gt;&amp;quot;#searchButton&amp;quot;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;).click(&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;function&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt; () {&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;      &lt;p&gt;});&lt;/p&gt;   &lt;/font&gt;&lt;/font&gt;  &lt;p&gt;Inside the click handler, assemble the URL, using the concatenation of the &lt;em&gt;spAppWebUrl&lt;/em&gt;, &lt;em&gt;/api/search/query&lt;/em&gt;, and the &lt;em&gt;querytext&lt;/em&gt; parameter.&amp;#160; The value of querytext will be retrieved from the textbox we added earlier.&lt;/p&gt;  &lt;div style="font-size:10pt;font-family:consolas;background:white;color:black;"&gt;   &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;var&lt;/span&gt; queryUrl = spAppWebUrl + &lt;span style="color:#a31515;"&gt;&amp;quot;/_api/search/query?querytext=&amp;#39;&amp;quot;&lt;/span&gt; + $(&lt;span style="color:#a31515;"&gt;&amp;quot;#searchTextBox&amp;quot;&lt;/span&gt;).val() + &lt;span style="color:#a31515;"&gt;&amp;quot;&amp;#39;&amp;quot;&lt;/span&gt;;&lt;/p&gt; &lt;/div&gt;   &lt;p&gt;Now, we just execute the query with &lt;strong&gt;$.ajax()&lt;/strong&gt;.&amp;#160; Pass the &lt;em&gt;queryUrl &lt;/em&gt;in the &lt;em&gt;url&lt;/em&gt; parameter.&amp;#160;&amp;#160; This example uses the &lt;em&gt;GET&lt;/em&gt; method but if you have a lot of parameters, you may consider using &lt;em&gt;POST&lt;/em&gt; instead.&amp;#160; Lastly, this part is key to get this example to work.&amp;#160; The accept header must have value of &lt;em&gt;&amp;quot;application/json; odata=verbose&amp;quot;&lt;/em&gt;.&amp;#160; The &lt;em&gt;odata=verbose &lt;/em&gt;part is not in the MSDN example.&amp;#160; If you leave it out, you will receive an error.&amp;#160; The last parameters are the methods that will handle the success and failure of the AJAX call.&amp;#160; Here’s what the whole method looks like.&lt;/p&gt;  &lt;div style="font-size:10pt;font-family:consolas;background:white;color:black;"&gt;   &lt;p style="margin:0px;"&gt;$(&lt;span style="color:#a31515;"&gt;&amp;quot;#searchButton&amp;quot;&lt;/span&gt;).click(&lt;span style="color:blue;"&gt;function&lt;/span&gt; () {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;var&lt;/span&gt; queryUrl = spAppWebUrl + &lt;span style="color:#a31515;"&gt;&amp;quot;/_api/search/query?querytext=&amp;#39;&amp;quot;&lt;/span&gt; + $(&lt;span style="color:#a31515;"&gt;&amp;quot;#searchTextBox&amp;quot;&lt;/span&gt;).val() + &lt;span style="color:#a31515;"&gt;&amp;quot;&amp;#39;&amp;quot;&lt;/span&gt;;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; $.ajax({ url: queryUrl, method: &lt;span style="color:#a31515;"&gt;&amp;quot;GET&amp;quot;&lt;/span&gt;, headers: { &lt;span style="color:#a31515;"&gt;&amp;quot;Accept&amp;quot;&lt;/span&gt;: &lt;span style="color:#a31515;"&gt;&amp;quot;application/json; odata=verbose&amp;quot;&lt;/span&gt; }, success: onQuerySuccess, error: onQueryError });&lt;/p&gt;    &lt;p style="margin:0px;"&gt;});&lt;/p&gt; &lt;/div&gt;   &lt;p&gt;Now, you need to write code to handle the success.&amp;#160; The results come back in JSON format, but unfortunately, they are buried in a hugely nested structure.&amp;#160; Each individual result can be found in &lt;strong&gt;data.d.query.PrimaryQueryResult.RelevantResults.Table.Rows.results&lt;/strong&gt;.&amp;#160; Your best bet is to assign this a variable and then use a template or manually parse it. In my example, I am just going to use $.each to iterate through the results using brute force.&amp;#160; The individual columns of each search result can be found in &lt;strong&gt;this.Cells.results.Value&lt;/strong&gt;.&amp;#160; Ok, that’s confusing I am sure, so let’s look at the code and then step through it.&amp;#160; I’m just writing out a simple table by appending HTML tags to a div.&lt;/p&gt;  &lt;div style="font-size:10pt;font-family:consolas;background:white;color:black;"&gt;   &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;function&lt;/span&gt; onQuerySuccess(data) {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;var&lt;/span&gt; results = data.d.query.PrimaryQueryResult.RelevantResults.Table.Rows.results;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; $(&lt;span style="color:#a31515;"&gt;&amp;quot;#resultsDiv&amp;quot;&lt;/span&gt;).append(&lt;span style="color:#a31515;"&gt;&amp;#39;&amp;lt;table&amp;gt;&amp;#39;&lt;/span&gt;);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; $.each(results, &lt;span style="color:blue;"&gt;function&lt;/span&gt; () {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $(&lt;span style="color:#a31515;"&gt;&amp;quot;#resultsDiv&amp;quot;&lt;/span&gt;).append(&lt;span style="color:#a31515;"&gt;&amp;#39;&amp;lt;tr&amp;gt;&amp;#39;&lt;/span&gt;);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $.each(&lt;span style="color:blue;"&gt;this&lt;/span&gt;.Cells.results, &lt;span style="color:blue;"&gt;function&lt;/span&gt; () {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $(&lt;span style="color:#a31515;"&gt;&amp;quot;#resultsDiv&amp;quot;&lt;/span&gt;).append(&lt;span style="color:#a31515;"&gt;&amp;#39;&amp;lt;td&amp;gt;&amp;#39;&lt;/span&gt; + &lt;span style="color:blue;"&gt;this&lt;/span&gt;.Value + &lt;span style="color:#a31515;"&gt;&amp;#39;&amp;lt;/td&amp;gt;&amp;#39;&lt;/span&gt;);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; });&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $(&lt;span style="color:#a31515;"&gt;&amp;quot;#resultsDiv&amp;quot;&lt;/span&gt;).append(&lt;span style="color:#a31515;"&gt;&amp;#39;&amp;lt;/tr&amp;gt;&amp;#39;&lt;/span&gt;);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; });&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; $(&lt;span style="color:#a31515;"&gt;&amp;quot;#resultsDiv&amp;quot;&lt;/span&gt;).append(&lt;span style="color:#a31515;"&gt;&amp;#39;&amp;lt;/table&amp;gt;&amp;#39;&lt;/span&gt;);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;}&lt;/p&gt; &lt;/div&gt;   &lt;p&gt;Effectively, I have two nested loops.&amp;#160; One to iterate through each result and one for each managed property (column) in the results.&amp;#160; When you get inside the Cell, &lt;strong&gt;this.Value&lt;/strong&gt; will show the value of the result while &lt;strong&gt;this.Key&lt;/strong&gt; will contain the name of the managed property.&amp;#160; &lt;/p&gt;  &lt;p&gt;The last thing to implement is the code to handle errors.&amp;#160; It’s relatively simple and just writes &lt;strong&gt;error.StatusText&lt;/strong&gt; to the div.&lt;/p&gt;  &lt;div style="font-size:10pt;font-family:consolas;background:white;color:black;"&gt;   &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;function&lt;/span&gt; onQueryError(error) {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; $(&lt;span style="color:#a31515;"&gt;&amp;quot;#resultsDiv&amp;quot;&lt;/span&gt;).append(error.statusText)&lt;/p&gt;    &lt;p style="margin:0px;"&gt;}&lt;/p&gt; &lt;/div&gt;   &lt;p&gt;When I run my app, here is what it looks like.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SearchAppDefault_6F6E297A.png"&gt;&lt;img title="SearchAppDefault" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="SearchAppDefault" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SearchAppDefault_thumb_535D6A8F.png" width="361" height="206" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Executing a query in the app, gives us results but they aren’t pretty.&amp;#160; You can pretty them up yourself. :)&amp;#160; It also doesn’t include anything to print out the managed property names on the table.&amp;#160; You could get the names by looking at each cell of the first result and using &lt;strong&gt;this.Value&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SearchAppResults_2818D388.png"&gt;&lt;img title="SearchAppResults" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="SearchAppResults" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SearchAppResults_thumb_4EE6E9C8.png" width="682" height="467" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;You can see, it’s really pretty easy to get started.&amp;#160; You can further refine your REST query to request specific fields, sort orders, and more.&amp;#160; I’ll probably write a follow-up post in the future to include some of those details. Here’s the whole source code for my example that you can work with.&lt;/p&gt;  &lt;div style="font-size:10pt;font-family:consolas;background:white;color:black;"&gt;   &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;var&lt;/span&gt; context = SP.ClientContext.get_current();&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:green;"&gt;// This code runs when the DOM is ready and creates a context object which is needed to use the SharePoint object model&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;$(document).ready(&lt;span style="color:blue;"&gt;function&lt;/span&gt; () {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;var&lt;/span&gt; spAppWebUrl = decodeURIComponent(getQueryStringParameter(&lt;span style="color:#a31515;"&gt;&amp;#39;SPAppWebUrl&amp;#39;&lt;/span&gt;));&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; $(&lt;span style="color:#a31515;"&gt;&amp;quot;#searchButton&amp;quot;&lt;/span&gt;).click(&lt;span style="color:blue;"&gt;function&lt;/span&gt; () {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;var&lt;/span&gt; queryUrl = spAppWebUrl + &lt;span style="color:#a31515;"&gt;&amp;quot;/_api/search/query?querytext=&amp;#39;&amp;quot;&lt;/span&gt; + $(&lt;span style="color:#a31515;"&gt;&amp;quot;#searchTextBox&amp;quot;&lt;/span&gt;).val() + &lt;span style="color:#a31515;"&gt;&amp;quot;&amp;#39;&amp;quot;&lt;/span&gt;;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $.ajax({ url: queryUrl, method: &lt;span style="color:#a31515;"&gt;&amp;quot;GET&amp;quot;&lt;/span&gt;, headers: { &lt;span style="color:#a31515;"&gt;&amp;quot;Accept&amp;quot;&lt;/span&gt;: &lt;span style="color:#a31515;"&gt;&amp;quot;application/json; odata=verbose&amp;quot;&lt;/span&gt; }, success: onQuerySuccess, error: onQueryError });&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; });&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;});&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;function&lt;/span&gt; onQuerySuccess(data) {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;var&lt;/span&gt; results = data.d.query.PrimaryQueryResult.RelevantResults.Table.Rows.results;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; $(&lt;span style="color:#a31515;"&gt;&amp;quot;#resultsDiv&amp;quot;&lt;/span&gt;).append(&lt;span style="color:#a31515;"&gt;&amp;#39;&amp;lt;table&amp;gt;&amp;#39;&lt;/span&gt;);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; $.each(results, &lt;span style="color:blue;"&gt;function&lt;/span&gt; () {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $(&lt;span style="color:#a31515;"&gt;&amp;quot;#resultsDiv&amp;quot;&lt;/span&gt;).append(&lt;span style="color:#a31515;"&gt;&amp;#39;&amp;lt;tr&amp;gt;&amp;#39;&lt;/span&gt;);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $.each(&lt;span style="color:blue;"&gt;this&lt;/span&gt;.Cells.results, &lt;span style="color:blue;"&gt;function&lt;/span&gt; () {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $(&lt;span style="color:#a31515;"&gt;&amp;quot;#resultsDiv&amp;quot;&lt;/span&gt;).append(&lt;span style="color:#a31515;"&gt;&amp;#39;&amp;lt;td&amp;gt;&amp;#39;&lt;/span&gt; + &lt;span style="color:blue;"&gt;this&lt;/span&gt;.Value + &lt;span style="color:#a31515;"&gt;&amp;#39;&amp;lt;/td&amp;gt;&amp;#39;&lt;/span&gt;);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; });&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $(&lt;span style="color:#a31515;"&gt;&amp;quot;#resultsDiv&amp;quot;&lt;/span&gt;).append(&lt;span style="color:#a31515;"&gt;&amp;#39;&amp;lt;/tr&amp;gt;&amp;#39;&lt;/span&gt;);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; });&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; $(&lt;span style="color:#a31515;"&gt;&amp;quot;#resultsDiv&amp;quot;&lt;/span&gt;).append(&lt;span style="color:#a31515;"&gt;&amp;#39;&amp;lt;/table&amp;gt;&amp;#39;&lt;/span&gt;);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;}&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;function&lt;/span&gt; onQueryError(error) {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; $(&lt;span style="color:#a31515;"&gt;&amp;quot;#resultsDiv&amp;quot;&lt;/span&gt;).append(error.statusText)&lt;/p&gt;    &lt;p style="margin:0px;"&gt;}&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:green;"&gt;//function to get a parameter value by a specific key&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;function&lt;/span&gt; getQueryStringParameter(urlParameterKey) {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;var&lt;/span&gt; params = document.URL.split(&lt;span style="color:#a31515;"&gt;&amp;#39;?&amp;#39;&lt;/span&gt;)[1].split(&lt;span style="color:#a31515;"&gt;&amp;#39;&amp;amp;&amp;#39;&lt;/span&gt;);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;var&lt;/span&gt; strParams = &lt;span style="color:#a31515;"&gt;&amp;#39;&amp;#39;&lt;/span&gt;;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;for&lt;/span&gt; (&lt;span style="color:blue;"&gt;var&lt;/span&gt; i = 0; i &amp;lt; params.length; i = i + 1) {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;var&lt;/span&gt; singleParam = params[i].split(&lt;span style="color:#a31515;"&gt;&amp;#39;=&amp;#39;&lt;/span&gt;);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (singleParam[0] == urlParameterKey)&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;return&lt;/span&gt; decodeURIComponent(singleParam[1]);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;    &lt;p style="margin:0px;"&gt;}&lt;/p&gt; &lt;/div&gt;   &lt;p&gt;That’s all there is to it.&amp;#160; Hopefully, you find this example useful.&amp;#160; Thanks.&lt;/p&gt;  &lt;p&gt;The complete Visual Studio for this code snipped has also been uploaded to &lt;a href="http://code.msdn.microsoft.com/SharePoint-2013-Querying-623fd85a"&gt;MSDN Code Samples&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://www.dotnetmafia.com/aggbug.aspx?PostID=6261" width="1" height="1"&gt;</description><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/Enterprise+Search/default.aspx">Enterprise Search</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/Office+365/default.aspx">Office 365</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/Office+365+Grid/default.aspx">Office 365 Grid</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/Visual+Studio+11/default.aspx">Visual Studio 11</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/SharePoint+2013/default.aspx">SharePoint 2013</category></item><item><title>Importing Search Configurations with SharePoint Apps</title><link>http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2013/04/03/importing-search-configurations-with-sharepoint-apps.aspx</link><pubDate>Wed, 03 Apr 2013 16:21:44 GMT</pubDate><guid isPermaLink="false">ceb7fe2a-c56b-4d85-99e6-8dd548580538:6255</guid><dc:creator>CoreyRoth</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.dotnetmafia.com/blogs/dotnettipoftheday/rsscomments.aspx?PostID=6255</wfw:commentRss><comments>http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2013/04/03/importing-search-configurations-with-sharepoint-apps.aspx#comments</comments><description>&lt;p&gt;The Office Developer Tools team snuck a new feature into the RTM version of the tools for Visual Studio 2012.&amp;#160; This new feature allows you to deploy apps and actually &lt;em&gt;alter the search schema on the host web&lt;/em&gt;.&amp;#160; That’s right.&amp;#160; You can deploy an app and it will directly change the search configuration on the host.&amp;#160; They just released &lt;a href="http://msdn.microsoft.com/en-us/library/office/apps/dn194077.aspx"&gt;documentation&lt;/a&gt; on it a while back, but as usual, I wanted to share my experiences.&amp;#160; That and I know you all like screenshots.&lt;/p&gt;  &lt;p&gt;What does this feature actually do?&amp;#160; Well let’s back up a bit.&amp;#160; If you remember back from my post, &lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2012/07/17/what-you-need-to-know-about-search-in-sharepoint-2013-preview.aspx"&gt;Search is Everywhere&lt;/a&gt;, I mentioned the we now had the ability to export and import search settings.&amp;#160; This works at the SSA, site collection, and site level and allows you to move everything from result sources to managed properties from one environment to another.&amp;#160; This is big as it lets you finally promote search settings between environments and maintain a true SDLC when it comes to search.&amp;#160; Why do we care about search configuration with apps?&amp;#160; Well this allows the developer to package up search settings in Visual Studio 2012 and then move them to production without having to do manual steps or use PowerShell.&amp;#160; This also means you could include search settings in an app that you would put in the Office Store.&amp;#160; It certainly opens up possibilities.&lt;/p&gt;  &lt;p&gt;To test this out, go to your source site collection and customize your search settings.&amp;#160; In my example, I created a custom result source and some managed properties on our source site.&amp;#160; In my example, I actually did this on an on-premises installation of SharePoint 2013.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SearchConfigurationResultSourceSite1_5F4169CA.png"&gt;&lt;img title="SearchConfigurationResultSourceSite1" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="SearchConfigurationResultSourceSite1" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SearchConfigurationResultSourceSite1_thumb_11A53D4A.png" width="465" height="299" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This particular result source does nothing exciting.&amp;#160; It simply limits the search to documents, but it serves as a good example.&amp;#160; I’ve also created a managed property mapped to the Author crawled property.&amp;#160; You may already know about this part, but I am showing it for a reason.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SearchConfigurationManagedPropertySite1_3FFEC2F7.png"&gt;&lt;img title="SearchConfigurationManagedPropertySite1" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="SearchConfigurationManagedPropertySite1" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SearchConfigurationManagedPropertySite1_thumb_59D2F926.png" width="466" height="281" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now, I am going to export my search settings of my site collection, by going to Site Settings –&amp;gt; Search –&amp;gt; Configuration Export.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SiteCollectionSearchSettingsExport_1A0912A1.png"&gt;&lt;img title="SiteCollectionSearchSettingsExport" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="SiteCollectionSearchSettingsExport" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SiteCollectionSearchSettingsExport_thumb_0C36CCA6.png" width="209" height="199" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;At this point, I could manually import the search settings using Configuration Import on another site collection.&amp;#160; However, we want to do this from an app.&amp;#160; Let’s get started in Visual Studio 2012.&amp;#160; Start by creating a new SharePoint-hosted app.&amp;#160; Once it is created, add an item to the project and choose &lt;em&gt;Search Configuration&lt;/em&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/VS2012SearchConfigurationSPI_4C6CE620.png"&gt;&lt;img title="VS2012SearchConfigurationSPI" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="VS2012SearchConfigurationSPI" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/VS2012SearchConfigurationSPI_thumb_2194820E.png" width="501" height="348" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The next step will ask for the path to your configuration XML file that you exported.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/VS2012SearchConfigurationImportSettings_33DD48D0.png"&gt;&lt;img title="VS2012SearchConfigurationImportSettings" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="VS2012SearchConfigurationImportSettings" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/VS2012SearchConfigurationImportSettings_thumb_0D0F3290.png" width="475" height="375" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;At this point the process is done.&amp;#160; It will show you an XML editor with the contents of your search configuration.&amp;#160; According to the MSDN documentation, you then need to edit it and set the &lt;em&gt;DeployToParent&lt;/em&gt; element to &lt;em&gt;true&lt;/em&gt;.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SearchConfigurationDeployToParentTrue_6236CE7D.png"&gt;&lt;img title="SearchConfigurationDeployToParentTrue" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="SearchConfigurationDeployToParentTrue" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SearchConfigurationDeployToParentTrue_thumb_3B68B83D.png" width="473" height="184" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;We then need to grant permissions to access the Site Collection.&amp;#160; To do this, open &lt;strong&gt;AppManifest.xml &lt;/strong&gt;and then click on &lt;em&gt;Permissions&lt;/em&gt;.&amp;#160; On this tab, add a scope of &lt;em&gt;Site Collection&lt;/em&gt; and set the value to &lt;em&gt;Full Control&lt;/em&gt;.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/VS2012SearchConfigurationAppManifestPermissions_0DE7987A.png"&gt;&lt;img title="VS2012SearchConfigurationAppManifestPermissions" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="VS2012SearchConfigurationAppManifestPermissions" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/VS2012SearchConfigurationAppManifestPermissions_thumb_42F427AA.png" width="469" height="138" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;At this point, we are are ready to deploy.&amp;#160; In my example, I am taking my search configuration and deploying it to an Office 365 SharePoint Online tenant.&amp;#160; When the app deployment completes, you’ll be prompted if you want to trust the app.&amp;#160; Trust it and then you should see your app start page.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/VS2012SearchConfigurationDeploymentTrust_3CAD511C.png"&gt;&lt;img title="VS2012SearchConfigurationDeploymentTrust" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="VS2012SearchConfigurationDeploymentTrust" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/VS2012SearchConfigurationDeploymentTrust_thumb_2AD0BD4F.png" width="454" height="270" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;At this point, you are just going to see you default app start page.&amp;#160; There is nothing visible in the application.&amp;#160; Go to the Developer Site (or the site collection you deployed to) and go to the Site Settings.&amp;#160; Then look at the Result Sources.&amp;#160; If everything worked correctly, you should now see your new result source there.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SearchConfigurationResultSourceDeployed_0402A70F.png"&gt;&lt;img title="SearchConfigurationResultSourceDeployed" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="SearchConfigurationResultSourceDeployed" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SearchConfigurationResultSourceDeployed_thumb_5D3490CE.png" width="456" height="294" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;It was successfully deployed.&amp;#160; Now what about the managed property?&amp;#160; Unfortunately, it is no where to be found.&amp;#160; If you go back to Visual Studio and look at your XML, you’ll notice that your managed property definition is no where to be found there either.&amp;#160; If you check the source file before you imported it though, you’ll see the definition.&amp;#160; After I noticed this particular behavior, I reached out on Twitter and &lt;a href="http://twitter.com/chakkaradeep"&gt;@chakkaradeep&lt;/a&gt; reached out to me and told me that managed properties aren’t supported in this deployment model.&amp;#160; That made me kind of sad because that’s what I want to deploy the most.&amp;#160; I’m sure there is a technical reason though that he’ll explain to me sometime though.&amp;#160; You can still deploy managed properties via Configuration Import though which is still a great added feature of SharePoint 2013.&lt;/p&gt;  &lt;p&gt;You might be curious if the result source is removed when you uninstall the app.&amp;#160; It turns out that the changes are indeed removed when you uninstall.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SearchConfigurationResultSourceRemoved_1D6AAA49.png"&gt;&lt;img title="SearchConfigurationResultSourceRemoved" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="SearchConfigurationResultSourceRemoved" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SearchConfigurationResultSourceRemoved_thumb_5DA0C3C3.png" width="397" height="264" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Aside from the managed properties not being available, this is still a pretty cool feature and it has me thinking about some new things I can do that I didn’t think were possible before.&amp;#160; I’m pretty excited to work with it more.&lt;/p&gt;&lt;img src="http://www.dotnetmafia.com/aggbug.aspx?PostID=6255" width="1" height="1"&gt;</description><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/Enterprise+Search/default.aspx">Enterprise Search</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/SharePoint+Online/default.aspx">SharePoint Online</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/Office+365/default.aspx">Office 365</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/Office+365+Grid/default.aspx">Office 365 Grid</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/Visual+Studio+11/default.aspx">Visual Studio 11</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/SharePoint+2013/default.aspx">SharePoint 2013</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/Apps/default.aspx">Apps</category></item><item><title>Configuring and using IRM with Office 365 and SharePoint Online</title><link>http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2013/03/28/configuring-and-using-irm-with-office-365-and-sharepoint-online.aspx</link><pubDate>Thu, 28 Mar 2013 21:34:16 GMT</pubDate><guid isPermaLink="false">ceb7fe2a-c56b-4d85-99e6-8dd548580538:6249</guid><dc:creator>CoreyRoth</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.dotnetmafia.com/blogs/dotnettipoftheday/rsscomments.aspx?PostID=6249</wfw:commentRss><comments>http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2013/03/28/configuring-and-using-irm-with-office-365-and-sharepoint-online.aspx#comments</comments><description>&lt;p&gt;I’ve always founds IRM quite fascinating and the nice thing about Office 365 is that it is really easy to configure and use.&amp;#160; There are a few steps involved, but I managed to figure them out without having to go read a heap of documentation.&amp;#160; I thought I would share my experience here today so you know what’s possible.&amp;#160; This assumes you are on a new Office 365 tenant or one that has been upgraded already (not that any of mine have been. :) ).&amp;#160; I know this is only available in certain plans and I need to double-check which ones, but I haven’t had a chance yet.&amp;#160; If you set up a trial from &lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2013/03/15/microsoft-partner-benefits-rocking-your-sharepoint-online-demos.aspx"&gt;MicrosoftOfficeDemos.com&lt;/a&gt;, you can definitely try it with that account.&lt;/p&gt;  &lt;p&gt;To configure IRM, it requires you turn it on in two places: in the Office 365 Portal and in SharePoint Online tenant administration.&amp;#160; Let’s start by going to the Office 365 Portal.&amp;#160; You can get there by clicking on &lt;em&gt;Admin &lt;/em&gt;–&amp;gt; &lt;em&gt;Office 365 &lt;/em&gt;at the top.&amp;#160; Then click on &lt;em&gt;Service Settings &lt;/em&gt;–&amp;gt; &lt;em&gt;Rights Management&lt;/em&gt;.&amp;#160; Rights Management is disabled by default, so you need to activate it.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/Office365RightsManagement_64A8E61B.png"&gt;&lt;img title="Office365RightsManagement" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="Office365RightsManagement" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/Office365RightsManagement_thumb_29E13D45.png" width="579" height="279" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;On this screen simply click Manage and you will be taken to the Windows Azure Directory Rights Management site (notice the URL changes).&amp;#160; From here, you can start the activation process.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/Office365RightsManagementDisabled_61B38168.png"&gt;&lt;img title="Office365RightsManagementDisabled" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="Office365RightsManagementDisabled" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/Office365RightsManagementDisabled_thumb_39A0D249.png" width="485" height="168" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Click the &lt;em&gt;Activate &lt;/em&gt;button and you’ll be taken to a screen to confirm.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/Office365RightsManagementActivate_462E7F65.png"&gt;&lt;img title="Office365RightsManagementActivate" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="Office365RightsManagementActivate" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/Office365RightsManagementActivate_thumb_65712638.png" width="468" height="205" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Click the &lt;em&gt;Activate&lt;/em&gt; button again and the process gets started.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/Office365RightsManagementActivated_0851E7E9.png"&gt;&lt;img title="Office365RightsManagementActivated" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="Office365RightsManagementActivated" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/Office365RightsManagementActivated_thumb_070D4F0A.png" width="513" height="172" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now, you need to go your SharePoint tenant administration to activate it there.&amp;#160; Click on &lt;em&gt;Admin&lt;/em&gt; –&amp;gt; &lt;em&gt;SharePoint &lt;/em&gt;and then &lt;em&gt;Settings&lt;/em&gt;.&amp;#160; In the middle of the page, look for the Information Rights Management (IRM) section and check &lt;em&gt;Use the IRM service specified in your configuration&lt;/em&gt;.&amp;#160; Then click &lt;em&gt;Refresh IRM Settings&lt;/em&gt;.&amp;#160; Now, it takes a few minutes for your activation to take effect in the Office 365 Portal so if you click on this too early, you are likely to see the following error.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Error: RMS Online is configured for this tenant but is turned off, please turn on in Office 365 to enable.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SharePointOnlineRightsManagementNotActivated_7A9F2BE0.png"&gt;&lt;img title="SharePointOnlineRightsManagementNotActivated" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="SharePointOnlineRightsManagementNotActivated" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SharePointOnlineRightsManagementNotActivated_thumb_4B6D4049.png" width="696" height="93" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Keep trying and after a few minutes, it should activate.&amp;#160; Be sure and click &lt;em&gt;Save&lt;/em&gt; when you are done.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SharePointOnlineRightsManagementActivated_4A28A76A.png"&gt;&lt;img title="SharePointOnlineRightsManagementActivated" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="SharePointOnlineRightsManagementActivated" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SharePointOnlineRightsManagementActivated_thumb_50034B03.png" width="698" height="91" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;At this point, you can actually try things out inside office.&amp;#160; I’m working off of the demo sites that I mentioned earlier.&amp;#160; Now, one thing to point out is that Office uses whatever account you are signed in with to determine which Rights Management Server to connect to.&amp;#160; Therefore, if you are using a test Office 365 account, you need to actually, log into Office with that account.&amp;#160; Simply click on your name in the top right and click Switch Account.&amp;#160; If you don’t do this, it may time out or try to connect to another RMS server like the one at your company.&lt;/p&gt;  &lt;p&gt;To try things out, open up a document on your SharePoint server, click &lt;em&gt;File&lt;/em&gt; and then click &lt;em&gt;Protect Document &lt;/em&gt;and then &lt;em&gt;Restrict Access&lt;/em&gt;.&amp;#160; The first time you choose this, there is an option to connect to rights management services.&amp;#160; Once it connects, you’ll see options on protecting the document.&amp;#160; We’re going to go with &lt;em&gt;Restricted Access&lt;/em&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/WordRestrictAccess_20D15F6C.png"&gt;&lt;img title="WordRestrictAccess" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="WordRestrictAccess" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/WordRestrictAccess_thumb_3412160B.png" width="522" height="577" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;On the next screen, you will be prompted to assign who can view the document or edit the document.&amp;#160; In my example, I am going to grant read permission to Sara Davis.&amp;#160; I simply typed in her full Office 365 Id.&amp;#160; This means she will be able to open the document and view it, but cannot save or print it.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/IRMRestrictPermission_527C56F4.png"&gt;&lt;img title="IRMRestrictPermission" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="IRMRestrictPermission" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/IRMRestrictPermission_thumb_6A338E5A.png" width="439" height="325" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;If you click on &lt;em&gt;More Options&lt;/em&gt;, you’ll get a window where you can set even more granular permissions such as expiring the document, allowing printing, as well as an E-mail address that gets used to request additional permissions.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/IRMAdvancedPermissions_56A62EB9.png"&gt;&lt;img title="IRMAdvancedPermissions" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="IRMAdvancedPermissions" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/IRMAdvancedPermissions_thumb_2E937F9A.png" width="381" height="412" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Once we are finished, save the document back to SharePoint.&amp;#160; Now, when Sara opens the document, she is going to get a different experience.&amp;#160; To test using the document with Sara, I have to sign in to SharePoint with her account.&amp;#160; I also have to open Office and sign out with Garth and sign in with Sara’s account.&amp;#160; Here’s what it looks like.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/IRMPermissionReadOnly_185D6448.png"&gt;&lt;img title="IRMPermissionReadOnly" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="IRMPermissionReadOnly" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/IRMPermissionReadOnly_thumb_3733D826.png" width="603" height="433" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Office informs me that access is restricted and if I click &lt;em&gt;View Permission&lt;/em&gt;, it will show me what I am allowed to do.&amp;#160; Notice I can only view the document.&amp;#160; If I try to access the document with a user who does not have access granted through IRM, Office tells me I can’t open the document like this.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/IRMPermissionDenied_6A8F9B82.png"&gt;&lt;img title="IRMPermissionDenied" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="IRMPermissionDenied" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/IRMPermissionDenied_thumb_694B02A3.png" width="722" height="106" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;When a document is protected with IRM, Office Web Apps will be unable to show a preview of the document’s contents.&amp;#160; Here’s what it looks like when that happens.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/WordWebAppBlockedIRM_47EB5D07.png"&gt;&lt;img title="WordWebAppBlockedIRM" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="WordWebAppBlockedIRM" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/WordWebAppBlockedIRM_thumb_2DAAF3E3.png" width="321" height="362" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I really like how easy it is to get started with IRM in Office 365.&amp;#160; If you have an interest in this feature, check it out today.&amp;#160; It’s definitely much easier to get started with it here than it is on-premises.&lt;/p&gt;&lt;img src="http://www.dotnetmafia.com/aggbug.aspx?PostID=6249" width="1" height="1"&gt;</description><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/Office+365/default.aspx">Office 365</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/Office+365+Grid/default.aspx">Office 365 Grid</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/SharePoint+2013/default.aspx">SharePoint 2013</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/IRM/default.aspx">IRM</category></item><item><title>Determining the most popular items in a document library in SharePoint 2013</title><link>http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2013/03/28/determining-the-most-popular-items-in-a-document-library-in-sharepoint-2013.aspx</link><pubDate>Thu, 28 Mar 2013 19:39:39 GMT</pubDate><guid isPermaLink="false">ceb7fe2a-c56b-4d85-99e6-8dd548580538:6248</guid><dc:creator>CoreyRoth</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.dotnetmafia.com/blogs/dotnettipoftheday/rsscomments.aspx?PostID=6248</wfw:commentRss><comments>http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2013/03/28/determining-the-most-popular-items-in-a-document-library-in-sharepoint-2013.aspx#comments</comments><description>&lt;p&gt;With the combination of &lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2012/07/17/what-you-need-to-know-about-search-in-sharepoint-2013-preview.aspx"&gt;analytics and search&lt;/a&gt; in SharePoint 2013, there is a heap of new features to help determine which content is actually being used.&amp;#160; No longer is this information buried in reports for administrators, but it in fact is available right from the ribbon in a document library.&amp;#160; Maybe you have even noticed the &lt;em&gt;Most Popular Items&lt;/em&gt; button in the ribbon already.&amp;#160; You can find it on the library tab in the middle.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/DocumentLibraryMostPopularItemsRibbonButton_36C6C038.png"&gt;&lt;img title="DocumentLibraryMostPopularItemsRibbonButton" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="DocumentLibraryMostPopularItemsRibbonButton" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/DocumentLibraryMostPopularItemsRibbonButton_thumb_123532B4.png" width="493" height="212" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Click on it and you will be taken to a custom search results screen that shows you recent views and total views.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/MostPopularItemsReport_6AFAE97E.png"&gt;&lt;img title="MostPopularItemsReport" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="MostPopularItemsReport" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/MostPopularItemsReport_thumb_7CD77D4B.png" width="551" height="405" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;What’s nice is that you can even search and refine within the report if you are looking for something specific.&amp;#160; You can also click on the &lt;em&gt;Popularity Trends&lt;/em&gt; link to get a nice graph of the usage of the file over time.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/PopularityTrendsReportExcel_3177D987.png"&gt;&lt;img title="PopularityTrendsReportExcel" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="PopularityTrendsReportExcel" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/PopularityTrendsReportExcel_thumb_70D58D17.png" width="548" height="451" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;Behind the scenes, this report is powered by the &lt;em&gt;Popular&lt;/em&gt; result source.&amp;#160; You can also use this source to look for popular items across your entire index.&amp;#160; As a developer, the possibilities are quite interesting.&lt;/p&gt;  &lt;p&gt;My particular tenant doesn’t have a ton of usage, but if you’re already running SharePoint 2013 you might be able to extract some valuable insights from this report.&amp;#160; Try it out today.&lt;/p&gt;&lt;img src="http://www.dotnetmafia.com/aggbug.aspx?PostID=6248" width="1" height="1"&gt;</description><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/Document+Library/default.aspx">Document Library</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/Enterprise+Search/default.aspx">Enterprise Search</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/SharePoint+Online/default.aspx">SharePoint Online</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/Office+365/default.aspx">Office 365</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/Office+365+Grid/default.aspx">Office 365 Grid</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/SharePoint+2013/default.aspx">SharePoint 2013</category></item><item><title>Microsoft Partner Benefits: Rocking your SharePoint Online demos</title><link>http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2013/03/15/microsoft-partner-benefits-rocking-your-sharepoint-online-demos.aspx</link><pubDate>Fri, 15 Mar 2013 15:51:11 GMT</pubDate><guid isPermaLink="false">ceb7fe2a-c56b-4d85-99e6-8dd548580538:6231</guid><dc:creator>CoreyRoth</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.dotnetmafia.com/blogs/dotnettipoftheday/rsscomments.aspx?PostID=6231</wfw:commentRss><comments>http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2013/03/15/microsoft-partner-benefits-rocking-your-sharepoint-online-demos.aspx#comments</comments><description>&lt;p&gt;If you haven’t heard, Microsoft released a &lt;a href="https://www.microsoftofficedemos.com/"&gt;new site&lt;/a&gt; recently that allows you to create a new Office 365 tenant that is pre-populated with users, content, and social data.&amp;#160; It even comes with demo scripts that you can use to walk users through the new features of SharePoint Online.&amp;#160; What’s the catch?&amp;#160; Your Windows Live ID must be affiliated with a Microsoft Partner and you need to have plenty of time to wait for it to provision.&amp;#160; It typically takes between 8 and 36 hours for the provisioning process to complete.&amp;#160; Tenants are created in trial mode and you have 30 days that you can use it for free.&amp;#160; After that, you can either pay for licenses or simply request a new tenant.&amp;#160; This isn’t necessarily a bad thing, because the sample social data expires after 14 days.&amp;#160; If you want to demonstrate social, it’s really just easier to get a new tenant.&lt;/p&gt;  &lt;p&gt;Even if you work for a partner and a lot of you out there do, I found that a lot of people aren’t affiliated with their company’s partner Id.&amp;#160; So if you click on the Microsoft Partner link and it gives you an error, you need to affiliate yourself with your company’s partnership.&amp;#160; I’ve given a few colleagues this &lt;a href="https://partners.microsoft.com/partnerprogram/OrganizationSelect.aspx?BrowserCheck=true"&gt;link&lt;/a&gt; to associate themselves and it appears to have worked for them.&amp;#160; Let me know if you have an issue with it.&lt;/p&gt;  &lt;p&gt;When you are ready to create a new tenant, go to the &lt;a href="https://www.microsoftofficedemos.com/Provision.aspx"&gt;Create Demo&lt;/a&gt; page.&amp;#160; This page is a bit confusing because all of the options are disabled. Just click &lt;em&gt;Create Your Demo&lt;/em&gt; to proceed.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/MODDemosProvisionStep1_30C2C4CF.png"&gt;&lt;img title="MODDemosProvisionStep1" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="MODDemosProvisionStep1" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/MODDemosProvisionStep1_thumb_3775CE52.png" width="457" height="306" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;On this page, you specify your region, tenant name, and E-mail address.&amp;#160; You’ll get an E-mail when the process completes with the URL and login information.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/MODDemosProvisionStep2_29375562.png"&gt;&lt;img title="MODDemosProvisionStep2" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="MODDemosProvisionStep2" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/MODDemosProvisionStep2_thumb_69013BE7.png" width="518" height="332" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;   &lt;p&gt;After you fill in your information, click &lt;em&gt;Create My Account&lt;/em&gt; and start waiting.&amp;#160; This is an excellent time to review some of the demo scripts out there.&amp;#160; Click the &lt;em&gt;Resources&lt;/em&gt; link at the top and you’ll see demo scripts broken up by product.&amp;#160; This is also an excellent time to go ahead and stop reading this article and get your tenant provisioning.&amp;#160; You can come back and read more once you get it started. :)&lt;/p&gt;    &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/MODDemosScripts_4F9938AD.png"&gt;&lt;img title="MODDemosScripts" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="MODDemosScripts" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/MODDemosScripts_thumb_480DC940.png" width="426" height="287" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;/p&gt;  &lt;p&gt;When the process completes, you will receive an e-mail with the login and password.&amp;#160; Click on that link to begin exploring.&amp;#160; However, for most of the demos they recommend a demo user, Garth Fort.&amp;#160; The login for this user will be &lt;strong&gt;garthf@tenantname.onmicrosoft.com&lt;/strong&gt;.&amp;#160; The password should be the same for all accounts &lt;strong&gt;pass@word1&lt;/strong&gt;.&amp;#160; Keep that in mind.&amp;#160; You may want to change the default passwords of your accounts.&amp;#160; If you look at the users section, you will see a number of user accounts have been created for you.&amp;#160; It even includes things like conference rooms.&amp;#160; These users have pictures and completed user profiles and even social data which we’ll see later.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/MODDemosUsers_0E1E8654.png"&gt;&lt;img title="MODDemosUsers" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="MODDemosUsers" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/MODDemosUsers_thumb_1F22B437.png" width="510" height="457" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I’m going to focus on SharePoint content, so click on the Admin link at the top and choose SharePoint.&amp;#160; When you go to the SharePoint Online administration tenant, you’ll see that it creates a number of site collections.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/MODDemosSiteCollections_0CD9ED75.png"&gt;&lt;img title="MODDemosSiteCollections" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="MODDemosSiteCollections" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/MODDemosSiteCollections_thumb_4CA3D3FA.png" width="498" height="346" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Although it’s fairly obvious.&amp;#160; Here’s a quick summary of what’s in the site collections.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Root (/)&lt;/strong&gt; – Demo landing page.&amp;#160; Links to the various site assets and demo scripts for SharePoint&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;/Search&lt;/strong&gt; – Search Center&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;/sites/BICenter&lt;/strong&gt; – Demos using Power View and Visio Services&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;/sites/Communities&lt;/strong&gt; – fully populated community sites with discussion boards&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;/sites/Contoso&lt;/strong&gt; – main Intranet site&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;/sites/ContosoBeta – &lt;/strong&gt;no content&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;/sites/eDiscovery&lt;/strong&gt; – discovery center&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;/sites/KnowledgeCenter &lt;/strong&gt;– knowledge center with custom branding&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;What I like about these demos is that there is a lot of examples of what SharePoint can do and a lot of the features are really highlighted.&amp;#160; I’ll take you through some of the pages so you have an idea of what you can expect.&amp;#160; When you go to the root of your tenant, you’ll see a landing page with links to the demo home page, assets, and scripts.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/MODDemosSharePointLanding_25698AC5.png"&gt;&lt;img title="MODDemosSharePointLanding" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="MODDemosSharePointLanding" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/MODDemosSharePointLanding_thumb_7305B745.png" width="492" height="358" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;A good starting place is the Demo Home Page.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/MODDemosHomePage_443FFEA3.png"&gt;&lt;img title="MODDemosHomePage" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="MODDemosHomePage" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/MODDemosHomePage_thumb_5714824D.png" width="664" height="350" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now is a great time to start exploring the site.&amp;#160; What I like is a lot of the sites demonstrate out-of-the-box features.&amp;#160; Take a look at the Engineering Department site.&amp;#160; They have an example of showing reports with Power View using Excel Services.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/MODDemosEngineering_0180B36B.png"&gt;&lt;img title="MODDemosEngineering" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="MODDemosEngineering" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/MODDemosEngineering_thumb_20572749.png" width="682" height="383" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;If we look at the Sales and Marketing site, it has some nice examples of KPIs, the PowerPoint viewer as well as documents that have been rated.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/MODDemosSalesMarketing_7FCFE796.png"&gt;&lt;img title="MODDemosSalesMarketing" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="MODDemosSalesMarketing" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/MODDemosSalesMarketing_thumb_340410DD.png" width="684" height="414" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;If you’re looking to tell a story about BI, click on the Report Dashboard link on the left.&amp;#160; There is a good example of a Power View sheet with filters and maps.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/MODDemosSalesMarketingReportDashboard_3397DDE8.png"&gt;&lt;img title="MODDemosSalesMarketingReportDashboard" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="MODDemosSalesMarketingReportDashboard" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/MODDemosSalesMarketingReportDashboard_thumb_3DE90248.png" width="681" height="487" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;One of my favorite sections of the demo is the Communities section.&amp;#160; It’s a great example of using social and shows off the gamification concepts quite well.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/MODDemosCommunities_52021ED1.png"&gt;&lt;img title="MODDemosCommunities" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="MODDemosCommunities" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/MODDemosCommunities_thumb_115FD262.png" width="624" height="389" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Going to one of the communities, you’ll see active discussion boards with top contributors.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/MODDemosCommunityProductIdeas_03215972.png"&gt;&lt;img title="MODDemosCommunityProductIdeas" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="MODDemosCommunityProductIdeas" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/MODDemosCommunityProductIdeas_thumb_20B33471.png" width="677" height="481" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;You can view individual discussions to show how users interact with each other.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/MODDemosCommunityProductIdeasExample_66C3F184.png"&gt;&lt;img title="MODDemosCommunityProductIdeasExample" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="MODDemosCommunityProductIdeasExample" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/MODDemosCommunityProductIdeasExample_thumb_4CEFBB55.png" width="555" height="482" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I think the social aspects are some of the best things to demo.&amp;#160; If you click on the Newsfeed link, you’ll find quite a bit of activity.&amp;#160; Just keep in mind this information will expire after two weeks so it’s good to keep a fresh tenant when you’re doing a demo.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/MODDemosNewsfeed_25493F2B.png"&gt;&lt;img title="MODDemosNewsfeed" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="MODDemosNewsfeed" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/MODDemosNewsfeed_thumb_7DA2C300.png" width="712" height="491" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;In the screenshot above, you’ll see posts from users that Garth is following as well as various things the user has posted or followed.&amp;#160; That video can be watched directly from the newsfeed too.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/MODDemosNewsfeedVideo_643ABFC6.png"&gt;&lt;img title="MODDemosNewsfeedVideo" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="MODDemosNewsfeedVideo" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/MODDemosNewsfeedVideo_thumb_3C94439C.png" width="451" height="414" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Clicking on one of the tags such as #CSAT will show you all of the posts that have used that particular hash tag.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/MODDemosNewsfeedHashtag_0DCE8AFA.png"&gt;&lt;img title="MODDemosNewsfeedHashtag" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="MODDemosNewsfeedHashtag" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/MODDemosNewsfeedHashtag_thumb_0238CDBB.png" width="462" height="355" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;There are good examples of the user being mentioned by other people as well.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/MODDemosNewsfeedMentions_21E7A783.png"&gt;&lt;img title="MODDemosNewsfeedMentions" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="MODDemosNewsfeedMentions" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/MODDemosNewsfeedMentions_thumb_1A5C3816.png" width="471" height="446" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Search demos extremely well with SharePoint Online because Office Web Apps is included and running.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/MODDemosSearchExample_67F86496.png"&gt;&lt;img title="MODDemosSearchExample" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="MODDemosSearchExample" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/MODDemosSearchExample_thumb_3932ABF4.png" width="749" height="538" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;When doing a demonstration, you can show the hover panel on search results with the preview of the document.&amp;#160; I especially like showing users how you can jump directly to a specific section of a document.&amp;#160; You’ll also notice how you can filter by Tags or Content Type.&lt;/p&gt;  &lt;p&gt;The MOD demos also provide a working eDiscovery center, but I don’t think there is a link to it so you’ll have to type the URL in yourself.&amp;#160; This is a great way to show examples of how SharePoint can place holds on SharePoint and Exchange content.&amp;#160; If you look at one of the open cases (i.e.: CT77A11), you can define a discovery set.&amp;#160; You’ll need to login as the admin account to do this.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/MODDemosNewDiscoverySet_2D9CEEB5.png"&gt;&lt;img title="MODDemosNewDiscoverySet" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="MODDemosNewDiscoverySet" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/MODDemosNewDiscoverySet_thumb_5156164F.png" width="625" height="431" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;If you look at the sources, you can see I have added a few Exchange mailboxes as well as a SharePoint site.&amp;#160; Clicking on the Preview Results button will show you content from both Exchange and SharePoint based on the filters you provided.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/MODDemosDiscoverySetPreviewResults_3F0D4F8D.png"&gt;&lt;img title="MODDemosDiscoverySetPreviewResults" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="MODDemosDiscoverySetPreviewResults" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/MODDemosDiscoverySetPreviewResults_thumb_7ED73612.png" width="536" height="458" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;Everything comes back in these results, so remember your mailbox can always be seen by someone. :)&lt;/p&gt;  &lt;p&gt;The BI Center is pretty slick as well.&amp;#160; Take a look at the Custom Satisfaction Dashboard.&amp;#160; This is a great example of combining graphs with Power View and adding a social aspect that people can comment on.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/MODDemosBICenter_7E6B031D.png"&gt;&lt;img title="MODDemosBICenter" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="MODDemosBICenter" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/MODDemosBICenter_thumb_6FC05738.png" width="729" height="457" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The last thing I will point out is the Knowledge Center.&amp;#160; Here is a great example of how they really changed the way content looks in SharePoint.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/MODDemosKnowledgeCenter_363D4741.png"&gt;&lt;img title="MODDemosKnowledgeCenter" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="MODDemosKnowledgeCenter" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/MODDemosKnowledgeCenter_thumb_6279CE25.png" width="727" height="510" /&gt;&lt;/a&gt;&lt;/p&gt;      &lt;p&gt;Of course, there is plenty of content out there for you to explore.&amp;#160; If you can’t sell someone on the value of SharePoint with these demos, you’re doing something wrong. :)&amp;#160; Get out there and try it out today (or tomorrow when it finishes provisioning).&amp;#160; Here’s the link again for you to get started.&lt;/p&gt;  &lt;p&gt;&lt;a href="https://www.microsoftofficedemos.com/"&gt;MicrosoftOfficeDemos.com&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.dotnetmafia.com/aggbug.aspx?PostID=6231" width="1" height="1"&gt;</description><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/SharePoint+Online/default.aspx">SharePoint Online</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/Office+365/default.aspx">Office 365</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/Office+365+Grid/default.aspx">Office 365 Grid</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/SharePoint+2013/default.aspx">SharePoint 2013</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/Office/default.aspx">Office</category></item><item><title>Workaround for freezes in Client Web Part Editor in Visual Studio 2012</title><link>http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2013/01/10/workaround-for-freezes-in-client-web-part-editor-in-visual-studio-2012.aspx</link><pubDate>Thu, 10 Jan 2013 15:55:36 GMT</pubDate><guid isPermaLink="false">ceb7fe2a-c56b-4d85-99e6-8dd548580538:6110</guid><dc:creator>CoreyRoth</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.dotnetmafia.com/blogs/dotnettipoftheday/rsscomments.aspx?PostID=6110</wfw:commentRss><comments>http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2013/01/10/workaround-for-freezes-in-client-web-part-editor-in-visual-studio-2012.aspx#comments</comments><description>&lt;p&gt;If you have tried to do any work with SharePoint 2013 Client Web Parts with the &lt;a href="http://msdn.microsoft.com/en-us/office/apps/fp123627.aspx"&gt;Office Developer Tools Preview 2&lt;/a&gt; in Visual Studio 2012, you know it’s an exercise in frustration.&amp;#160; It literally locks up every three or four lines of code you try to type.&amp;#160; When it does this, it will freeze for ten seconds or more.&amp;#160; This occurs when you are editing the page associated with the web part.&amp;#160; It’s a total productivity killer.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/VS12ClientWebPartFreeze_3A3497B5.png"&gt;&lt;img title="VS12ClientWebPartFreeze" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="VS12ClientWebPartFreeze" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/VS12ClientWebPartFreeze_thumb_48333B18.png" width="399" height="378" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;It finally bugged me enough that I started looking for a solution.&amp;#160; I was pretty close to switching to notepad.&amp;#160; Luckily, I found a quick work-around by launching a different text editor.&amp;#160; To launch another editor, right click on your web part page in the Solution Explorer and choose &lt;strong&gt;Open With…&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/VS12ClientWebPartOpenWith_7F994C46.png"&gt;&lt;img title="VS12ClientWebPartOpenWith" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="VS12ClientWebPartOpenWith" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/VS12ClientWebPartOpenWith_thumb_33614298.png" width="311" height="232" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Choose &lt;strong&gt;Source Code (Text) Editor&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/VS12OpenWithEditorList_393BE631.png"&gt;&lt;img title="VS12OpenWithEditorList" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="VS12OpenWithEditorList" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/VS12OpenWithEditorList_thumb_4A401414.png" width="365" height="240" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This editor is similar to the Web Form Editor but it won’t lock up.&amp;#160; You will lose IntelliSense and AutoComplete.&amp;#160; However, I’d gladly close my own div tag to not have the editor lock up every ten seconds.&amp;#160; The HTML is still color coded at least, but the JavaScript is not.&amp;#160; Your JavaScript should be in a separate file anyways though. :)&amp;#160; If you have been experiencing this issue, I hope this helps.&lt;/p&gt;&lt;img src="http://www.dotnetmafia.com/aggbug.aspx?PostID=6110" width="1" height="1"&gt;</description><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/Office+365/default.aspx">Office 365</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/Office+365+Grid/default.aspx">Office 365 Grid</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/Visual+Studio+11/default.aspx">Visual Studio 11</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/SharePoint+2013/default.aspx">SharePoint 2013</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/Apps/default.aspx">Apps</category></item><item><title>How to: Sort search results by query string with the ResultScriptWebPart in SharePoint 2013</title><link>http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2013/01/09/how-to-sort-search-results-by-query-string-with-the-resultscriptwebpart-in-sharepoint-2013.aspx</link><pubDate>Wed, 09 Jan 2013 20:21:09 GMT</pubDate><guid isPermaLink="false">ceb7fe2a-c56b-4d85-99e6-8dd548580538:6107</guid><dc:creator>CoreyRoth</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.dotnetmafia.com/blogs/dotnettipoftheday/rsscomments.aspx?PostID=6107</wfw:commentRss><comments>http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2013/01/09/how-to-sort-search-results-by-query-string-with-the-resultscriptwebpart-in-sharepoint-2013.aspx#comments</comments><description>&lt;p&gt;By now you may have noticed that Search has &lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2012/07/17/what-you-need-to-know-about-search-in-sharepoint-2013-preview.aspx"&gt;changed&lt;/a&gt; quite a bit in SharePoint 2013. The &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.office.server.search.webcontrols.resultscriptwebpart.aspx"&gt;ResultScriptWebPart&lt;/a&gt; powers most of the magic behind the Search Center.&amp;#160; It replaces the CoreResultsWebPart that we have been using since SharePoint 2007.&amp;#160; I expected many things in it to operate the same, but this web part really has been rewritten from the ground up and that’s a good thing.&amp;#160; One new feature (of many) it brings us is the ability to sort search results.&amp;#160; You can specify a sort order in the query or by enabling it in the web part properties.&amp;#160; This allows the user to pick from a list of properties.&amp;#160; I’ll cover it in the future because it deserves a quick post.&amp;#160; However, for you developers out there, I know that some of you will want to write some code that passes a sort order.&amp;#160; This post explains how to do it.&lt;/p&gt;  &lt;p&gt;Before we begin, you have to know what you can sort of.&amp;#160; There are a lot of options out-of-the-box such as &lt;em&gt;Author &lt;/em&gt;and &lt;em&gt;Write &lt;/em&gt;(Modified Date) or you can use your own property.&amp;#160; Whatever you choose, you need to check the managed properties page and make sure it has the Sortable option set to &lt;em&gt;Yes - active&lt;/em&gt;.&amp;#160; You do this from the Search Schema page on your site collection or Search Service Application.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SearchManagedPropertySortable_3D3865F7.png"&gt;&lt;img title="SearchManagedPropertySortable" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="SearchManagedPropertySortable" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SearchManagedPropertySortable_thumb_3CCC3302.png" width="414" height="91" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Since SharePoint 2007, we have been able to pass a query using &lt;a href="http://msdn.microsoft.com/en-us/library/ee558911.aspx"&gt;KQL&lt;/a&gt; using the “k” parameter to the results.aspx of your search center.&amp;#160; We can still do this in SharePoint 2013.&amp;#160; To add a sort order though, we do things a little differently.&amp;#160; Using a new query string parameter called &lt;em&gt;Default, &lt;/em&gt;we can pass in a number of properties including sort order.&amp;#160; The format is quite a bit different though as it uses a JSON notation.&amp;#160; To start, I am going to issue a query with out k parameter using this new JSON notation.&amp;#160; Let’s do a search for our sales documents.&amp;#160; To do this, I include my search center URL (&lt;em&gt;/search/pages/results.aspx&lt;/em&gt;) and append &lt;em&gt;#Default=&lt;/em&gt;&amp;#160; to it followed by the JSON object with a name value pair &lt;em&gt;{&amp;quot;k&amp;quot;:&amp;quot;Sales&amp;quot;}&lt;/em&gt;.&amp;#160; When I assemble to entire string, it looks something like this.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;http://server/search/Pages/results.aspx#Default={&amp;quot;k&amp;quot;:&amp;quot;Sales&amp;quot;}&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SearchResultsSales_3855B23B.png"&gt;&lt;img title="SearchResultsSales" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="SearchResultsSales" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SearchResultsSales_thumb_09FC2C8E.png" width="514" height="449" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now we want to add sorting.&amp;#160; To do that, we use the “o” parameter.&amp;#160; It takes a collection of JSON objects.&amp;#160; The parameter &lt;em&gt;p &lt;/em&gt;represents the managed property to sort by and the value &lt;em&gt;d &lt;/em&gt;is the sort direction specified as a 0 or 1.&amp;#160; A value of 0 represents ascending and a value of 1 represents descending.&amp;#160; For example to sort by modified date descending, we use the &lt;em&gt;Write&lt;/em&gt; managed property.&amp;#160; The string would look like this: &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&amp;quot;o&amp;quot;:[{&amp;quot;d&amp;quot;:1,&amp;quot;p&amp;quot;:&amp;quot;Write&amp;quot;}]&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;When we add it to our query string from above it looks like this.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;http://server/search/Pages/results.aspx#Default={&amp;quot;k&amp;quot;:&amp;quot;Sales&amp;quot;,&amp;quot;o&amp;quot;:[{&amp;quot;d&amp;quot;:1,&amp;quot;p&amp;quot;:&amp;quot;Write&amp;quot;}]}&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SearchResultsSalesWriteDescending_305E0FD9.png"&gt;&lt;img title="SearchResultsSalesWriteDescending" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="SearchResultsSalesWriteDescending" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SearchResultsSalesWriteDescending_thumb_2FF1DCE4.png" width="529" height="444" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This shows us the newest documents.&amp;#160; In SharePoint 2013, they moved the modified date to the InfoCard so you actually have to hover over a search result to see the date.&amp;#160; To show the oldest documents, you would just specify &lt;em&gt;d:&amp;#39;”0”&lt;/em&gt; instead.&amp;#160; &lt;/p&gt;  &lt;p&gt;As another example, we could also sort by &lt;em&gt;Author&lt;/em&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;http://server/search/Pages/results.aspx#Default={&amp;quot;k&amp;quot;:&amp;quot;Sales&amp;quot;,&amp;quot;o&amp;quot;:[{&amp;quot;d&amp;quot;:0,&amp;quot;p&amp;quot;:&amp;quot;Author&amp;quot;}]}&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SearchResultsSalesOrderByAuthorWithInfoCard_617D4A79.png"&gt;&lt;img title="SearchResultsSalesOrderByAuthorWithInfoCard" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="SearchResultsSalesOrderByAuthorWithInfoCard" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SearchResultsSalesOrderByAuthorWithInfoCard_thumb_6E772A8A.png" width="611" height="414" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I’ve included a bigger screenshot where you can see the name of the first author in the list on the InfoCard.&lt;/p&gt;    &lt;p&gt;We can also combine them to have multiple sort orders, but I have had mixed results with that so far.&amp;#160; Here’s what the query string would an example look like though.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;http://server/search/Pages/results.aspx#Default={&amp;quot;k&amp;quot;:&amp;quot;Sales&amp;quot;,&amp;quot;o&amp;quot;:[{&amp;quot;d&amp;quot;:0,&amp;quot;p&amp;quot;:&amp;quot;Write&amp;quot;},{&amp;quot;d&amp;quot;:1,&amp;quot;p&amp;quot;:&amp;quot;Author&amp;quot;}]}&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;I’m pretty excited about sorting functionality in the search center.&amp;#160; Users have been wanting it for quite a long time and only a select few ever had it (those with FAST Search for SharePoint).&amp;#160; If you are writing search solutions, be sure and check my post about &lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2013/01/03/how-to-sort-search-queries-in-sharepoint-2013.aspx"&gt;sorting with the REST API&lt;/a&gt;.&amp;#160; This technique works with both SharePoint 2013 on-premises as well as SharePoint Online Preview.&amp;#160; All of the screenshots came from Office 365.&lt;/p&gt;&lt;img src="http://www.dotnetmafia.com/aggbug.aspx?PostID=6107" width="1" height="1"&gt;</description><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/Enterprise+Search/default.aspx">Enterprise Search</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/Office+365/default.aspx">Office 365</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/Office+365+Grid/default.aspx">Office 365 Grid</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/SharePoint+2013/default.aspx">SharePoint 2013</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/Office+365+Preview/default.aspx">Office 365 Preview</category></item><item><title>List of common SharePoint 2013 Result Source IDs</title><link>http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2013/01/04/list-of-common-sharepoint-2013-result-source-ids.aspx</link><pubDate>Fri, 04 Jan 2013 16:08:06 GMT</pubDate><guid isPermaLink="false">ceb7fe2a-c56b-4d85-99e6-8dd548580538:6093</guid><dc:creator>CoreyRoth</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.dotnetmafia.com/blogs/dotnettipoftheday/rsscomments.aspx?PostID=6093</wfw:commentRss><comments>http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2013/01/04/list-of-common-sharepoint-2013-result-source-ids.aspx#comments</comments><description>&lt;p&gt;Although the new Result Source feature in SharePoint 2013 is really cool, writing queries against them is not.&amp;#160; With scopes you could specify them by name (i.e.: All Sites or People).&amp;#160; However with result sources, you must specify the id not the name.&amp;#160; This cane make it tricky to develop custom coded solutions.&amp;#160; Luckily, it turns out that the IDs of the built-in result sources are all the same (at least they appear to be) with the exception of the &lt;em&gt;Conversations &lt;/em&gt;result source.&amp;#160; In comparing an on-premises installation of SharePoint 2013 with a SharePoint Online Preview tenant, here is the list I came up with.&amp;#160; Hopefully, it will save you some time when you need to write a query.&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="2"&gt;     &lt;tr&gt;       &lt;td&gt;&lt;strong&gt;Result Source&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;ID&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Documents&lt;/td&gt;        &lt;td&gt;e7ec8cee-ded8-43c9-beb5-436b54b31e84&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Items matching a content type&lt;/td&gt;        &lt;td&gt;5dc9f503-801e-4ced-8a2c-5d1237132419&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Items matching a tag&lt;/td&gt;        &lt;td&gt;e1327b9c-2b8c-4b23-99c9-3730cb29c3f7&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Items related to current user&lt;/td&gt;        &lt;td&gt;48fec42e-4a92-48ce-8363-c2703a40e67d&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Items with same keyword as this item&lt;/td&gt;        &lt;td&gt;5c069288-1d17-454a-8ac6-9c642a065f48&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Local People Results&lt;/td&gt;        &lt;td&gt;b09a7990-05ea-4af9-81ef-edfab16c4e31&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Local Reports And Data Results&lt;/td&gt;        &lt;td&gt;203fba36-2763-4060-9931-911ac8c0583b&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Local SharePoint Results&lt;/td&gt;        &lt;td&gt;8413cd39-2156-4e00-b54d-11efd9abdb89&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Local Video Results&lt;/td&gt;        &lt;td&gt;78b793ce-7956-4669-aa3b-451fc5defebf&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Pages&lt;/td&gt;        &lt;td&gt;5e34578e-4d08-4edc-8bf3-002acf3cdbcc&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Pictures&lt;/td&gt;        &lt;td&gt;38403c8c-3975-41a8-826e-717f2d41568a&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Popular&lt;/td&gt;        &lt;td&gt;97c71db1-58ce-4891-8b64-585bc2326c12&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Recently changed items&lt;/td&gt;        &lt;td&gt;ba63bbae-fa9c-42c0-b027-9a878f16557c&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Recommended Items&lt;/td&gt;        &lt;td&gt;ec675252-14fa-4fbe-84dd-8d098ed74181&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Wiki&lt;/td&gt;        &lt;td&gt;9479bf85-e257-4318-b5a8-81a180f5faa1&lt;/td&gt;     &lt;/tr&gt;   &lt;/table&gt;  &lt;p&gt;Of course this doesn’t help you much for your own custom result sources, but at least you should be able to work with this list for anything built-in.&amp;#160; This is especially useful if you want to write queries to do people search or get popular items.&lt;/p&gt;&lt;img src="http://www.dotnetmafia.com/aggbug.aspx?PostID=6093" width="1" height="1"&gt;</description><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/Enterprise+Search/default.aspx">Enterprise Search</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/Office+365/default.aspx">Office 365</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/SharePoint+2013/default.aspx">SharePoint 2013</category></item><item><title>Seven reasons why I prefer developing SharePoint apps with SharePoint Online</title><link>http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2012/12/20/seven-reasons-why-i-prefer-developing-sharepoint-apps-with-sharepoint-online.aspx</link><pubDate>Thu, 20 Dec 2012 21:53:26 GMT</pubDate><guid isPermaLink="false">ceb7fe2a-c56b-4d85-99e6-8dd548580538:6070</guid><dc:creator>CoreyRoth</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.dotnetmafia.com/blogs/dotnettipoftheday/rsscomments.aspx?PostID=6070</wfw:commentRss><comments>http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2012/12/20/seven-reasons-why-i-prefer-developing-sharepoint-apps-with-sharepoint-online.aspx#comments</comments><description>&lt;p&gt;If you know me then you know I’ve been doing a lot of work with apps lately (SP2 – &lt;a href="http://office.microsoft.com/en-us/store/dashboard.aspx?AssetId=PN103633414"&gt;link&lt;/a&gt;, &lt;a href="http://twitter.com/SP2Apps"&gt;twitter&lt;/a&gt;).&amp;#160; I started developing primarily with an on-premises virtual machine running SharePoint 2013, but I have recently switched to using SharePoint Online (Office 365) more.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;strong&gt;Free Office 365 Developer Site – T&lt;/strong&gt;he first benefit is that you can sign up for a &lt;a href="http://msdn.microsoft.com/en-us/library/fp179924.aspx"&gt;free Office 365 Developer Site&lt;/a&gt;.&amp;#160; This is a great way to get your feet wet with SharePoint 2013 without having to worry about installation and configuration.&amp;#160; You can create a developer site collection and publish your apps here and get started very quickly.&amp;#160; Especially if you use the &lt;a href="http://office.microsoft.com/en-us/store/napa-office-365-development-tools-WA102963791.aspx?queryid=4f3b563a-909e-49b2-a25a-6d34c0868b7f&amp;amp;css=napa&amp;amp;CTT=1"&gt;“Napa” Office 365 Development Tools&lt;/a&gt;.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Less setup&lt;/strong&gt; – setting up SharePoint 2013 has a fair amount of complexity, but nothing that most of you can’t handle.&amp;#160; However, setting up apps is even harder as you have to set up a wildcard DNS entry to do it correctly.&amp;#160; Office 365 takes care of all of this for you.&amp;#160; Your subdomains are automatically provisioned for your apps, all you have to do is publish and you’re good to go.&amp;#160; If you plan on using provider hosted or auto-hosted apps, SharePoint Online is easier as well.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;You don’t have to set up Workflow&lt;/strong&gt; – Setting up workflow is hard.&amp;#160; I messed it up on my last attempt on my SharePoint 2013 virtual machine and I haven’t bothered to go back and fix it.&amp;#160; When I needed to build an app that used workflow, I started publishing to SharePoint Online.&amp;#160; It just works here and you don’t have to worry about installing Workflow manager and all of the related items.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Seller Dashboard team tests here&lt;/strong&gt; – I discovered this when one of my apps was failed a while back and the issue only occurred on my SharePoint Online tenant.&amp;#160; The nice thing about apps is that once everything is configured they work in both on-premises and in the cloud (depending on the type of course).&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;You don’t need SharePoint 2013 installed – &lt;/strong&gt;You can develop SharePoint apps without having SharePoint 2013 installed.&amp;#160; This means you can do the development directly from your host OS.&amp;#160; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Test Licensing App&lt;/strong&gt; – If you are doing license validation (and you should), the &lt;a href="http://blogs.msdn.com/b/officeapps/archive/2012/11/09/licensing-your-apps-for-sharepoint.aspx"&gt;Test Licensing App&lt;/a&gt; helps you test this much easier.&amp;#160; It allows you to generate a test license for free, paid, and trial apps.&amp;#160; I believe this app is self-hosted (or maybe auto-hosted) which means it is much easier to get running with SharePoint Online.&amp;#160; When you do install it, be sure and wait several minutes before trying it because it takes some time before it will work.&amp;#160; If you don’t use this app, you have to create XML files to represent the test license and install them with PowerShell.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Testing with latency&lt;/strong&gt; – some of your users are likely to use SharePoint Online.&amp;#160; When running in the cloud, things have more latency than on-premises as you know.&amp;#160; As a result, some JavaScript that you write may perform greatly on-premises but not so well in the cloud.&amp;#160; This is a great way to test for this and see if you need to make any adjustments or add caching.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;I have also found that publishing to SharePoint Online really doesn’t seem to take any more time that it does locally (most of the time).&amp;#160; The biggest drawback here is that you can’t debug workflows.&amp;#160; That may be a deal breaker at some point, but hasn’t been a problem for me yet.&amp;#160; You can debug your JavaScript using Visual Studio just fine though.&lt;/p&gt;  &lt;p&gt;Follow me on twitter: &lt;a href="http://twitter.com/coreyroth"&gt;@coreyroth&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://www.dotnetmafia.com/aggbug.aspx?PostID=6070" width="1" height="1"&gt;</description><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/SharePoint+Online/default.aspx">SharePoint Online</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/Office+365/default.aspx">Office 365</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/Office+365+Grid/default.aspx">Office 365 Grid</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/SharePoint+2013/default.aspx">SharePoint 2013</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/Apps/default.aspx">Apps</category></item><item><title>How to: Use PowerShell with SharePoint Online Preview</title><link>http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2012/11/29/how-to-use-powershell-with-sharepoint-online-preview.aspx</link><pubDate>Thu, 29 Nov 2012 13:59:00 GMT</pubDate><guid isPermaLink="false">ceb7fe2a-c56b-4d85-99e6-8dd548580538:6037</guid><dc:creator>CoreyRoth</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.dotnetmafia.com/blogs/dotnettipoftheday/rsscomments.aspx?PostID=6037</wfw:commentRss><comments>http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2012/11/29/how-to-use-powershell-with-sharepoint-online-preview.aspx#comments</comments><description>&lt;p&gt;I recently spoke about &lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2012/09/26/speaking-at-sharepoint-conference-2012.aspx"&gt;PowerShell&lt;/a&gt; at SharePoint Conference 2012 (&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2012/09/26/speaking-at-sharepoint-conference-2012.aspx"&gt;SPC195&lt;/a&gt;).&amp;#160; It turns out PowerShell support slipped into SharePoint Online Preview without a lot of people noticing.&amp;#160; In my session at SPC12, I walked users through a lot of common scenarios of using PowerShell with SPO that I wanted to share with you.&amp;#160; This post will show you how to get connected to your SharePoint Online tenant and how to do work with sites.&amp;#160; In a follow-up post, I’ll show you how to work with users and groups.&amp;#160; Keep in mind this only work with SharePoint Online Preview right now.&amp;#160; When your existing V14 tenants get upgraded to V15, you will be able to use it then.&lt;/p&gt;  &lt;p&gt;To get started, you need to install the &lt;a href="http://www.microsoft.com/en-us/download/details.aspx?id=35588"&gt;SharePoint Online Management Shell&lt;/a&gt;.&amp;#160; Since this is based on PowerShell 3.0, you need to have that installed.&amp;#160; If you have Windows 8 or you are running this on a machine with SharePoint 2013 already, you’re ready to go.&amp;#160; However, if you are running Windows 7, you’ll need to install &lt;a href="http://go.microsoft.com/fwlink/p/?LinkID=244693"&gt;Windows Management Framework 3.0&lt;/a&gt;.&amp;#160; After you have installed it, simply launch SharePoint Online Management Shell from the start menu.&amp;#160; You shouldn’t need to run it as Administrator.&lt;/p&gt;  &lt;h2&gt;&lt;/h2&gt;  &lt;h3&gt;Connecting to SharePoint Online&lt;/h3&gt;  &lt;p&gt;Before you connect to SharePoint Online, you’ll need to have the username and password for an account with global administrator permissions.&amp;#160; You’ll also need to know your tenant admin URL (i.e.: &lt;a href="https://mytenant-admin.sharepoint.com"&gt;https://mytenant-admin.sharepoint.com&lt;/a&gt;).&amp;#160;&amp;#160; When connecting to SharePoint Online, don’t forget to reference all URLs securely using https.&amp;#160; If you try and use http, you will get an error.&lt;/p&gt;  &lt;p&gt;To connect to SharePoint Online, use the &lt;strong&gt;Connect-SPOService&lt;/strong&gt; command.&amp;#160; It takes the URL to your tenant admin and a username.&amp;#160; When you connect, you’ll be prompted for your password.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;Connect-SPOService –Url https://mytenant-admin.sharepoint.com –Credential admin@mytenant.onmicrosoft.com&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPPowerShellConnectSPOServiceCredentials_5F237449.png"&gt;&lt;img title="SPOPPowerShellConnectSPOServiceCredentials" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="SPOPPowerShellConnectSPOServiceCredentials" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPPowerShellConnectSPOServiceCredentials_thumb_48812602.png" width="532" height="266" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;If you connect successfully, you will be returned to the command prompt without error.&amp;#160; To see what commands are available, we can use &lt;strong&gt;Get-Command&lt;/strong&gt; and pass it the module &lt;strong&gt;Microsoft.Online.SharePoint.PowerShell.dll&lt;/strong&gt;.&amp;#160; You can get the full list on &lt;a href="http://technet.microsoft.com/en-us/library/fp161364(v=office.15).aspx"&gt;TechNet&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;Get-Command –Module Microsoft.Online.SharePoint.PowerShell&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPPowerShellGetCommand_745179F1.png"&gt;&lt;img title="SPOPPowerShellGetCommand" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="SPOPPowerShellGetCommand" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPPowerShellGetCommand_thumb_44B35B65.png" width="531" height="366" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Getting Site Collections&lt;/h3&gt;  &lt;p&gt;To work with Site Collections, use &lt;strong&gt;Get-SPOSite&lt;/strong&gt; (&lt;a href="http://technet.microsoft.com/en-us/library/fp161380(v=office.15).aspx"&gt;TechNet&lt;/a&gt;).&amp;#160; It can return a single site with the &lt;em&gt;–Identity&lt;/em&gt; parameter or it can filter a list of them with the –&lt;em&gt;Filter&lt;/em&gt; parameter.&amp;#160; The Filter parameter does server side filtering and can be used with the case sensitive operators (-like, –notlike, –eq, and –ne).&amp;#160; You can also run it without any parameters to return all site collections.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;Get-SPOSite&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPowerShellGetSPOSite_227B4FDF.png"&gt;&lt;img title="SPOPowerShellGetSPOSite" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="SPOPowerShellGetSPOSite" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPowerShellGetSPOSite_thumb_2855F378.png" width="534" height="196" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This doesn’t return the data in the greatest format though.&amp;#160; It would be nice to see the full URL and when thinking about upgrades it would nice to see the &lt;em&gt;CompatibilityLevel &lt;/em&gt;(either 14 or 15).&amp;#160; We can do this by piping the output to Format-Table (ft) and specifying the desired fields.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;Get-SPOSite | ft Url, CompatibilityLevel&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPowerShellGetSPOSiteFT_1F85EB2C.png"&gt;&lt;img title="SPOPowerShellGetSPOSiteFT" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="SPOPowerShellGetSPOSiteFT" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPowerShellGetSPOSiteFT_thumb_39E5DE43.png" width="540" height="196" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;You’ll notice that the &lt;em&gt;CompatibilityLevel &lt;/em&gt;came back as 0 here.&amp;#160; This is because, Get-SPOSite uses CSOM under the hood and it does not request all values by default.&amp;#160; To get this data, you need to add the &lt;em&gt;–Detailed&lt;/em&gt; parameter.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;Get-SPOSite –Detailed | ft Url, CompatibilityLevel&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;      &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPowerShellGetSPOSiteDetailedFT_57E3EC37.png"&gt;&lt;img title="SPOPowerShellGetSPOSiteDetailedFT" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="SPOPowerShellGetSPOSiteDetailedFT" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPowerShellGetSPOSiteDetailedFT_thumb_687BE725.png" width="543" height="204" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The syntax of the server side filtering can be a bit tricky.&amp;#160; The key thing to remember is that the operators are case sensitive so they must be lower-case.&amp;#160; In the example, below I do a server-side filter looking for any site with the word “Contoso” in the URL.&amp;#160; Put the expression you are searching for in braces.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;Get-SPOSite –Filter {Url -like “*term*} | Ft Url&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPowerShellGetSPOSiteFiltered_749D614C.png"&gt;&lt;img title="SPOPowerShellGetSPOSiteFiltered" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="SPOPowerShellGetSPOSiteFiltered" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPowerShellGetSPOSiteFiltered_thumb_7763163F.png" width="542" height="123" /&gt;&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;One thing you may have noticed is that there are not any commands to create subsites.&amp;#160; Currently only site collections are supported.&lt;/p&gt;  &lt;h3&gt;Creating Site Collections&lt;/h3&gt;  &lt;p&gt;Site Collections can be created using the &lt;strong&gt;New-SPOSite &lt;/strong&gt;(&lt;a href="http://technet.microsoft.com/en-us/library/fp161370(v=office.15).aspx"&gt;TechNet&lt;/a&gt;) cmdlet.&amp;#160; This cmdlet takes a heap of parameters.&amp;#160; Note that you still have to use the preset managed paths available to you in SharePoint Online.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;-Url – full URL of the site collection (don’t forget to use https)&lt;/li&gt;    &lt;li&gt;-Owner – full user name of site owner (i.e.: admin@mytenant.onmicrosoft.com)&lt;/li&gt;    &lt;li&gt;-StorageQuota – in MB&lt;/li&gt;    &lt;li&gt;-ResourceQuota – number of resources to allocate&lt;/li&gt;    &lt;li&gt;-Template (Optional) – i.e.: STS#0 – Use &lt;strong&gt;Get-SPOWebTemplate&lt;/strong&gt; to view a list of available templates&lt;/li&gt;    &lt;li&gt;-Title (Optional) – name of site collection&lt;/li&gt;    &lt;li&gt;-NoWait – instructs PowerShell not to wait until the cmdlet is finished&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;New-SPOSite -Url &lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;&lt;a href="https://mytenant.sharepoint.com/sites/sitename"&gt;https://mytenant.sharepoint.com/sites/sitename&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt; -Owner &amp;quot;admin@mytenant.onmicrosoft.com&amp;quot; -StorageQuota &amp;quot;500&amp;quot; -NoWait -ResourceQuota &amp;quot;500&amp;quot; -Template &amp;quot;STS#0&amp;quot; -Title &amp;quot;Site Title&amp;quot;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPowerShellNewSite_3171E31F.png"&gt;&lt;img title="SPOPowerShellNewSite" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="SPOPowerShellNewSite" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPowerShellNewSite_thumb_470C1BBC.png" width="542" height="71" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;As mentioned above, you can run &lt;strong&gt;Get-SPOWebTemplate&lt;/strong&gt; to return a list of available site templates.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;Get-SPOWebTemplate&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPowerShellGetSPOWebTemplate_31AE6654.png"&gt;&lt;img title="SPOPowerShellGetSPOWebTemplate" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="SPOPowerShellGetSPOWebTemplate" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPowerShellGetSPOWebTemplate_thumb_44EF1CF3.png" width="547" height="257" /&gt;&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;h3&gt;Deleting Site Collections&lt;/h3&gt;  &lt;p&gt;To delete a site collection simply, use &lt;strong&gt;Remove-SPOSite &lt;/strong&gt;(&lt;a href="http://technet.microsoft.com/en-us/library/fp161377(v=office.15).aspx"&gt;TechNet&lt;/a&gt;) and pass it the URL in the Identity parameter.&amp;#160; It can also optionally take the –NoWait parameter was well.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;Remove-SPOSite –Identity https://mytenant.sharepoint.com/sites/sitename –NoWait&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPowerShellRemoveSPOSite_22B7116D.png"&gt;&lt;img title="SPOPowerShellRemoveSPOSite" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="SPOPowerShellRemoveSPOSite" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPowerShellRemoveSPOSite_thumb_4C4ADCA0.png" width="548" height="63" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Restoring Site Collections&lt;/h3&gt;  &lt;p&gt;Deleted site collections get moved to the site collection recycle bin.&amp;#160; To restore a site collection that you have deleted, use &lt;strong&gt;Restore-SPODeletedSite&lt;/strong&gt; (&lt;a href="http://technet.microsoft.com/en-us/library/fp161400(v=office.15).aspx"&gt;TechNet&lt;/a&gt;).&amp;#160; It takes the same parameters as Remove-SPOSite.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;Restore-SPODeletedSite –Identity https://mytenant.sharepoint.com/sites/sitename –NoWait&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPowerShellRestoreSPODeletedSite_2A7F040F.png"&gt;&lt;img title="SPOPowerShellRestoreSPODeletedSite" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="SPOPowerShellRestoreSPODeletedSite" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPowerShellRestoreSPODeletedSite_thumb_70238E2D.png" width="559" height="66" /&gt;&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;h3&gt;Upgrading Site Collections&lt;/h3&gt;  &lt;p&gt;SharePoint Online also has the concept of deferred site collection upgrades.&amp;#160; This means you can upgrade the site collections one-by-one or in batch using PowerShell.&amp;#160; To run the Site Collection health check first, use &lt;strong&gt;Test-SPOSite &lt;/strong&gt;(&lt;a href="http://technet.microsoft.com/en-us/library/fp161367.aspx"&gt;TechNet&lt;/a&gt;) and pass it the URL in the identity parameter.&amp;#160; Once you are ready to upgrade use &lt;strong&gt;Upgrade-SPOSite &lt;/strong&gt;(&lt;a href="http://technet.microsoft.com/en-us/library/fp161395(v=office.15).aspx"&gt;TechNet&lt;/a&gt;).&amp;#160; Be sure and pass the &lt;em&gt;–V2VUpgrade&lt;/em&gt; parameter or it won’t upgrade it.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;Test-SPOSite -Identity &lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;http://mytenant.sharepoint.com/sites/sitename&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;Upgrade-SPOSite -Identity http://mytenant.sharepoint.com/sites/sitename -V2VUpgrade&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Unfortunately, I don’t have a tenant that can be upgraded yet, so I can’t provide a screenshot of this procedure.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Hopefully, you found these PowerShell cmdlets useful.&amp;#160; I think they will help a lot when it comes to working with SharePoint Online.&amp;#160; In the next post, we’ll cover how to work with users and groups.&lt;/p&gt;&lt;img src="http://www.dotnetmafia.com/aggbug.aspx?PostID=6037" width="1" height="1"&gt;</description><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/PowerShell/default.aspx">PowerShell</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/SharePoint+Online/default.aspx">SharePoint Online</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/Office+365/default.aspx">Office 365</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/Office+365+Grid/default.aspx">Office 365 Grid</category></item><item><title>Licensing Changes for Extranets with SharePoint 2013 and SharePoint Online</title><link>http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2012/11/28/licensing-changes-for-extranets-with-sharepoint-2013-and-sharepoint-online.aspx</link><pubDate>Wed, 28 Nov 2012 19:40:07 GMT</pubDate><guid isPermaLink="false">ceb7fe2a-c56b-4d85-99e6-8dd548580538:6036</guid><dc:creator>CoreyRoth</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.dotnetmafia.com/blogs/dotnettipoftheday/rsscomments.aspx?PostID=6036</wfw:commentRss><comments>http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2012/11/28/licensing-changes-for-extranets-with-sharepoint-2013-and-sharepoint-online.aspx#comments</comments><description>&lt;p&gt;In the past, licensing for Extranets proved to be quite confusing.&amp;#160; Many people including myself weren’t always sure what to recommend.&amp;#160; I found this useful information in the slide deck for SPC181 and I thought it was worth sharing since I know not everyone got to attend SPC.&amp;#160; Ultimately in SharePoint 2010, you had two choices:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Purchase a SharePoint Server license plus one CAL for every user (whether internal or external)&lt;/li&gt;    &lt;li&gt;Purchase a SharePoint for Internet Sites license (FIS)&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;In SharePoint 2013, this has radically changed.&amp;#160; The FIS license is now gone and you just use a regular SharePoint Server license for Internet (or Extranet sites).&amp;#160; This simplifies things quite a bit.&amp;#160; For extranets, you still need a CAL for each internal user.&amp;#160; The good news is that Client Access Licenses (CALs) are not longer required for external users.&amp;#160; If you have an extranet on SharePoint today this might mean you can save some money.&amp;#160; Now what does external user mean?&amp;#160; Let me quote it exactly so that there is no confusion.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;External users means users that are not either your or your affiliates’ employees, or your or your affiliates’ onsite contractors or onsite agents.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;My interpretation of this now is that this basically refers to people outside of your company (but not your contractors).&amp;#160; This would be people like vendors and partners.&amp;#160; I guess technically, according to the statement, a contractor who never comes on-site is considered external.&amp;#160; This statement is a bit fuzzy, but I think the gray area is not as big as it was before.&lt;/p&gt;  &lt;p&gt;For those running your extranets in the &lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2011/10/05/using-sharepoint-online-office365-for-extranets.aspx"&gt;cloud&lt;/a&gt;, we also got quite a bit of good news here as well for Office 365 / SharePoint Online.&amp;#160; In the first release of SPO, external users were kind of in a gray area.&amp;#160; Basically, it stated that Microsoft will give you 50 external users for free but they reserve the right to charge you for any additional users you have in the future.&amp;#160; This has now been solidified.&amp;#160; If you are on a SharePoint Online P plan, you get 500 external users free.&amp;#160; For the E plans (or SharePoint Online Plan 1 and 2), you get up to 10,000 external users.&amp;#160; That should last most of you for a while which I think makes SharePoint Online a very viable Extranet solution.&amp;#160; &lt;/p&gt;  &lt;p&gt;I think these are some pretty exciting changes for Extranets for both on-premises and with Office 365.&amp;#160; What do you think?&lt;/p&gt;&lt;img src="http://www.dotnetmafia.com/aggbug.aspx?PostID=6036" width="1" height="1"&gt;</description><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/SharePoint+Online/default.aspx">SharePoint Online</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/Office+365/default.aspx">Office 365</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/Office+365+Grid/default.aspx">Office 365 Grid</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/Extranet/default.aspx">Extranet</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/SharePoint+2013/default.aspx">SharePoint 2013</category></item><item><title>Announcing SP2 Apps for SharePoint 2013</title><link>http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2012/11/12/announcing-sp2-apps-for-sharepoint-2013.aspx</link><pubDate>Mon, 12 Nov 2012 18:10:05 GMT</pubDate><guid isPermaLink="false">ceb7fe2a-c56b-4d85-99e6-8dd548580538:6014</guid><dc:creator>CoreyRoth</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.dotnetmafia.com/blogs/dotnettipoftheday/rsscomments.aspx?PostID=6014</wfw:commentRss><comments>http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2012/11/12/announcing-sp2-apps-for-sharepoint-2013.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SP2CheeseyLogo_6950090A.png"&gt;&lt;img title="SP2CheeseyLogo" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;float:left;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="SP2CheeseyLogo" align="left" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SP2CheeseyLogo_thumb_28ADBC9B.png" width="100" height="100" /&gt;&lt;/a&gt;When I first heard about an app store coming to SharePoint, I was excited.&amp;#160; I knew I wanted to be a part of it.&amp;#160; Today, I am excited to announce the release of three new apps for SharePoint 2013.&amp;#160; SP2 apps seek to help increase user adoption by providing engaging functionality to your users.&amp;#160; I have developed a useful free app that will help you test your list queries from Apps.&amp;#160; I’m also proud to say I have the first paid app offering in the &lt;a href="http://office.microsoft.com/en-us/store/dashboard.aspx?AssetId=PN103633414"&gt;Office Store&lt;/a&gt;, but there are more to come from developers all over the world.&amp;#160;&amp;#160; Apps are a great new way to deploy a ton of functionality in SharePoint and I encourage you to taking a look at the sessions on building apps this week while at SPC.&lt;/p&gt;  &lt;h3&gt;&amp;#160;&lt;/h3&gt;  &lt;h3&gt;SP2 CAML Query Tester&lt;/h3&gt;  &lt;p&gt;I want to tell you about my free app, &lt;a href="http://office.microsoft.com/en-us/store/sp2-caml-query-tester-WA103746584.aspx"&gt;SP2 CAML Query Tester&lt;/a&gt; first.&amp;#160; I built this app while in the process of building one of my other apps for the purpose of debugging CAML queries.&amp;#160; If you have ever messed with CAML, you know it can be picky and the syntax is brutal.&amp;#160; While I was developing the app, every time I wanted to try a new query, I had to stop debugging, change the query, and redeploy the app.&amp;#160; That process takes over a minute or more.&amp;#160; So I thought, what if I just made an app that could do this for me and I could type whatever query I wanted to test right in a textbox.&amp;#160; Then SP2 CAML Query Tester was born.&amp;#160; The app is simple.&amp;#160; You can run it as an app by clicking on the link after you install it or you can add the app to an existing host web site and then use the App Part to test queries against lists on that site.&amp;#160; If you’re interested in developing apps, this utility will definitely help.&amp;#160; I’ll be adding functionality to it from time to time, so if you see bugs or have feature requests, let me know.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SP2CAMLQueryTesterClientWebPart_55C2A969.png"&gt;&lt;img title="SP2CAMLQueryTesterClientWebPart" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="SP2CAMLQueryTesterClientWebPart" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SP2CAMLQueryTesterClientWebPart_thumb_1F71815A.png" width="525" height="395" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;h3&gt;SP2 Feedback&lt;/h3&gt;  &lt;p&gt;The premise behind this web part is simple.&amp;#160; I wanted to provide a way for users to be able to provide feedback on a given page or site.&amp;#160; This allows you to collect feedback from users quickly.&amp;#160; This allows you to correct issues on your site that otherwise you might not know about.&amp;#160; The end user simply fills out their comment in a text box and it the information gets saved to a list for you to review.&amp;#160; It captures the URL of the current page they are on automatically.&amp;#160; All text in the web part is configurable so you can localize it.&amp;#160; Plus the form is collapsible so it takes up less screen real estate if desired.&amp;#160; The web part lets yours users feel engaged.&amp;#160; If users feel they can contribute to the site and that they can make a difference, it leads to better adoption.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SP2.Feedback.WebPartOnly_11BEC552.png"&gt;&lt;img title="SP2.Feedback.WebPartOnly" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="SP2.Feedback.WebPartOnly" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SP2.Feedback.WebPartOnly_thumb_54BA93BF.png" width="244" height="138" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;SP2 is available in the &lt;a href="http://office.microsoft.com/en-us/store/sp2-feedback-WA103633424.aspx?redir=0"&gt;Office Store&lt;/a&gt; for $19.99 per user or $199.90 for a site license.&amp;#160; A single user license is a great way to try it out and see if the app works for you.&lt;/p&gt;  &lt;h3&gt;SP2 Daily Menu&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SP2.ForkAndKnife.Icon96x96_61B473D0.png"&gt;&lt;img title="SP2.ForkAndKnife.Icon96x96" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;float:left;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="SP2.ForkAndKnife.Icon96x96" align="left" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SP2.ForkAndKnife.Icon96x96_thumb_21122761.png" width="96" height="96" /&gt;&lt;/a&gt; In my experience building Intranets, I have seen a lot of companies invest time in updating the menu of their corporate cafeteria using SharePoint.&amp;#160; It seems simple, but it is a huge driver of adoption.&amp;#160; Users get hungry.&amp;#160; They want to know what is to eat. They go to the Intranet site to see the menu.&amp;#160; Then while they are there, they click on a few news articles or respond to some discussion boards.&amp;#160; It’s simple, cost effective way to drive adoption and you would be surprised how well it works.&amp;#160; &lt;/p&gt;  &lt;p&gt;The app is driven by a custom calendar.&amp;#160; The owner of the app just edits the calendar and specifies breakfast, lunch, dinner, snack, and a description.&amp;#160; All fields are optional and you can choose to display only the ones desired.&amp;#160; All of the text is configurable as well so you can localize it if desired.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SP2DailyMenuDefault_6E4220EC.png"&gt;&lt;img title="SP2DailyMenuDefault" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="SP2DailyMenuDefault" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SP2DailyMenuDefault_thumb_664A7E8A.png" width="481" height="362" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;SP2 is approved but not yet in the &lt;a href="http://office.microsoft.com/en-us/store/dashboard.aspx?AssetId=PN103633414"&gt;Office Store&lt;/a&gt;.&amp;#160; Pricing will be announced when it is available but is comparable in pricing to SP2 Feedback.&lt;/p&gt;  &lt;h3&gt;SP2Apps.com&lt;/h3&gt;  &lt;p&gt;If I am going to offer apps, I need a site to go with it.&amp;#160; More information about my apps can be found at &lt;a href="http://www.sp2apps.com/Pages/default.aspx"&gt;sp2apps.com&lt;/a&gt; powered by Office 365 and SharePoint Online.&amp;#160; This site will have the latest information on my apps and serve as a support portal.&lt;/p&gt;  &lt;p&gt;You can also follow &lt;a href="http://twitter.com/sp2apps"&gt;@sp2apps&lt;/a&gt; on twitter.&lt;/p&gt;&lt;img src="http://www.dotnetmafia.com/aggbug.aspx?PostID=6014" width="1" height="1"&gt;</description><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/SharePoint+Online/default.aspx">SharePoint Online</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/Office+365/default.aspx">Office 365</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/SharePoint+2013/default.aspx">SharePoint 2013</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/Apps/default.aspx">Apps</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/SPC12/default.aspx">SPC12</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/SP2/default.aspx">SP2</category></item></channel></rss>