<?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] : SharePoint, Office 365 Grid</title><link>http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/SharePoint/Office+365+Grid/default.aspx</link><description>Tags: SharePoint, Office 365 Grid</description><dc:language>en</dc:language><generator>CommunityServer 2007.1 (Build: 20917.1142)</generator><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>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>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>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>How to: Build a SharePoint-hosted Client Web Part in SharePoint 2013</title><link>http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2012/08/01/how-to-build-a-sharepoint-hosted-client-web-part-in-sharepoint-2013.aspx</link><pubDate>Thu, 02 Aug 2012 01:33:49 GMT</pubDate><guid isPermaLink="false">ceb7fe2a-c56b-4d85-99e6-8dd548580538:5812</guid><dc:creator>CoreyRoth</dc:creator><slash:comments>26</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.dotnetmafia.com/blogs/dotnettipoftheday/rsscomments.aspx?PostID=5812</wfw:commentRss><comments>http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2012/08/01/how-to-build-a-sharepoint-hosted-client-web-part-in-sharepoint-2013.aspx#comments</comments><description>&lt;p&gt;&lt;em&gt;NOTE: This post is build with Visual Studio 2012 RC and Preview 1 of the Office Developer Tools.&amp;#160; See this &lt;/em&gt;&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;&lt;em&gt;post&lt;/em&gt;&lt;/a&gt;&lt;em&gt; for an update with Preview 2 of the Office Developer Tools and the RTM version of SharePoint 2013.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;I am extremely interested in the new SharePoint 2013 App model so I have been doing a lot with them lately.&amp;#160; The latest thing I was trying was building a SharePoint-hosted Client Web Part.&amp;#160; I have found that there is not a lot of information out there yet on how to use these so I wanted to share some of the things I ran into.&amp;#160; This &lt;a href="http://msdn.microsoft.com/en-us/library/fp142379(v=office.15)"&gt;post&lt;/a&gt; on MSDN is good to help you get started with the setup of your app.&amp;#160; Hopefully this info will help you get started.&amp;#160; This post assumes you have installed Visual Studio 2012 RC as well as the SharePoint development tools.&lt;/p&gt;  &lt;p&gt;After you open Visual Studio 2012 RC, create a new SharePoint app by choosing Office / SharePoint –&amp;gt; Apps –&amp;gt; App for SharePoint 2013.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/VS12RCNewSharePointApp_3043355C.png"&gt;&lt;img title="VS12RCNewSharePointApp" 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="VS12RCNewSharePointApp" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/VS12RCNewSharePointApp_thumb_39BBF3D2.png" width="644" height="444" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;You’ll then be prompted for the type of app as well as a name and deployment location.&amp;#160; For the deployment location, you need to specify the URL to a site created with the &lt;em&gt;Development Site &lt;/em&gt;template.&amp;#160; I created a new site collection for this.&amp;#160; I am not sure if it is required or not but I am fairly certain it is.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/VS12RCNewAppSettings_1E36F1CF.png"&gt;&lt;img title="VS12RCNewAppSettings" 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="VS12RCNewAppSettings" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/VS12RCNewAppSettings_thumb_038A55B6.png" width="591" height="469" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;At this point, you’ll have a new SharePoint-hosted App project.&amp;#160; Now, we just need to add the pieces that we need.&amp;#160; However, first you need to understand a little bit about the ClientWebPart.&amp;#160; This new type of web part is essentially two pieces: an elements.xml file and an .aspx page.&amp;#160; The elements.xml file performs many of the same functions as a .webpart file, but it has different parameters.&amp;#160; It’s main purpose is to specify the path to a .aspx page which it then loads in an IFRAME.&amp;#160; Since it is an IFRAME, this page can actually be hosted anywhere: locally, on a remote web server, or in Azure.&amp;#160; However, hosting it locally inside SharePoint is by far the simplest.&lt;/p&gt;  &lt;p&gt;We’ll create the Client Web Part using the New Item menu:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/VS12RCClientWebPartSPI_2FC6DC9A.png"&gt;&lt;img title="VS12RCClientWebPartSPI" 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="VS12RCClientWebPartSPI" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/VS12RCClientWebPartSPI_thumb_58EE74D8.png" width="600" height="416" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;When the Client Web Part is created, you’ll get an XML file that looks like this.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/ClientWebPartNewXml_17078F8A.png"&gt;&lt;img title="ClientWebPartNewXml" 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="ClientWebPartNewXml" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/ClientWebPartNewXml_thumb_2AB4791E.png" width="523" height="305" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;You can update the Client Web Part title, description, and size here.&amp;#160; Note, that end users can’t change the size of the Client Web part once it’s deployed so set the value correctly here.&amp;#160; Note the &lt;em&gt;Content&lt;/em&gt; element. We need to update this value to the location of the associated page we are about to create. We need to specify the URL to the page associated with our ClientWebPart.&amp;#160; To do this we make use of the &lt;em&gt;~appWebUrl &lt;/em&gt;token and then just specify the relative path &lt;em&gt;Pages/HelloWorldClientWebPart.aspx&lt;/em&gt;.&amp;#160; Here is what the entire XML looks like.&lt;/p&gt;  &lt;p&gt;&lt;span style="color:blue;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#a31515;"&gt;xml&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;version&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;1.0&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;encoding&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;utf-8&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;?&amp;gt;&lt;/span&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:#a31515;"&gt;Elements&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;http://schemas.microsoft.com/sharepoint/&lt;/span&gt;&amp;quot;&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;#160; &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ClientWebPart&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;Name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;HelloWorldClientWebPart&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;Title&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;HelloWorldClientWebPart&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;Description&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;This is my awesome HelloWorldClientWebPart.&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;DefaultWidth&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;300&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;DefaultHeight&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;200&lt;/span&gt;&amp;quot;&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;#160;&amp;#160;&amp;#160; &amp;lt;!--&lt;/span&gt;&lt;span style="color:green;"&gt; Content element identifies the location of the page that will render inside the client web part&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:green;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Properties are referenced on the query string using the pattern _propertyName_&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:green;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Example: Src=&amp;quot;~appWebUrl/Pages/ClientWebPart1.aspx?Property1=_property1_&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;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Content&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;Type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;html&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;Src&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;~appWebUrl/Pages/HelloWorldClientWebPart.aspx&lt;/span&gt;&amp;quot;&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;#160;&amp;#160;&amp;#160; &amp;lt;!--&lt;/span&gt;&lt;span style="color:green;"&gt; Define properties in the Properties element&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:green;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Remember to put Property Name on the Src attribute of the Content element above&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:green;"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Properties&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:green;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Property Name=&amp;quot;property1&amp;quot; Type=&amp;quot;string&amp;quot; WebBrowsable=&amp;quot;true&amp;quot; WebDisplayName=&amp;quot;First Property&amp;quot; WebDescription=&amp;quot;Description 1&amp;quot; WebCategory=&amp;quot;Custom Properties&amp;quot; DefaultValue=&amp;quot;String Property&amp;quot; RequiresDesignerPermission=&amp;quot;true&amp;quot; /&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span style="color:green;"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/Properties&amp;gt;&amp;#160;&amp;#160; &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;#160; &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ClientWebPart&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:#a31515;"&gt;Elements&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;/div&gt; You can pass properties from the the user enters from ClientWebPart itself to the page here, but we’ll cover that in another post.   &lt;p&gt;Now, we need to create the page that will be loaded in the IFRAME by the Client Web Part.&amp;#160; For simplicity, I go with the same name as the Client Web part.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/VS12RCPageSPI_21E470D2.png"&gt;&lt;img title="VS12RCPageSPI" 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="VS12RCPageSPI" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/VS12RCPageSPI_thumb_2033A4FE.png" width="591" height="410" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The default page looks like this.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/ClientWebPartPageDefault_17639CB2.png"&gt;&lt;img title="ClientWebPartPageDefault" 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="ClientWebPartPageDefault" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/ClientWebPartPageDefault_thumb_161F03D3.png" width="512" height="188" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;It’s this part where I couldn’t find any details on how to proceed.&amp;#160; You might be wondering if you need to do something to this page before it will work in a Client Web Part.&amp;#160; The answer is “yes”.&amp;#160; If you do try to deploy it as is, you’ll get the following error when trying to use the Client Web Part.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;This content cannot be displayed in a frame.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/ClientWebPartNoFramingError_68BD6E02.png"&gt;&lt;img title="ClientWebPartNoFramingError" 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="ClientWebPartNoFramingError" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/ClientWebPartNoFramingError_thumb_72A25F6D.png" width="244" height="184" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Luckily, Saurabh Bhatia came through for me in the &lt;a href="http://social.msdn.microsoft.com/Forums/en-US/appsforsharepoint/thread/abb96582-e5b1-4fbd-9e63-2ffc01780835"&gt;forums&lt;/a&gt; and helped me out.&amp;#160; You need to include the &lt;em&gt;AllowFraming&lt;/em&gt; tag in your page to allow it to render in an IFRAME.&amp;#160; Everything else in the page needs to go with the exception of the reference to the &lt;em&gt;WebPartPages &lt;/em&gt;tag.&amp;#160; If you leave references to the master page or content place holders, you’ll receive a heap of JavaScript errors.&amp;#160; Here’s what my complete page 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="background:yellow;"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color:blue;"&gt;@&lt;/span&gt; &lt;span style="color:maroon;"&gt;Register&lt;/span&gt; &lt;span style="color:red;"&gt;Tagprefix&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;WebPartPages&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;Namespace&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Microsoft.SharePoint.WebPartPages&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;Assembly&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c&amp;quot;&lt;/span&gt; &lt;span style="background:yellow;"&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;WebPartPages&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;AllowFraming&lt;/span&gt; &lt;span style="color:red;"&gt;ID&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;AllowFraming1&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;runat&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;server&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;Hello World Client Web Part!&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;At this point, we are ready to deploy.&amp;#160; You can do so by pressing F5 or choosing Build –&amp;gt; Deploy.&amp;#160; This will package your app and after a moment, you’ll see your app listed.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/DeveloperSiteApps_6A3E8A16.png"&gt;&lt;img title="DeveloperSiteApps" 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="DeveloperSiteApps" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/DeveloperSiteApps_thumb_3DB55A30.png" width="478" height="273" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This is a Client Web Part so you don’t need to click on your App here.&amp;#160; Instead, go to the Home Page and then edit it.&amp;#160; Pick a place on the page and then click on &lt;em&gt;Insert&lt;/em&gt; in the ribbon.&amp;#160; You’ll notice this looks a bit different, choose &lt;em&gt;App Part&lt;/em&gt; and you’ll see your new Client Web Part listed.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/PageInsertAppPart_751B6B5E.png"&gt;&lt;img title="PageInsertAppPart" 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="PageInsertAppPart" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/PageInsertAppPart_thumb_1385AC48.png" width="486" height="261" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;You might be wondering what the difference between this and Web Parts are.&amp;#160; Not much really.&amp;#160; If you click Web Part and then choose Apps and you’ll see the same list.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/PageInserWebPartApps_0AB5A3FC.png"&gt;&lt;img title="PageInserWebPartApps" 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="PageInserWebPartApps" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/PageInserWebPartApps_thumb_102414A0.png" width="320" height="287" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;If all goes well, your Client Web Part should now be visible on the page.&amp;#160; You may be prompted for authentication again when it loads.&amp;#160; You can adjust your browser security settings to avoid this.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/ClientWebPartOnPage_5C7BA841.png"&gt;&lt;img title="ClientWebPartOnPage" 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="ClientWebPartOnPage" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/ClientWebPartOnPage_thumb_144DEC65.png" width="321" height="339" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;At this point, you have a working Client Web Part.&amp;#160; You can then make use of the Client Object Model or the new REST API to interact with SharePoint.&amp;#160; I hope this helps you get started with building some apps.&amp;#160; Try it out and see what you can do.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;UPDATE: To use the JavaScript Client Object Model with an App Part, see this &lt;/em&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2012/10/19/how-to-use-the-sharepoint-2013-client-object-model-sp-js-from-a-client-web-part.aspx"&gt;&lt;em&gt;post&lt;/em&gt;&lt;/a&gt;&lt;em&gt;.&lt;/em&gt;&lt;/p&gt;&lt;img src="http://www.dotnetmafia.com/aggbug.aspx?PostID=5812" 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/Office+365+Preview/default.aspx">Office 365 Preview</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/SharePoint+2013+Preview/default.aspx">SharePoint 2013 Preview</category><category domain="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/tags/Apps/default.aspx">Apps</category></item><item><title>Slides and Video from my Lync and Learn Session on SharePoint Online Development</title><link>http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2012/07/30/slides-and-video-from-my-lync-and-learn-session-on-sharepoint-online-development.aspx</link><pubDate>Mon, 30 Jul 2012 20:36:15 GMT</pubDate><guid isPermaLink="false">ceb7fe2a-c56b-4d85-99e6-8dd548580538:5807</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=5807</wfw:commentRss><comments>http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2012/07/30/slides-and-video-from-my-lync-and-learn-session-on-sharepoint-online-development.aspx#comments</comments><description>&lt;p&gt;Thanks to everyone who attended my Office 365 Lync and Learn session last week.&amp;#160; I enjoyed the opportunity to show everyone how they can use Visual Studio 2012 RC to get started with SharePoint Online development.&amp;#160; I’ve attached a link to my slides as well as the video on YouTube.&amp;#160; Also special thanks to Josh Topal for setting it all up and getting people to attend.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.slideshare.net/CoreyRoth/office-365-introduction-to-sharepoint-online-development-lync-and-learn"&gt;Slides&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=JLe1GPDbEPE&amp;amp;feature=player_embedded"&gt;Video&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://community.office365.com/en-us/blogs/office_365_technical_blog/archive/2012/07/19/introduction-to-sharepoint-online-development-lync-and-learn-session.aspx"&gt;Office 365 Grid Blog Post&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I’ve already had a few people reach out for questions.&amp;#160; If you have any others, feel free to contact me.&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=5807" 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+2010/default.aspx">SharePoint 2010</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></item><item><title>How to: Take your SharePoint Online Preview Public Web Site Online</title><link>http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2012/07/18/how-to-take-your-sharepoint-online-preview-public-web-site-online.aspx</link><pubDate>Wed, 18 Jul 2012 22:32:23 GMT</pubDate><guid isPermaLink="false">ceb7fe2a-c56b-4d85-99e6-8dd548580538:5775</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=5775</wfw:commentRss><comments>http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2012/07/18/how-to-take-your-sharepoint-online-preview-public-web-site-online.aspx#comments</comments><description>&lt;p&gt;Maybe, this was more obvious to other people but it took me a while to figure out.&amp;#160; When you first provision your Office 365 Preview Enterprise account, a public site collection is created.&amp;#160; It took me a while to find it at first because I was used to finding my public site collection at &lt;a href="http://&amp;lt;name&amp;gt;-web.sharepoint.com"&gt;-web.sharepoint.com&amp;quot;&amp;gt;http://&amp;lt;name&amp;gt;-web.sharepoint.com&lt;/a&gt;.&amp;#160; However, that didn’t work.&amp;#160; I went back to the site collections page and noticed that the public site collection is now at &lt;a href="http://&amp;lt;name&amp;gt;-public.sharepoint.com"&gt;-public.sharepoint.com&amp;quot;&amp;gt;http://&amp;lt;name&amp;gt;-public.sharepoint.com&lt;/a&gt;.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPreviewSiteCollectionAdmin_0167543B.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="SPOPreviewSiteCollectionAdmin" border="0" alt="SPOPreviewSiteCollectionAdmin" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPreviewSiteCollectionAdmin_thumb_096B086B.png" width="725" height="319" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I tried that URL by clicking on it through the Site Collections page using http as opposed to https and what did I get?&lt;/p&gt;   &lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPPublicSiteCollection403Error_7816DF2D.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="SPOPPublicSiteCollection403Error" border="0" alt="SPOPPublicSiteCollection403Error" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPPublicSiteCollection403Error_thumb_7E8A1323.png" width="477" height="152" /&gt;&lt;/a&gt;    &lt;p&gt;Now, I thought that was odd because I don’t remember things working that way.&amp;#160; I finally posted something and got a response from Microsoft.&amp;#160; The public web site collection run in offline mode by default and you must take it online for it to work.&amp;#160; To do that you must visit your URL using https as in &lt;a href="https://&amp;lt;name&amp;gt;-public.sharepoint.com"&gt;-public.sharepoint.com&amp;quot;&amp;gt;https://&amp;lt;name&amp;gt;-public.sharepoint.com&lt;/a&gt;.&amp;#160; Once, you do that, you will be prompted for authentication and you still see the starter site that looks like this.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPPublicWebSiteNotPublished_349B65A6.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="SPOPPublicWebSiteNotPublished" border="0" alt="SPOPPublicWebSiteNotPublished" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPPublicWebSiteNotPublished_thumb_54EA0BF3.png" width="625" height="320" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;You’ll notice in the top there is a link that says WEBSITE OFFLINE.&amp;#160; Click on that and it will tell you about taking your site online.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPPublicWebSiteTakeOnline_5E5DF4C3.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="SPOPPublicWebSiteTakeOnline" border="0" alt="SPOPPublicWebSiteTakeOnline" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPPublicWebSiteTakeOnline_thumb_4C0D0603.png" width="441" height="233" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;When you click MAKE WEBSITE ONLINE, your site will get a confirmation screen.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPPublicWebSiteTakeOnlineConfirmation_21712526.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="SPOPPublicWebSiteTakeOnlineConfirmation" border="0" alt="SPOPPublicWebSiteTakeOnlineConfirmation" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPPublicWebSiteTakeOnlineConfirmation_thumb_0C136FBE.png" width="445" height="186" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Click &lt;em&gt;Make online&lt;/em&gt; and your site will be exposed via http and anonymous users will be able to access the site.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPPublicWebSitePublished_079CEEF7.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="SPOPPublicWebSitePublished" border="0" alt="SPOPPublicWebSitePublished" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPPublicWebSitePublished_thumb_2FEC214B.png" width="595" height="371" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Note, the new Blog link.&amp;#160; People have been wanting that feature for a while with SPO sites.&amp;#160; I think we’ll see a lot of blog sites moving to SPO now.&amp;#160; You’ll also notice a search box right in the master page.&amp;#160; No longer do you need to use &lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2011/07/21/office-365-how-to-add-search-to-your-public-facing-web-site-with-sharepoint-online.aspx"&gt;hacks&lt;/a&gt; to get it to work.&amp;#160; If you can’t figure out how to get your public web site going with SharePoint Online Preview, hopefully these steps have helped.&lt;/p&gt;&lt;img src="http://www.dotnetmafia.com/aggbug.aspx?PostID=5775" 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+365+Preview/default.aspx">Office 365 Preview</category></item><item><title>Search is Everywhere! What you need to know about Search in SharePoint 2013 Preview</title><link>http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2012/07/17/what-you-need-to-know-about-search-in-sharepoint-2013-preview.aspx</link><pubDate>Wed, 18 Jul 2012 02:37:45 GMT</pubDate><guid isPermaLink="false">ceb7fe2a-c56b-4d85-99e6-8dd548580538:5772</guid><dc:creator>CoreyRoth</dc:creator><slash:comments>26</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.dotnetmafia.com/blogs/dotnettipoftheday/rsscomments.aspx?PostID=5772</wfw:commentRss><comments>http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2012/07/17/what-you-need-to-know-about-search-in-sharepoint-2013-preview.aspx#comments</comments><description>&lt;p&gt;As I start writing this post, I know this is going to be one of those posts that covers so much that it is going to hard to cover it all.&amp;#160; The point of this post is to give you a high level idea of everything new and changed in Search with SharePoint 2013 Preview.&amp;#160; Search is everywhere in SharePoint now so it is important to understand how it has changed.&amp;#160; For example, take a look at this document library utilizing the power of Search.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPDocumentLibrarySearch_18627478.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="SPOPDocumentLibrarySearch" border="0" alt="SPOPDocumentLibrarySearch" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPDocumentLibrarySearch_thumb_07766A31.png" width="504" height="312" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Aside from cool stuff like &lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2012/07/16/how-to-drag-and-drop-files-into-sharepoint-2013-document-libraries.aspx"&gt;drag and drop&lt;/a&gt;, document libraries directly leverage the search engine to allow users to filter documents easily.&amp;#160; Gone are the days of relying on CAML for simple document library searches.&amp;#160; You’ll find out why later in this post on why you can rely on search for those uses as well.&lt;/p&gt;  &lt;p&gt;In SharePoint 2013 Preview, Search was essentially rewritten from the ground up.&amp;#160; You’ll see familiar concepts like managed properties as well as how FAST Search for SharePoint morphed into this new product.&amp;#160; The concept of FAST Search for SharePoint servers is gone.&amp;#160; The components from FS4SP have made their way directly into SharePoint and we don’t need separate dedicated servers for it (necessarily).&amp;#160; If you’re familiar with FAST ESP, you will see some familiar components from there too.&amp;#160; Don’t worry, we aren’t starting over from scratch, but you will see some exciting new things that make search such a powerful feature of SharePoint. &lt;/p&gt;  &lt;p&gt;Today’s post will provide a high level of many of the new concepts in search. It will serve as a springboard for a series of detailed articles about the individual components of Search that I will post in the coming weeks.&amp;#160; We’ll cover Search in the following areas: topology, crawling, querying, user interface, API, and SharePoint Online.&amp;#160; &lt;/p&gt;  &lt;h2&gt;Topology&lt;/h2&gt;  &lt;p&gt;The underlying search topology has changed quite a bit.&amp;#160; However, most of it is based upon concepts you may have seen before from FAST Search for SharePoint.&amp;#160; Components can be scaled out to multiple servers as needed.&amp;#160; These changes can be done through the Search Service Application or through &lt;a href="http://technet.microsoft.com/en-us/library/jj219705(v=office.15)"&gt;PowerShell&lt;/a&gt;.&amp;#160; When making changes to the topology, you don’t change the active topology, you clone the original, make changes, and then change the active topology.&amp;#160; This section is pretty technical so feel free to skip it if you are only interested in the cool stuff like querying and the user interface. :)&lt;/p&gt;  &lt;h3&gt;Components&lt;/h3&gt;  &lt;p&gt;The first thing to cover is how the topology changed.&amp;#160; Many components got new (but similar) names and they correspond to FAST Search for SharePoint components.&amp;#160; The Search components are hosted on your SharePoint application servers using a Search Service Application.&amp;#160; Components can be scaled to multiple servers for performance and redundancy.&amp;#160; The components that make up search are:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Crawl Component&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The crawl component crawls the actual data from a variety of sources such as SharePoint, File Shares, User Profiles, and Databases using BCS.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Content Processing Component&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This component processes crawled items and feeds them to the index component.&amp;#160; This is where document parsing occurs as well as IFilters exist.&amp;#160; A generic IFIilter will cover most of your needs.&amp;#160; It also is responsible for language detection and entity extraction (both of which are features from FS4SP).&amp;#160; It also produces the phonetic name variations for people search.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Index Component&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;If you are familiar with FAST Search for SharePoint, the index component will look pretty similar.&amp;#160; The Index Component is used in both feeding and query processes.&amp;#160; It takes items from the content processing component and writes them to the index.&amp;#160; It also receives queries from the query processing component and returns result sets.&amp;#160; The Index architecture is based off the rows and columns concepts in FS4SP.&amp;#160; Index Replicas (rows) provide a level of redundancy with groups of servers.&amp;#160; Index Partitions (columns) allow you to split the index between servers.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Analytics Component&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The Analytics Component analyzes crawled items and how users interact with Search Results.&amp;#160; It truly is a part of what makes search “learn” and provide better search results to the user.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Query Processing Component&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This component performs linguistic processing at query time such as work breaking, stemming, spell checking, and the thesaurus.&amp;#160; When the query comes in, it completes it’s processing and passes it to the query component.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Search Administration Component&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The administration component stores the various information about search that you configure through the user interface in the Search Service Application.&amp;#160; It also manages topology changes.&lt;/p&gt;  &lt;h3&gt;Search Processes&lt;/h3&gt;  &lt;p&gt;The search processes look a bit different than what you may be used to.&amp;#160; The Host Controller is a Windows service that manages various processes called NodeRunners.&amp;#160; When you first install SharePoint 2013 Preview and you wonder where all your memory is, you’ll see multiple NodeRunner.exe processes at the top of the list.&amp;#160; Each NodeRunner.exe hosts one of the various components above.&amp;#160; Looking at the task manager, it is not obvious which process is running which component.&amp;#160; There is a PowerShell script that will tell you, that I will post in the future.&amp;#160; Lastly, MSSearch.exe is the Windows Service that hosts the crawl component.&lt;/p&gt;  &lt;h2&gt;Crawling&lt;/h2&gt;  &lt;p&gt;The configuration of crawling looks similar but there are lots of changes.&amp;#160; Many of the configuration changes you make aren’t limited to the Search Service Application any more.&amp;#160; Changes can be made at the site collection and some can even be made at the site.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Content Sources&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Content Sources are configured in much the same way, but there are some changes.&amp;#160; The newest feature here is the concept of Continuous Crawling.&amp;#160; This crawls your content source continuously (every 15 minutes by default).&amp;#160; However, there is some magic that occurs now and new items can appear in the index within seconds.&amp;#160; This is something users have always wanted and I am really excited about it.&amp;#160; It also means that when the full crawl is executing, you can see changes to the index while it is still running.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Result Sources&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Results Sources effectively combine Scopes and Federated Locations into one interface.&amp;#160; However, they added a ton of new features in how you can build the queries that make up the result source.&amp;#160; In a new instance, quite a few result sources are available out-of-the-box such as Local SharePoint Results, Popular, and Items Matching a Content Type.&amp;#160; Here is what it looks like.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPResultSourceDefault_6BAD4C2C.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="SPOPResultSourceDefault" border="0" alt="SPOPResultSourceDefault" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPResultSourceDefault_thumb_69FC8058.png" width="535" height="365" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Whereas SharePoint 2010, only had protocols for Local Search and OpenSearch 1.1, SharePoint 2013 Preview (as well as SharePoint Online Preview), support for Remote SharePoint servers and Exchange has been added.&amp;#160; Since SharePoint and People Search results are served by the same search index now, you can choose which type of results you want here too.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPResultSource_417D9E44.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="SPOPResultSource" border="0" alt="SPOPResultSource" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPResultSource_thumb_357BAE10.png" width="366" height="503" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Scrolling down the page, you have the ability to use the new Query Builder to construct a query.&amp;#160; This new interface provides a lot of ways to create custom queries very easily.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPResultSource2_45A77609.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="SPOPResultSource2" border="0" alt="SPOPResultSource2" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPResultSource2_thumb_321A1668.png" width="369" height="323" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The query builder lets you quickly construct a query even with dynamic values.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPQueryBuilder1_22970499.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="SPOPQueryBuilder1" border="0" alt="SPOPQueryBuilder1" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPQueryBuilder1_thumb_6E826545.png" width="600" height="424" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;After you construct your query, you can click the TEST tab to see if the query works.&amp;#160; There is so much to cover with the Query Builder, it will gets it own post in the near future.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPQueryBuilderTest_3EE446B9.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="SPOPQueryBuilderTest" border="0" alt="SPOPQueryBuilderTest" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPQueryBuilderTest_thumb_55C31835.png" width="608" height="254" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;Document Parsing&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;A number of improvements have been made to document parsing as well.&amp;#160; New high performance IFilters exist for common Office document formats as well as images and PDF.&amp;#160; This means you won’t have to manually configure that IFilter any more.&amp;#160; However, the existing IFilter interface is available still in case there is anything you want to add.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Entity Extraction&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;In FS4SP, entity extraction was managed using a set of XML files.&amp;#160; In SharePoint 2013 Preview, this has been moved to the term store.&amp;#160; The out-of-the-box entity extraction will automatically extract company names out of documents.&amp;#160; You can use the term store to manage exclusions and inclusions.&amp;#160; Unlike FS4SP, it doesn’t look like you are able to add your own term sets for entity extraction, so this is unfortunate.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPTermStoreSearchDictionaries_7C24FB80.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="SPOPTermStoreSearchDictionaries" border="0" alt="SPOPTermStoreSearchDictionaries" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPTermStoreSearchDictionaries_thumb_54124C61.png" width="244" height="208" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Schema Management&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Managed Properties and Crawled Properties are now referred to as the Search Schema.&amp;#160; Managed Properties have a number of new parameters such as allowing for sorting and refining that we gained from FS4SP.&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPSearchSchemaManagedProperties_5261808D.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="SPOPSearchSchemaManagedProperties" border="0" alt="SPOPSearchSchemaManagedProperties" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPSearchSchemaManagedProperties_thumb_70CBC176.png" width="613" height="417" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Site Collection administrators now also have the ability to make changes to the search schema at their level.&amp;#160; This allows you to delegate some of the search configuration to admins and let them override settings without affecting things globally.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPSiteCollectionSearchSettings_7CED3B9D.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="SPOPSiteCollectionSearchSettings" border="0" alt="SPOPSiteCollectionSearchSettings" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPSiteCollectionSearchSettings_thumb_49B10234.png" width="237" height="198" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Export and Import&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Another one of my favorite features in Search is that we finally have the ability to export and import search configurations.&amp;#160; I’ve only been asking for this since 2007. :)&amp;#160; You can export your search configuration as XML and then import it later.&amp;#160; This can even be done at the site collection level.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPSearchExportImport_2C5BAA6A.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="SPOPSearchExportImport" border="0" alt="SPOPSearchExportImport" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPSearchExportImport_thumb_075DE9F1.png" width="627" height="105" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Crawl Log Permissions&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;There are times where you may want to grant access to the crawl logs to non-administrator users.&amp;#160; The new setting allows you to grant other users access.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPSearchCrawlLogPermissions_589363EE.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="SPOPSearchCrawlLogPermissions" border="0" alt="SPOPSearchCrawlLogPermissions" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPSearchCrawlLogPermissions_thumb_4712DD49.png" width="472" height="133" /&gt;&lt;/a&gt;&lt;/p&gt;      &lt;h2&gt;Querying&lt;/h2&gt;  &lt;p&gt;We’ll now look at some of the improvements when querying search.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Query Spelling Correction&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Customizations to the Spelling Correction is now managed through the term store as well.&amp;#160; This allows you to customize the “Did you mean?” functionality.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Query Rules&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The new query rules engine lets you tailor your query results in ways never before possible.&amp;#160; Each rule is composed of conditions and actions.&amp;#160; When the conditions are met, one or more actions are implemented.&amp;#160; Actions include things like promoting a result (similar to a best bet) and injecting a result block into the search results (basically changing the way search results look).&amp;#160; I think a screenshot of the out-of-the-box query rules actually explains it better than I do.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPSearchQueryRules_57BFCB64.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="SPOPSearchQueryRules" border="0" alt="SPOPSearchQueryRules" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPSearchQueryRules_thumb_6857C652.png" width="700" height="366" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;In this example, if it finds a person name in the Local SharePoint Results, it will promote a result block showing people that matched the result.&amp;#160; You can create your own query rules to really customize how search results look.&amp;#160; You can even put start and end dates on a query rule.&lt;/p&gt;  &lt;h2&gt;User Interface&lt;/h2&gt;  &lt;p&gt;The User Interface has pretty much been rewritten in its entirety.&amp;#160; It starts with the addition of the &lt;em&gt;ResultScriptWebPart &lt;/em&gt;which retrieves and displays search results.&amp;#160; This replaces the &lt;em&gt;CoreResultsWebPart &lt;/em&gt;from SharePoint 2010 and has a ton of new functionality.&amp;#160; Take a look at the search center in this example:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPSearchCenterResults_14EB8CFF.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="SPOPSearchCenterResults" border="0" alt="SPOPSearchCenterResults" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPSearchCenterResults_thumb_09DC3875.png" width="689" height="423" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;There is a lot to take in here.&amp;#160; In my example here, I had a number of PowerPoint presentations returned.&amp;#160; When I hover over one of them, it gives me a large visual preview of the slide deck that I can flip through.&amp;#160; On top of that, it picked up the key sections of the document and listed them under “Take a look inside”.&amp;#160; At the bottom of the preview there are useful links such as Follow (Social feature), Edit, View Library, and Send.&amp;#160; What’s cool about the document preview is that it lets you scroll through the entire document.&amp;#160; It even shows the animations in PowerPoint decks.&amp;#160; If you used this functionality at all before with FS4SP, you might have been hit with the fact that document previews didn’t work against documents sitting on a claims-enabled web application.&amp;#160; Note, that previews only work with claims authentication now (along with many other things).&lt;/p&gt;  &lt;p&gt;There are a few remaining features to point out.&amp;#160; On the left, you see some of the new visual refiners that allow you to search by different modified dates.&amp;#160; The search box at the top also provides options to easily jump between documents, people, conversations, videos, and reports.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Result Types&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;In the above screenshot, you might have noticed that the PowerPoint results are formatted a certain way.&amp;#160; This is through the new Result Type feature that allows you to customize how a particular result looks based upon a condition.&amp;#160; As someone that customizes search, if there is anything to get excited about, this is it.&amp;#160; Result Types are comprised of Rules, Properties, and Display Templates.&amp;#160; The Rules define when the result type should be used (i.e.: Excel Documents, People, or Picture Library).&amp;#160; When one of these rules matches, that Result Type will be used to display the individual result in a unique way.&amp;#160; Properties refer to managed properties and these are what you will use in your display template to show the data from the result.&amp;#160; Here is what the Result Types page looks like in the Site Collection.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPResultTypes_02AFD42A.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="SPOPResultTypes" border="0" alt="SPOPResultTypes" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPResultTypes_thumb_72545C70.png" width="695" height="356" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;You can edit the built-in result types, but you can create new ones.&amp;#160; Before you define your result type, it is a good idea to create a new display template as you will have to select it from a list when creating the result type.&amp;#160; The Display Templates are .js files and are kept in the &lt;em&gt;~sitecollection/_catalogs/masterpage/Display Templates/Search&lt;/em&gt; folder.&lt;/p&gt;  &lt;p&gt;I’ll post soon about how to configure result types, but take a look at another example.&amp;#160; This time I have a mixture of different document types.&amp;#160; Most result types look the same out of the box, but you can customize them heavily to meet your needs.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPSearchResults2_23FF53F9.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="SPOPSearchResults2" border="0" alt="SPOPSearchResults2" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPSearchResults2_thumb_3ACDFFA8.png" width="700" height="422" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Search Refinement&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The refiner web part has some added functionality.&amp;#160; It has the most of refinement included in SharePoint 2010.&amp;#160; However, for those of you who used to use FAST ESP, we now have faceted navigation.&amp;#160; This allows you to use refinement before you ever issue a search and is based upon data in the term store.&amp;#160; Think of how BestBuy.com uses FAST ESP to allow you to select TVs –&amp;gt; &amp;gt;50” –&amp;gt; Plasma, etc.&amp;#160; We can also leverage display templates to change how the refinement is rendered.&amp;#160; This makes use of the new &lt;em&gt;Refinable &lt;/em&gt;attribute that we see on managed properties.&amp;#160; For example, that is how you see the data slider.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPReinferModifiedDate_5642DBDE.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="SPOPReinferModifiedDate" border="0" alt="SPOPReinferModifiedDate" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPReinferModifiedDate_thumb_7CA4BF29.png" width="131" height="135" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Query Suggestions&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Query Suggestions have been improved largely through the use of the analytics component to analyze your personal search history.&amp;#160; It actually weights results based on links you have previously visited.&amp;#160; It also looks at the most frequent queries of all users to deliver better suggestion.&amp;#160; There are two types of query suggestions: what you see before issuing the query and what you see along with the results.&amp;#160; For the pre-query suggestions, you will get suggestions from your personal query log along with what other people have been searching for.&amp;#160; For the suggestions after you get results back, it returns matches that you have clicked on at least twice.&amp;#160; I’ll post more on this later after I have an environment that has been up long enough to capture some of this data.&lt;/p&gt;  &lt;h2&gt;API&lt;/h2&gt;  &lt;p&gt;The Search API has underwent a series of changes.&amp;#160; Two new interfaces are available, while one was removed and another deprecated.&amp;#160; If you write custom search code, you will want to pay attention to this section.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;New Interfaces&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The SharePoint REST API got some love in this release.&amp;#160; In terms of search, we have a whole new interface for querying using REST.&amp;#160; This is possible by calling the endpoint located at /_api/search.&amp;#160; You can specify any site collection or site in the URL, but typically you’ll just go with the web application root URL.&amp;#160; Specify any other URL prefix will get you the same results as well.&amp;#160; In one of my upcoming posts, we’ll go into some real examples of how to use this new endpoint.&lt;/p&gt;  &lt;p&gt;Search also got some love in the Client OM.&amp;#160; That means you can now execute search queries using CSOM via JavaScript or .NET.&amp;#160; According to the &lt;a href="http://msdn.microsoft.com/en-us/library/jj163951(v=office.15)"&gt;MSDN&lt;/a&gt; post, you can do mobile development as well, but I’m unsure if that includes Windows Phone.&amp;#160; I am thinking it doesn’t but you can still use the REST API there.&amp;#160; I’ll confirm that as I begin writing my posts on the API.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Removed and Deprecated&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The Search API has been expanded greatly and you have some great new options to use.&amp;#160; However, there are a few other changes you need to know about.&amp;#160; First, and foremost, the SQL Syntax has been removed.&amp;#160; I’ve been telling you for years to &lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2010/12/22/use-keyword-query-syntax-instead-of-sql-syntax-for-sharepoint-2010-search-queries.aspx"&gt;stop using it&lt;/a&gt;.&amp;#160; At SPC09, they said it was unofficially deprecated and now I can say straight up that it is &lt;a href="http://msdn.microsoft.com/en-us/library/jj163951(v=office.15)"&gt;gone&lt;/a&gt; now.&amp;#160; You also need to know that the Search web service (search.asmx) is now deprecated (but not gone) as well.&amp;#160; That means you need to stop using the web service as it won’t work some day.&amp;#160; If you need to remotely access Search, then use the Query CSOM or the Query REST Service which are much better and featured.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;New Operators&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;If you have been using FAST Search for SharePoint, these three new operators will be nothing new to you.&amp;#160; However, if you were strictly running SharePoint 2010, they may be of interest.&amp;#160; Previously the XRANK operator was only available in FQL.&amp;#160; Now we can use it in regular keyword queries and it gives us the ability to dynamically adjust the rank of items.&amp;#160; The NEAR operator has been improved to include a configurable token distance (besides the default of 8) and a new ONEAR operator allows for ordered near functionality.&amp;#160; Most of these operators are pretty hardcore so most people probably will never use them but they are there if you need them.&amp;#160; You can also continue to use &lt;a href="http://msdn.microsoft.com/en-us/library/jj163973(v=office.15)"&gt;FQL&lt;/a&gt; if you prefer.&lt;/p&gt;  &lt;h2&gt;SharePoint Online&lt;/h2&gt;          &lt;p&gt;As Microsoft works to bring feature parity to SharePoint Online, the preview brings us a heap of new features in Search.&amp;#160; Whereas you could configure next to nothing in the previous iteration of SharePoint Online, you can do just about anything with Search now.&amp;#160; This comes from the new Search link inside tenant administration.&amp;#160; From the list you see below, you can do just about anything except configure Content Sources.&amp;#160; These are still handles automatically by SharePoint Online so we can’t change the frequency of crawls nor can we crawl other sources such as HTTP or BCS.&amp;#160; Take a look at the Search settings in Tenant administration to get a feel for what you can do.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPreviewTenantAdminSearch_54FE42FF.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="SPOPreviewTenantAdminSearch" border="0" alt="SPOPreviewTenantAdminSearch" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPreviewTenantAdminSearch_thumb_061D7DA0.png" width="799" height="517" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Scrolling down, we can adjust a few more settings.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPreviewTenantAdminSearch2_72901DFE.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="SPOPreviewTenantAdminSearch2" border="0" alt="SPOPreviewTenantAdminSearch2" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SPOPreviewTenantAdminSearch2_thumb_1FA50ACD.png" width="584" height="190" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I’ve already talked about Export and Import.&amp;#160; The new &lt;em&gt;Search Center Settings&lt;/em&gt; link allows you to set a global search center that will be used on each site.&amp;#160; The feature parity in Search with SharePoint Online Preview is impressive.&amp;#160; In fact, all of my screenshots for this article came from the cloud.&lt;/p&gt;  &lt;h2&gt;Summary&lt;/h2&gt;      &lt;p&gt;As I expected, this post has proved to be quite long.&amp;#160; I tried to be brief in each section so as I could cover as much as possible.&amp;#160; Anything in bold in this article will likely be a follow-up blog post, so stay tuned.&amp;#160; I expect to find information that needs to be updated or points that I left out. I’ll be posting updates to this post as necessary. Anyhow, I hope this post has proved useful in explaining what you need to know about Search in SharePoint 2013 Preview.&lt;/p&gt;  &lt;p&gt;Follow me on &lt;a href="http://twitter.com/coreyroth"&gt;twitter&lt;/a&gt; at &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=5772" 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/FAST+Search+for+SharePoint/default.aspx">FAST Search for 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/Office+365+Preview/default.aspx">Office 365 Preview</category></item><item><title>How to: Drag and Drop files into SharePoint 2013 Document Libraries</title><link>http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2012/07/16/how-to-drag-and-drop-files-into-sharepoint-2013-document-libraries.aspx</link><pubDate>Tue, 17 Jul 2012 02:38:20 GMT</pubDate><guid isPermaLink="false">ceb7fe2a-c56b-4d85-99e6-8dd548580538:5765</guid><dc:creator>CoreyRoth</dc:creator><slash:comments>12</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://www.dotnetmafia.com/blogs/dotnettipoftheday/rsscomments.aspx?PostID=5765</wfw:commentRss><comments>http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2012/07/16/how-to-drag-and-drop-files-into-sharepoint-2013-document-libraries.aspx#comments</comments><description>&lt;p&gt;One of the simplest but most exciting features in SharePoint 2013 is the ability to drag and drop files into document libraries directly in the web browser.&amp;#160; That means the user can drag a file off of his or her desktop and literally drag and drop it onto the browser and the file will upload.&amp;#160; Here is what it looks like when you have the capability of drag and drop.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SP2013PDragDropEnabled_5206C670.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="SP2013PDragDropEnabled" border="0" alt="SP2013PDragDropEnabled" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SP2013PDragDropEnabled_thumb_50C22D91.png" width="406" height="120" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Note that it says you can “drag files here”.&amp;#160; Here is what it looks like when you drag multiple files.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SP2013DocumentLibraryDragDropIE9_0F477B38.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="SP2013DocumentLibraryDragDropIE9" border="0" alt="SP2013DocumentLibraryDragDropIE9" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SP2013DocumentLibraryDragDropIE9_thumb_66C89923.png" width="573" height="104" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;While the files are copying, you’ll see a screen like this.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SP2013DocumentLibraryDragDropInProgress_7356463F.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="SP2013DocumentLibraryDragDropInProgress" border="0" alt="SP2013DocumentLibraryDragDropInProgress" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SP2013DocumentLibraryDragDropInProgress_thumb_643F6765.png" width="469" height="221" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This new feature is going to be one of the single most drivers of end user adoption hands-down.&amp;#160; Now, you may be thinking…”That’s great, but I am sure it only works in IE.”&amp;#160; If you thought that, you would be thinking wrong.&amp;#160; I have tested it in a variety of browsers and have found that it has worked in every test I did with the exception of Internet Explorer 8 running on Windows Server 2008 R2.&amp;#160; &lt;/p&gt;    &lt;p&gt;Here’s what it looks like in Google Chrome.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SP2013PDragDropChrome_09C8E4C7.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="SP2013PDragDropChrome" border="0" alt="SP2013PDragDropChrome" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SP2013PDragDropChrome_thumb_6EB015B8.png" width="454" height="418" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I’ve even tried it in Safari on Mac OS X and it works there too.&amp;#160; I would have included a screenshot of this but it was way too much effort to take it and get it back to my laptop. :)&lt;/p&gt;  &lt;p&gt;I mentioned, it didn’t work for me in Internet Explorer 8 on Windows Server 2008 R2.&amp;#160; This could be because of the server OS, because of IE8, or because I don’t have Office installed.&amp;#160; That will require a bit more research.&amp;#160; Here is what it looks like when drag an drop is not available.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SP2013PDocumentLibraryNoDragDrop_45C500AF.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="SP2013PDocumentLibraryNoDragDrop" border="0" alt="SP2013PDocumentLibraryNoDragDrop" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SP2013PDocumentLibraryNoDragDrop_thumb_4B9FA448.png" width="446" height="148" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Note, that “or drag files here” is not listed.&amp;#160; &lt;/p&gt;  &lt;p&gt;Now you might be wondering about how this works when content types with required fields are in place.&amp;#160; Well, honestly, it could be handled better.&amp;#160; The file is left checked out and it doesn’t really instruct the user to edit the properties and check the document in.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SP2013PDocumentLibraryContentType_154E7C39.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="SP2013PDocumentLibraryContentType" border="0" alt="SP2013PDocumentLibraryContentType" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SP2013PDocumentLibraryContentType_thumb_5AF30657.png" width="515" height="149" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;So for such a simple new feature, it is really quite exciting.&amp;#160; I really think it will enhance productivity greatly.&amp;#160; All screenshots were taken from SharePoint Online Preview.&lt;/p&gt;&lt;img src="http://www.dotnetmafia.com/aggbug.aspx?PostID=5765" 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/Office+365+Preview/default.aspx">Office 365 Preview</category></item></channel></rss>