tag:blogger.com,1999:blog-38881232221039886942024-03-05T17:35:09.226-05:00Dig SharePointUnknownnoreply@blogger.comBlogger380125tag:blogger.com,1999:blog-3888123222103988694.post-6951690619701182992016-01-12T06:34:00.000-05:002016-01-12T06:46:20.047-05:00中国平安陆金所邀您来投资<a href='http://www.igouwuke.net/ljs.php' target='_blank'><img border='0' width='735' height='853' src='http://img.igouwuke.net/ljs/1.jpg' ></a> SharePointhttp://www.blogger.com/profile/11836813831529789606noreply@blogger.comtag:blogger.com,1999:blog-3888123222103988694.post-87417396382267739312013-08-12T05:35:00.001-04:002013-08-12T05:35:54.537-04:00How to Pass Parameters to Success method in executeQueryAsync SharePoint<div style="color: rgb(0, 0, 0); font-family: arial; font-size: 14px;"><div><p>Summary <img class="wp-smiley" alt=":P" src="http://digsharepoint.com/wp-includes/images/smilies/icon_razz.gif"> assing Parameters to Success method in executeQueryAsync SharePoint, Passing Parameters and Returning Values from Success method in executeQueryAsync + Client Object Model + SharePoint 2010\SharePoint 2013,How to Pass Parameters and Retrieve Values from Success method in executeQueryAsync() SharePoint</p><p>This is quick tip about how to Pass Parameters and Retrieve Values from Success method in executeQueryAsync()</p><p>To Pass a Parameter in Success method use the following Syntax –</p><p>Before passing Parameters:</p><p>context.executeQueryAsync(Function.createDelegate(this,this.success)),</p><p>Function.createDelegate(this, this.failed));</p><p>After passing Parameters:</p><p>context.executeQueryAsync(</p><p>Function.createDelegate(this,function(){success(_parameter);}),</p><p>Function.createDelegate(this, this.failed));</p><p>function success(_parameter)<br> {<br> alert("In Success Method! " + _parameter);<br> }</p><p>To Retrieve Values from Success method use the following Syntax –</p><p>context.executeQueryAsync(</p><p>Function.createDelegate(this, function(){ _returnParam = success(_parameter);}),</p><p>Function.createDelegate (this, this.failed));</p><p>alert(_returnParam);<br></p></div><div><br></div><div><br></div></div><!-- jy5ContentSuffix --><br><br><span title="neteasefooter"><span id="netease_mail_footer"></span></span>SharePointhttp://www.blogger.com/profile/11836813831529789606noreply@blogger.comtag:blogger.com,1999:blog-3888123222103988694.post-25607109975490653002013-08-02T01:50:00.001-04:002014-11-28T04:14:34.114-05:00How to Batch Update List Items in SharePoint 2013 based on a CAML query (using Web Services + AJAX + JQuery)<div style="color: rgb(0, 0, 0); font-family: arial; font-size: 14px;"><div><p>Example of Batch Updating List Items in SharePoint 2013 based on a query using Client Object Model and Jquery.</p><p>In this example we will look at a Script where we make an Ajax call to GetlistItems web service and pass a CAML query to retrieve all Items with "Project Cost" greater than $1000 (as seen in the Before Projects list screen below). Once the Items are Retrieved (based on a "Project Cost" CAML query), we Create a Update Batch of these Items and pass it to the UpdateItems method.The UpdateItems method finally updates the required Items in the Projects List with the appropriate Status (see the After Image below).</p><p>Final Result – After running the Batch update script, all the Items with "Project Cost" > $1000 will have an updated Status of "Transferred" in the Custom Project List that we have Created.</p><p>Before :</p><p><a href="http://digsharepoint.com/wp-content/uploads/2013/08/11.jpg"><img width="556" height="277" class="size-full wp-image-1218 aligncenter" alt="1" src="http://digsharepoint.com/wp-content/uploads/2013/08/11.jpg"></a></p><p>After :</p><p><a href="http://digsharepoint.com/wp-content/uploads/2013/08/21.jpg"><img width="560" height="274" class="size-medium wp-image-1219 aligncenter" alt="2" src="http://digsharepoint.com/wp-content/uploads/2013/08/21.jpg"></a></p><p>To begin,</p><p>1. <a href="http://digsharepoint.com/wp-content/uploads/2013/08/BatchUpdateListItems_basedonQuery.txt"><font color="#ea141f"><b>Download the Script</b> </font></a> and add it to Script Editor or Content Editor WebPart on your Lists Page. 2. Edit the listname, Column names and Value for the CAML query and update batch (in AddTobatch() method). 3. Once done Save and Click the link <em>"Update Status for Items with Project Cost >$1000″</em> to update the Items that are retrieved from the CAML query. 4. Once updated a Confirmation message – "Update Complete" is displayed.</p><p><a href="http://digsharepoint.com/wp-content/uploads/2013/08/31.jpg"><img width="521" height="255" class="alignnone size-medium wp-image-1220" alt="3" src="http://digsharepoint.com/wp-content/uploads/2013/08/31.jpg"></a><br></p></div><div><br></div><div><br></div></div><!-- jy5ContentSuffix --><br><br><span title="neteasefooter"><span id="netease_mail_footer"></span></span>SharePointhttp://www.blogger.com/profile/11836813831529789606noreply@blogger.comtag:blogger.com,1999:blog-3888123222103988694.post-86882581815815922332013-08-02T01:29:00.000-04:002014-11-28T04:14:34.119-05:00Folders and unsupported file types can’t be uploaded in SharePoint 2013<div style="color: rgb(0, 0, 0); font-family: arial; font-size: 14px;"><div><p>This is a quick tip about adding Folders or Items to a document Library using the new Drag and Drop feature.</p><p>If you are trying to Drag-n-Drop folders into a documnet library, you might run into the following error -</p><p><em>"Folders and Unsupported file types can't be uploaded"</em></p><p><a href="http://digsharepoint.com/wp-content/uploads/2013/08/1.jpg"><img width="660" height="276" class="size-medium wp-image-1211 aligncenter" alt="1" src="http://digsharepoint.com/wp-content/uploads/2013/08/1-660x276.jpg"></a></p><p>The error simply occurs because with the new Drag and Drop feature you cannot add or Upload Folders,Items and Document sets into the library.This is a major limitation for Companies who love to add folders instead of individual Files in the library.</p><p>If this what your requirement is, there are few alternatives available for you.</p><p><strong>1. Use the conventional Windows Explorer View -</strong> To Open Windows Explorer click on Upload Document button as shown in picture below</p><p><a href="http://digsharepoint.com/wp-content/uploads/2013/08/2.jpg"><img width="183" height="156" class="size-medium wp-image-1212 aligncenter" alt="2" src="http://digsharepoint.com/wp-content/uploads/2013/08/2.jpg"></a></p><p>Next in the Add Documents popup click on "Upload Files using windows Explorer Instead" to Open the Windows explorer view where you can Drag and Drop folders.</p><p><a href="http://digsharepoint.com/wp-content/uploads/2013/08/3.jpg"><img width="517" height="200" class="size-medium wp-image-1213 aligncenter" alt="3" src="http://digsharepoint.com/wp-content/uploads/2013/08/3.jpg"></a></p><p><strong>2. Map the Document Library as Network Drive – </strong>You can Map any document library as a network drive and then drag and drop folders to it.</p><p><a href="http://digsharepoint.com/wp-content/uploads/2013/08/4.jpg"><img width="462" height="300" class="size-medium wp-image-1214 aligncenter" alt="4" src="http://digsharepoint.com/wp-content/uploads/2013/08/4-462x300.jpg"></a></p><p>When you Map a document Library as a Network drive, you might see an error because of the missing "Desktop Experience" feature in Windows Server 2012. Take a look at this post where we resolve this issue and <a title="Map Master Page gallery as a Network drive" href="http://digsharepoint.com/2013/07/09/error-windows-cannot-access-mapping-master-page-gallery-as-network-drive/" target="_blank"><font color="#ea141f">Map Master Page gallery as a Network drive</font></a>.</p><p> </p><p><strong>3. Using SYNC Option -</strong> In SharePoint 2013, you can make any Document Library SYNC to your Local Folder (Including the SkyDrive PRO Library) to work with documents Offline. Once the Library is SYNCed users can Open, Edit and Add Files and Folders to the SYNCed Library Folder that gets created on your Local. These additions can be Synced back to the Library either everytime when you connect to SharePoint or On-Demand with "Sync now". Take a Look at the steps at <a href="http://digsharepoint.com/2013/07/09/how-to-work-with-documents-offline-in-sharepoint-2013/"><font color="#ea141f">Work with Documents Offline in SharePoint 2013</font></a><br></p></div><div><br></div><div><br></div></div><!-- jy5ContentSuffix --><br><br><span title="neteasefooter"><span id="netease_mail_footer"></span></span>SharePointhttp://www.blogger.com/profile/11836813831529789606noreply@blogger.comtag:blogger.com,1999:blog-3888123222103988694.post-76689698312513765402013-07-04T23:06:00.001-04:002013-07-04T23:06:21.264-04:00How to: SharePoint 2010 User Name Displaying Incorrectly in Option Menu<div style="color: rgb(0, 0, 0); font-family: arial; font-size: 14px;"> I found an interesting bug that can occur when SharePoint 2010 syncs with AD and the user name is entered incorrectly in AD then fixed later. The profile sync will fix the name in most places except one of the most important and highly visible locations, the Option Menu. The Option Menu in SharePoint 2010 is the top right of every SharePoint 2010 page on a SharePoint site, it displays your user name, and this bug makes it so it's incorrect until you manually update it.<p> This isn't a very common problem but it occurs when a user it put into AD incorrectly, then SharePoint does its AD sync and the name is stored in the User Profile database with the wrong spelling. Later the name is updated in AD and SharePoint will sync the correct name. The problem is that for some reason the Option Menu display won't update to the correct spelling. That is unless you force it to, the following steps explain how to force the update and correct the issue.</p><p> 1. Open the SharePoint 2010 server that hosts Central Admin</p><p> 2. Click Start</p><p> 3. Click All Programs</p><p> 4. Click SharePoint 2010 Products</p><p> 5. Click SharePoint 2010 Management Shell (run as administrator)</p><p> 6. Type Set-SPUser -Identity 'Domain\UserName' -Web http://SharePointServer -SyncFromAD</p><p> 7. Hit Enter (the script will run and once complete will prompt you that it completed)</p><p> Once the command completes you should be able to go back to any SharePoint page and the user name should now display properly. If it doesn't this could be a simple browser cache issue, so depending on your browser of choice clear cookies and cache and re-open SharePoint. The issue should now be resolved.</p><p> Well hopefully this fixed your issue with the SharePoint 2010 user name displaying incorrectly in the option menu. I know this can be a frustrating issue for users; they of course want their name displayer properly.</p><p>If you are unable to use the Exchange AD synch option described earlier, sign into SharePoint as as a different user and delete the wrong username. Open the option menu next to the username in the SharePoint page and choose "Sign in as a Different User" and sign in with a different user credential. Go back to the options menu and choose the "My Settings" option; the wrong user name should still be displayed on the sharepoint site. When the settings page open, click the "Edit Item" option. Within the edit window, choose the option to delete the username with the wrong information. Logout of the sharepoint page and then log back in with the right user credentials. This process should update to the correct user data on the sharepoint page.<br> <br> <br> </p></div> <div id="spnEditorSign"> </div> <div><br></div> <!-- jy5ContentSuffix --> <br><br><span title="neteasefooter"><span id="netease_mail_footer"></span></span>SharePointhttp://www.blogger.com/profile/11836813831529789606noreply@blogger.comtag:blogger.com,1999:blog-3888123222103988694.post-20289982993407858062013-06-21T01:29:00.001-04:002013-06-21T01:29:45.635-04:00Lync State display in a custom webpart for SharePoint 2010<div style="color: rgb(0, 0, 0); font-family: arial; font-size: 14px;"><p>I recently spent a while trying to integrate the Lync state into a custom web part and found it a little tricky so wanted to share my learning's. With SharePoint 2010's new social capabilities, I see this integration as being a must-have for any webpart or other custom interface that refers to people.</p><p><strong>How does SharePoint do it?</strong></p><p>Whenever a person's name is mentioned in the standard SharePoint UI, if the user has Office Communicator installed, the name will be shown with the Office Communicator 'pawn'. The pawn shows the user's status and gives them access to the pop-up menu to see more details.</p><p>Depending on which version of Office the user has installed, the experience will vary, however it will be the same experience as seen in Outlook. In Office 2010 it is a square icon with a richer drop-menu, in 2007 it is round.</p><p><a href="http://blogs.msdn.com/blogfiles/uksharepoint/WindowsLiveWriter/OfficeCommunicatorintegrationPresenceina_5FE3/SPPresencePawn_2.jpg"><img style="border-width: 0px; display: inline;" title="SPPresencePawn" border="0" alt="SPPresencePawn" src="http://blogs.msdn.com/blogfiles/uksharepoint/WindowsLiveWriter/OfficeCommunicatorintegrationPresenceina_5FE3/SPPresencePawn_thumb.jpg" width="244" height="92"></a> </p><p>In addition to the pawn, the user's name will be a hyperlink to their profile page. This will vary depending on whether the user is in the main 'User Profile Service Application' (or 'profile database' for old-school terminology) or not. If the user does have a profile then the hyperlink will redirect to the user's main profile page under My Site. If the user does not have a profile, the hyperlink will redirect to the SharePoint Foundation 'User Information' page. All users in a site have a 'User Information' page, if they also have a User Profile the settings from the profile are synchronised down to the User Information page on a scheduled basis (by a timer job).</p><p>The key piece of information to make the presence work is the user's SIP Address which is basically their IM address (This is not always the same as email address). When a users is either added to a site in SharePoint or has their profile imported, the SIP Address will be drawn from Active Directory which is where OCS stores it and placed into the SIP address field in either the user's profile which will in turn synchronise down to the site's local 'User Information' page.</p><p><strong>How does the pawn work in terms of HTML?</strong></p><p>The pawn is basically an IMG element which has <font face="Courier New">"IMNRC('[user's SIP Address]')"</font> for the onload function. This will user client-side script that is part of Office to load the presence pawn on the page. </p><p>The hyperlink on the user's name is just a simple <font face="Courier New">A</font> element which redirects to <font face="Courier New">"/_layouts/userdisp.aspx?ID=[User's local user information list item ID]"</font>. This userdisp.aspx page will then redirect to the user's main profile page if they have a profile, otherwise it will display the basic information that the user information list item stores.</p><p><strong>How to get the SIP Address?</strong></p><p>Hopefully you'll have spotted by now that the presence pawn relies on the user's SIP Address. To get the SIP address you need to get the user's User Information list item from the local site's (<font face="Courier New">SPWeb</font> to be precise) <font face="Courier New">SiteUserInfoList</font> which is basically a hidden <font face="Courier New">SPList</font> that is in every web.</p><p>There is a handy property to get you to this list called 'SPWeb.SiteUserInfoList'. This will give you an <font face="Courier New">SPList</font> object which represents the User Information list. From here you just need to find the item that represents the user you wish to display. The best way to do this is via their ID (the ID of the list item) by calling <font face="Courier New">SPWeb.SiteUserInfoList.GetItemById([int User's ID])</font>, however you can also use a variety of other methods which use SPQuery or match a specific field to a value.</p><p>In most scenarios, you may be getting the user information from a <font face="Courier New">SPFieldUserValueCollection</font> which is basically the field type that is used for 'Person' fields. If this is the case you can use <font face="Courier New">SPFieldUserValue.LookupId</font> to get the ID of the user's User Information list item. </p><p><strong>Putting it all together</strong></p><p>This code sample is a method that accepts an <font face="Courier New">SPFieldUserValueCollection</font> and <font face="Courier New">SPSite</font> as inputs and returns back the HTML for displaying each entry in the <font face="Courier New">SPFieldUserValueCollection</font> with the presence pawn and link to their profile. This will be presented exactly as SharePoint presents it by default. This could be extended to use ALT tags in the IMG and A elements.</p><p>I then simply add the HTML to an <font face="Courier New">HtmlWriter</font> or in my case a <font face="Courier New">TableCell.Text</font> property to display it on screen.</p><p>I've take a few extra steps here by adding <font face="Courier New">ID</font> and <font face="Courier New">alt</font> tags and trying to make the code readable, but I'm sure you get the idea:</p><p><font face="Courier New">public string GetPresenceHTMLFromUVC(SPSite thisSite, SPFieldUserValueCollection uvc)<br>{<br> StringBuilder html = new StringBuilder("");<br> using (SPWeb thisWeb = thisSite.RootWeb)<br> {<br> foreach (SPFieldUserValue uv in uvc)<br> {<br> string sipAddress = "";<br> //Get the sip address if it exists<br> SPListItem user = thisWeb.SiteUserInfoList.GetItemById(uv.LookupId);<br> if (user["SipAddress"] != null)<br> {<br> sipAddress = user["SipAddress"].ToString();<br> }<br> //construct the html for this user and add to overall html<br> html.Append(String.Concat(<br> "<div id\"PresenceLink"<br> , sipAddress<br> , "\">"<br> , "<img border=\"0\" height=\"12\" src=\"/_layouts/images/imnhdr.gif\" onload=\"IMNRC('"<br> , sipAddress<br> , "')\" ShowOfflinePawn=\"1\" style=\"padding-right: 3px;\" id=\"PresencePawn"<br> , sipAddress<br> , "\" alt=\"presence pawn for "<br> , sipAddress<br> , "\"/>"<br> , "<a href=\""<br> , thisWeb.Url<br> , "/_layouts/userdisp.aspx?ID="<br> , uv.LookupId<br> , "\" id=\"ProfileLink"<br> , sipAddress<br> , "\">"<br> , uv.User.Name<br> , "</a></div>"<br> ));<br> }<br> }<br> return html.ToString();<br>}</font><br><br><br></p></div><div id="spnEditorSign"></div><div><br></div><!-- jy5ContentSuffix --><br><br><span title="neteasefooter"><span id="netease_mail_footer"></span></span>SharePointhttp://www.blogger.com/profile/11836813831529789606noreply@blogger.comtag:blogger.com,1999:blog-3888123222103988694.post-65429286203244250002013-05-31T00:23:00.001-04:002013-05-31T00:23:20.454-04:00Sort Folders (Custom Order) in SharePoint Document Library<div style="color: rgb(0, 0, 0); font-family: arial; font-size: 14px;"><font size="3" face="宋体"> </font><p style="margin: 0cm 0cm 0pt 20.6pt;"><span style="background: rgb(192, 161, 84); color: rgb(51, 51, 51); font-family: "Georgia","serif"; font-size: 22.5pt;" lang="EN-US">Sort Folders (Custom Order) in SharePoint Document Library</span><span style="color: rgb(51, 51, 51); font-family: "Georgia","serif"; font-size: 22.5pt;" lang="EN-US"><o:p></o:p></span></p><font size="3" face="宋体"> </font><p style="margin: 0cm 0cm 0pt 20.6pt;"><span style="color: rgb(51, 51, 51); font-family: "Arial","sans-serif"; font-size: 10.5pt;" lang="EN-US">One of my friend recently asked me this question about sorting the folders (not in alphabetical order) in a document library. The sort order has to be custom and user should be able to specify the order in which folders should appear. Example sort order<o:p></o:p></span></p><font size="3" face="宋体"> </font><p style="margin: 0cm 0cm 0pt 20.6pt;"><span style="font-family: "Calibri","sans-serif"; font-size: 10.5pt;" lang="EN-US"> <o:p></o:p></span></p><font size="3" face="宋体"> </font><p style="margin: 0cm 0cm 0pt 20.6pt;"><span style="color: rgb(51, 51, 51); font-family: "Arial","sans-serif"; font-size: 10.5pt;" lang="EN-US">Top<o:p></o:p></span></p><font size="3" face="宋体"> </font><p style="margin: 0cm 0cm 0pt 20.6pt;"><span style="color: rgb(51, 51, 51); font-family: "Arial","sans-serif"; font-size: 10.5pt;" lang="EN-US">Middle<o:p></o:p></span></p><font size="3" face="宋体"> </font><p style="margin: 0cm 0cm 0pt 20.6pt;"><span style="color: rgb(51, 51, 51); font-family: "Arial","sans-serif"; font-size: 10.5pt;" lang="EN-US">Bottom<o:p></o:p></span></p><font size="3" face="宋体"> </font><p style="margin: 0cm 0cm 0pt 20.6pt;"><span style="font-family: "Calibri","sans-serif"; font-size: 10.5pt;" lang="EN-US"> <o:p></o:p></span></p><font size="3" face="宋体"> </font><p style="margin: 0cm 0cm 0pt 20.6pt;"><span style="font-family: "Calibri","sans-serif"; font-size: 10.5pt;" lang="EN-US"> <o:p></o:p></span></p><font size="3" face="宋体"> </font><p style="margin: 0cm 0cm 0pt 20.6pt;"><span style="background: white; color: rgb(51, 51, 51); font-family: "Arial","sans-serif"; font-size: 10.5pt;" lang="EN-US">In order to implement this y</span><span style="color: rgb(51, 51, 51); font-family: "Arial","sans-serif"; font-size: 10.5pt;" lang="EN-US">ou can create a new folder content type and add an order column to this content type. You do need to have the appropriate rights to do so.<o:p></o:p></span></p><font size="3" face="宋体"> </font><p style="margin: 0cm 0cm 0pt 20.6pt;"><span style="font-family: "Calibri","sans-serif"; font-size: 10.5pt;" lang="EN-US"> <o:p></o:p></span></p><font size="3" face="宋体"> </font><p style="margin: 0cm 0cm 0pt 20.6pt;"><span style="color: rgb(51, 51, 51); font-family: "Arial","sans-serif"; font-size: 10.5pt;" lang="EN-US">The steps would be as follows.<o:p></o:p></span></p><font size="3" face="宋体"> </font><p style="margin: 0cm 0cm 0pt 20.6pt; text-indent: -18pt; vertical-align: middle; mso-list: l0 level2 lfo1; tab-stops: list 72.0pt;" class="MsoNormal"><span style="color: rgb(51, 51, 51); font-family: Symbol; font-size: 10pt; mso-bidi-font-family: Symbol; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: Symbol;" lang="EN-US"><span style="mso-list: Ignore;">·<span style="font: 7pt/normal "Times New Roman"; font-size-adjust: none; font-stretch: normal;"> </span></span></span><span style="color: rgb(51, 51, 51); font-family: "Arial","sans-serif"; font-size: 10.5pt;" lang="EN-US">Go to Site Actions</span><span style="color: rgb(51, 51, 51);" lang="EN-US"><o:p></o:p></span></p><font size="3" face="宋体"> </font><p style="margin: 0cm 0cm 0pt 20.6pt; text-indent: -18pt; vertical-align: middle; mso-list: l0 level2 lfo1; tab-stops: list 72.0pt;" class="MsoNormal"><span style="color: rgb(51, 51, 51); font-family: Symbol; font-size: 10pt; mso-bidi-font-family: Symbol; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: Symbol;" lang="EN-US"><span style="mso-list: Ignore;">·<span style="font: 7pt/normal "Times New Roman"; font-size-adjust: none; font-stretch: normal;"> </span></span></span><span style="background: white; color: rgb(51, 51, 51); font-family: "Arial","sans-serif"; font-size: 10.5pt;" lang="EN-US">Go to Site Settings</span><span style="color: rgb(51, 51, 51);" lang="EN-US"><o:p></o:p></span></p><font size="3" face="宋体"> </font><p style="margin: 0cm 0cm 0pt 20.6pt; text-indent: -18pt; vertical-align: middle; mso-list: l0 level2 lfo1; tab-stops: list 72.0pt;" class="MsoNormal"><span style="color: rgb(51, 51, 51); font-family: Symbol; font-size: 10pt; mso-bidi-font-family: Symbol; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: Symbol;" lang="EN-US"><span style="mso-list: Ignore;">·<span style="font: 7pt/normal "Times New Roman"; font-size-adjust: none; font-stretch: normal;"> </span></span></span><span style="color: rgb(51, 51, 51); font-family: "Arial","sans-serif"; font-size: 10.5pt;" lang="EN-US">Go to Site Content Types</span><span style="color: rgb(51, 51, 51);" lang="EN-US"><o:p></o:p></span></p><font size="3" face="宋体"> </font><p style="margin: 0cm 0cm 0pt 20.6pt; text-indent: -18pt; vertical-align: middle; mso-list: l0 level2 lfo1; tab-stops: list 72.0pt;" class="MsoNormal"><span style="color: rgb(51, 51, 51); font-family: Symbol; font-size: 10pt; mso-bidi-font-family: Symbol; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: Symbol;" lang="EN-US"><span style="mso-list: Ignore;">·<span style="font: 7pt/normal "Times New Roman"; font-size-adjust: none; font-stretch: normal;"> </span></span></span><span style="color: rgb(51, 51, 51); font-family: "Arial","sans-serif"; font-size: 10.5pt;" lang="EN-US">Click Create New</span><span style="color: rgb(51, 51, 51);" lang="EN-US"><o:p></o:p></span></p><font size="3" face="宋体"> </font><p style="margin: 0cm 0cm 0pt 20.6pt; text-indent: -18pt; vertical-align: middle; mso-list: l0 level2 lfo1; tab-stops: list 72.0pt;" class="MsoNormal"><span style="color: rgb(51, 51, 51); font-family: Symbol; font-size: 10pt; mso-bidi-font-family: Symbol; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: Symbol;" lang="EN-US"><span style="mso-list: Ignore;">·<span style="font: 7pt/normal "Times New Roman"; font-size-adjust: none; font-stretch: normal;"> </span></span></span><span style="color: rgb(51, 51, 51); font-family: "Arial","sans-serif"; font-size: 10.5pt;" lang="EN-US">Give it a name such as Folder Order</span><span style="color: rgb(51, 51, 51);" lang="EN-US"><o:p></o:p></span></p><font size="3" face="宋体"> </font><p style="margin: 0cm 0cm 0pt 20.6pt; text-indent: -18pt; vertical-align: middle; mso-list: l0 level2 lfo1; tab-stops: list 72.0pt;" class="MsoNormal"><span style="color: rgb(51, 51, 51); font-family: Symbol; font-size: 10pt; mso-bidi-font-family: Symbol; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: Symbol;" lang="EN-US"><span style="mso-list: Ignore;">·<span style="font: 7pt/normal "Times New Roman"; font-size-adjust: none; font-stretch: normal;"> </span></span></span><span style="color: rgb(51, 51, 51); font-family: "Arial","sans-serif"; font-size: 10.5pt;" lang="EN-US">Select Parent Content Type from as of Folder Content Types</span><span style="color: rgb(51, 51, 51);" lang="EN-US"><o:p></o:p></span></p><font size="3" face="宋体"> </font><p style="margin: 0cm 0cm 0pt 20.6pt; text-indent: -18pt; vertical-align: middle; mso-list: l0 level2 lfo1; tab-stops: list 72.0pt;" class="MsoNormal"><span style="color: rgb(51, 51, 51); font-family: Symbol; font-size: 10pt; mso-bidi-font-family: Symbol; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: Symbol;" lang="EN-US"><span style="mso-list: Ignore;">·<span style="font: 7pt/normal "Times New Roman"; font-size-adjust: none; font-stretch: normal;"> </span></span></span><span style="color: rgb(51, 51, 51); font-family: "Arial","sans-serif"; font-size: 10.5pt;" lang="EN-US">Select Folder as the Parent Content Type</span><span style="color: rgb(51, 51, 51);" lang="EN-US"><o:p></o:p></span></p><font size="3" face="宋体"> </font><p style="margin: 0cm 0cm 0pt 20.6pt; text-indent: -18pt; vertical-align: middle; mso-list: l0 level2 lfo1; tab-stops: list 72.0pt;" class="MsoNormal"><span style="color: rgb(51, 51, 51); font-family: Symbol; font-size: 10pt; mso-bidi-font-family: Symbol; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: Symbol;" lang="EN-US"><span style="mso-list: Ignore;">·<span style="font: 7pt/normal "Times New Roman"; font-size-adjust: none; font-stretch: normal;"> </span></span></span><span style="color: rgb(51, 51, 51); font-family: "Arial","sans-serif"; font-size: 10.5pt;" lang="EN-US">You can create a new group or leave it in custom content types</span><span style="color: rgb(51, 51, 51);" lang="EN-US"><o:p></o:p></span></p><font size="3" face="宋体"> </font><p style="margin: 0cm 0cm 0pt 20.6pt; text-indent: -18pt; vertical-align: middle; mso-list: l0 level2 lfo1; tab-stops: list 72.0pt;" class="MsoNormal"><span style="color: rgb(51, 51, 51); font-family: Symbol; font-size: 10pt; mso-bidi-font-family: Symbol; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: Symbol;" lang="EN-US"><span style="mso-list: Ignore;">·<span style="font: 7pt/normal "Times New Roman"; font-size-adjust: none; font-stretch: normal;"> </span></span></span><span style="color: rgb(51, 51, 51); font-family: "Arial","sans-serif"; font-size: 10.5pt;" lang="EN-US">Click OK</span><span style="color: rgb(51, 51, 51);" lang="EN-US"><o:p></o:p></span></p><font size="3" face="宋体"> </font><p style="margin: 0cm 0cm 0pt 20.6pt; text-indent: -18pt; vertical-align: middle; mso-list: l0 level2 lfo1; tab-stops: list 72.0pt;" class="MsoNormal"><span style="color: rgb(51, 51, 51); font-family: Symbol; font-size: 10pt; mso-bidi-font-family: Symbol; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: Symbol;" lang="EN-US"><span style="mso-list: Ignore;">·<span style="font: 7pt/normal "Times New Roman"; font-size-adjust: none; font-stretch: normal;"> </span></span></span><span style="color: rgb(51, 51, 51); font-family: "Arial","sans-serif"; font-size: 10.5pt;" lang="EN-US">At the content type settings click Add from new site column</span><span style="color: rgb(51, 51, 51);" lang="EN-US"><o:p></o:p></span></p><font size="3" face="宋体"> </font><p style="margin: 0cm 0cm 0pt 20.6pt; text-indent: -18pt; vertical-align: middle; mso-list: l0 level2 lfo1; tab-stops: list 72.0pt;" class="MsoNormal"><span style="color: rgb(51, 51, 51); font-family: Symbol; font-size: 10pt; mso-bidi-font-family: Symbol; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: Symbol;" lang="EN-US"><span style="mso-list: Ignore;">·<span style="font: 7pt/normal "Times New Roman"; font-size-adjust: none; font-stretch: normal;"> </span></span></span><span style="color: rgb(51, 51, 51); font-family: "Arial","sans-serif"; font-size: 10.5pt;" lang="EN-US">Create a site column called Item Order or something similar, select the type as Number</span><span style="color: rgb(51, 51, 51);" lang="EN-US"><o:p></o:p></span></p><font size="3" face="宋体"> </font><p style="margin: 0cm 0cm 0pt 20.6pt; text-indent: -18pt; vertical-align: middle; mso-list: l0 level2 lfo1; tab-stops: list 72.0pt;" class="MsoNormal"><span style="color: rgb(51, 51, 51); font-family: Symbol; font-size: 10pt; mso-bidi-font-family: Symbol; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: Symbol;" lang="EN-US"><span style="mso-list: Ignore;">·<span style="font: 7pt/normal "Times New Roman"; font-size-adjust: none; font-stretch: normal;"> </span></span></span><span style="color: rgb(51, 51, 51); font-family: "Arial","sans-serif"; font-size: 10.5pt;" lang="EN-US">Click OK</span><span style="color: rgb(51, 51, 51);" lang="EN-US"><o:p></o:p></span></p><font size="3" face="宋体"> </font><p style="margin: 0cm 0cm 0pt 20.6pt; text-indent: -18pt; vertical-align: middle; mso-list: l0 level2 lfo1; tab-stops: list 72.0pt;" class="MsoNormal"><span style="color: rgb(51, 51, 51); font-family: Symbol; font-size: 10pt; mso-bidi-font-family: Symbol; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: Symbol;" lang="EN-US"><span style="mso-list: Ignore;">·<span style="font: 7pt/normal "Times New Roman"; font-size-adjust: none; font-stretch: normal;"> </span></span></span><span style="color: rgb(51, 51, 51); font-family: "Arial","sans-serif"; font-size: 10.5pt;" lang="EN-US">Go to the list where you want the folders to be ordered</span><span style="color: rgb(51, 51, 51);" lang="EN-US"><o:p></o:p></span></p><font size="3" face="宋体"> </font><p style="margin: 0cm 0cm 0pt 20.6pt; text-indent: -18pt; vertical-align: middle; mso-list: l0 level2 lfo1; tab-stops: list 72.0pt;" class="MsoNormal"><span style="color: rgb(51, 51, 51); font-family: Symbol; font-size: 10pt; mso-bidi-font-family: Symbol; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: Symbol;" lang="EN-US"><span style="mso-list: Ignore;">·<span style="font: 7pt/normal "Times New Roman"; font-size-adjust: none; font-stretch: normal;"> </span></span></span><span style="color: rgb(51, 51, 51); font-family: "Arial","sans-serif"; font-size: 10.5pt;" lang="EN-US">Go to the list settings</span><span style="color: rgb(51, 51, 51);" lang="EN-US"><o:p></o:p></span></p><font size="3" face="宋体"> </font><p style="margin: 0cm 0cm 0pt 20.6pt; text-indent: -18pt; vertical-align: middle; mso-list: l0 level2 lfo1; tab-stops: list 72.0pt;" class="MsoNormal"><span style="color: rgb(51, 51, 51); font-family: Symbol; font-size: 10pt; mso-bidi-font-family: Symbol; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: Symbol;" lang="EN-US"><span style="mso-list: Ignore;">·<span style="font: 7pt/normal "Times New Roman"; font-size-adjust: none; font-stretch: normal;"> </span></span></span><span style="color: rgb(51, 51, 51); font-family: "Arial","sans-serif"; font-size: 10.5pt;" lang="EN-US">Go to Advanced Settings</span><span style="color: rgb(51, 51, 51);" lang="EN-US"><o:p></o:p></span></p><font size="3" face="宋体"> </font><p style="margin: 0cm 0cm 0pt 20.6pt; text-indent: -18pt; vertical-align: middle; mso-list: l0 level2 lfo1; tab-stops: list 72.0pt;" class="MsoNormal"><span style="color: rgb(51, 51, 51); font-family: Symbol; font-size: 10pt; mso-bidi-font-family: Symbol; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: Symbol;" lang="EN-US"><span style="mso-list: Ignore;">·<span style="font: 7pt/normal "Times New Roman"; font-size-adjust: none; font-stretch: normal;"> </span></span></span><span style="color: rgb(51, 51, 51); font-family: "Arial","sans-serif"; font-size: 10.5pt;" lang="EN-US">Select allow management of content types</span><span style="color: rgb(51, 51, 51);" lang="EN-US"><o:p></o:p></span></p><font size="3" face="宋体"> </font><p style="margin: 0cm 0cm 0pt 20.6pt; text-indent: -18pt; vertical-align: middle; mso-list: l0 level2 lfo1; tab-stops: list 72.0pt;" class="MsoNormal"><span style="color: rgb(51, 51, 51); font-family: Symbol; font-size: 10pt; mso-bidi-font-family: Symbol; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: Symbol;" lang="EN-US"><span style="mso-list: Ignore;">·<span style="font: 7pt/normal "Times New Roman"; font-size-adjust: none; font-stretch: normal;"> </span></span></span><span style="color: rgb(51, 51, 51); font-family: "Arial","sans-serif"; font-size: 10.5pt;" lang="EN-US">Select No for display new folder command on the new menu</span><span style="color: rgb(51, 51, 51);" lang="EN-US"><o:p></o:p></span></p><font size="3" face="宋体"> </font><p style="margin: 0cm 0cm 0pt 20.6pt; text-indent: -18pt; vertical-align: middle; mso-list: l0 level2 lfo1; tab-stops: list 72.0pt;" class="MsoNormal"><span style="color: rgb(51, 51, 51); font-family: Symbol; font-size: 10pt; mso-bidi-font-family: Symbol; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: Symbol;" lang="EN-US"><span style="mso-list: Ignore;">·<span style="font: 7pt/normal "Times New Roman"; font-size-adjust: none; font-stretch: normal;"> </span></span></span><span style="color: rgb(51, 51, 51); font-family: "Arial","sans-serif"; font-size: 10.5pt;" lang="EN-US">Click OK</span><span style="color: rgb(51, 51, 51);" lang="EN-US"><o:p></o:p></span></p><font size="3" face="宋体"> </font><p style="margin: 0cm 0cm 0pt 20.6pt; text-indent: -18pt; vertical-align: middle; mso-list: l0 level2 lfo1; tab-stops: list 72.0pt;" class="MsoNormal"><span style="color: rgb(51, 51, 51); font-family: Symbol; font-size: 10pt; mso-bidi-font-family: Symbol; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: Symbol;" lang="EN-US"><span style="mso-list: Ignore;">·<span style="font: 7pt/normal "Times New Roman"; font-size-adjust: none; font-stretch: normal;"> </span></span></span><span style="color: rgb(51, 51, 51); font-family: "Arial","sans-serif"; font-size: 10.5pt;" lang="EN-US">You should now see an area called content types, leave the document as is</span><span style="color: rgb(51, 51, 51);" lang="EN-US"><o:p></o:p></span></p><font size="3" face="宋体"> </font><p style="margin: 0cm 0cm 0pt 20.6pt; text-indent: -18pt; vertical-align: middle; mso-list: l0 level2 lfo1; tab-stops: list 72.0pt;" class="MsoNormal"><span style="color: rgb(51, 51, 51); font-family: Symbol; font-size: 10pt; mso-bidi-font-family: Symbol; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: Symbol;" lang="EN-US"><span style="mso-list: Ignore;">·<span style="font: 7pt/normal "Times New Roman"; font-size-adjust: none; font-stretch: normal;"> </span></span></span><span style="color: rgb(51, 51, 51); font-family: "Arial","sans-serif"; font-size: 10.5pt;" lang="EN-US">Click Add from existing site content types</span><span style="color: rgb(51, 51, 51);" lang="EN-US"><o:p></o:p></span></p><font size="3" face="宋体"> </font><p style="margin: 0cm 0cm 0pt 20.6pt; text-indent: -18pt; vertical-align: middle; mso-list: l0 level2 lfo1; tab-stops: list 72.0pt;" class="MsoNormal"><span style="color: rgb(51, 51, 51); font-family: Symbol; font-size: 10pt; mso-bidi-font-family: Symbol; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: Symbol;" lang="EN-US"><span style="mso-list: Ignore;">·<span style="font: 7pt/normal "Times New Roman"; font-size-adjust: none; font-stretch: normal;"> </span></span></span><span style="color: rgb(51, 51, 51); font-family: "Arial","sans-serif"; font-size: 10.5pt;" lang="EN-US">Select the Folder Order (or whatever you named it)</span><span style="color: rgb(51, 51, 51);" lang="EN-US"><o:p></o:p></span></p><font size="3" face="宋体"> </font><p style="margin: 0cm 0cm 0pt 20.6pt; text-indent: -18pt; vertical-align: middle; mso-list: l0 level2 lfo1; tab-stops: list 72.0pt;" class="MsoNormal"><span style="color: rgb(51, 51, 51); font-family: Symbol; font-size: 10pt; mso-bidi-font-family: Symbol; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: Symbol;" lang="EN-US"><span style="mso-list: Ignore;">·<span style="font: 7pt/normal "Times New Roman"; font-size-adjust: none; font-stretch: normal;"> </span></span></span><span style="color: rgb(51, 51, 51); font-family: "Arial","sans-serif"; font-size: 10.5pt;" lang="EN-US">Click OK</span><span style="color: rgb(51, 51, 51);" lang="EN-US"><o:p></o:p></span></p><font size="3" face="宋体"> </font><br><br><br></div><div id="spnEditorSign"></div><div><br></div><!-- jy5ContentSuffix --><br><br><span title="neteasefooter"><span id="netease_mail_footer"></span></span>SharePointhttp://www.blogger.com/profile/11836813831529789606noreply@blogger.comtag:blogger.com,1999:blog-3888123222103988694.post-72526915252256398612013-05-30T01:32:00.001-04:002013-05-30T01:32:58.002-04:00Create a Custom Action Specific to a List for SharePoint 2013/SharePoint 2010<div style="color: rgb(0, 0, 0); font-family: arial; font-size: 14px;"><p>You can create a custom action that is based on the list type by editing the <code>elements.xml</code> file that is associated with the custom feature. However, you can also create a custom action that is specific to a list rather than a list type. To do this, create a custom feature for the content type and then make a minor modification in the <code>elements.xml</code> file. The following steps demonstrate how to do this.</p><h1 class="heading">Create a custom content type</h1><div id="procedureSection0" class="section"><ol><li><p>Create a custom content type by inheriting from any one of the standard Windows SharePoint Services content types.</p></li><li><p>Ensure that the identifier (ID) of your custom content type has the ID of the base content type (from which it inherits) as its ID prefix.</p><p>The following example XML code shows the <code>elements.xml</code> file for a custom content type that was inherited from the standard Windows SharePoint Services content type, in this case, the List content type.<br><?xml version="1.0" encoding="utf-8" ?><br><Elements xmlns="<a href="http://schemas.microsoft.com/sharepoint/">http://schemas.microsoft.com/sharepoint/</a>"><br> <ContentType ID="0x01AB"<br> Name="MyCustomContentType"<br> Group="MyCustomContentTypeGroup"<br> Description="Customized Content Type"<br> Version="0"><br> <FieldRefs><br> <FieldRef ID="{8c06beca-0777-48f7-91c7-6da68bc07b69}"<br> Name="Created"<br> DisplayName="Field1" /><br> <FieldRef ID="{1df5e554-ec7e-46a6-901d-d85a3881cb18}"<br> Name="Author"<br> DisplayName="Field2" /><br> </FieldRefs><br> </ContentType><br></Elements><br></p><h1 class="heading">Create your custom action</h1><div id="procedureSection1" class="section"><ul><li><p>In the <code>Elements.xml</code> file, create your custom action, as illustrated in the example following.<br><?xml version="1.0" encoding="utf-8" ?><br><Elements xmlns="<a href="http://schemas.microsoft.com/sharepoint/">http://schemas.microsoft.com/sharepoint/</a>"><br><!-- Document Library Toolbar New Menu Dropdown --><br> <CustomAction Id="UserInterfaceLightUp.DocLibNewToolbar"<br> RegistrationType="ContentType"<br> RegistrationId="0x01AB"<br> Rights="ManagePermissions"<br> Location="EditControlBlock"<br> Sequence="1000"<br> Title="MY DOCLIB NEW MENU TOOLBAR BUTTON"><br> <UrlAction Url="/_layouts/LightupHello.aspx?NewMenu"/><br> </CustomAction><br></Elements><br></p><h1 class="heading">Create the list</h1><div id="procedureSection2" class="section"><ol><li><p>Create the list where you want to render the custom action.</p></li><li><p>Change the default content type of the new list to the custom content type that you created above.</p></li><li><p>Delete the Item content type from the list. At this point, the custom action will be rendered in the Edit Control Block menu of the specified list.<br><br><br></p></li></ol></div></li></ul></div></li></ol></div></div><div id="spnEditorSign"></div><div><br></div><!-- jy5ContentSuffix --><br><br><span title="neteasefooter"><span id="netease_mail_footer"></span></span>SharePointhttp://www.blogger.com/profile/11836813831529789606noreply@blogger.comtag:blogger.com,1999:blog-3888123222103988694.post-82290431863479300692013-05-30T00:57:00.001-04:002013-05-30T00:57:03.920-04:00Enable The SharePoint Learning Kit Feature On All Sites In A Site Collection<div style="color: rgb(0, 0, 0); font-family: arial; font-size: 14px;"><p>Sometimes you want to be able to assign work from anywhere within your site collection. For the E-Learning Actions custom action to be added to a document library you need to enable the SharePoint Learning Kit feature on that site, so to enable it everywhere you need to enable the feature on all sites.</p> <p>To do this in SharePoint 2010 all you need is a simple PowerShell script which iterates through all the sites and then enables the feature if it is not already enabled. The following script will do that for you. You will need to change the url value to reference your site collection, save in a .ps1 file and then run from the SharePoint 2010 Management Shell.</p> <div id="codeSnippetWrapper"><pre id="codeSnippet" class="csharpcode">$url = <span class="str">"http://urlOfSiteCollection"</span> $site = Get-SPSite $url $featureId = <span class="str">"00057002-c978-11da-ba52-00042350e42e"</span> $featureName = <span class="str">"SharePointLearningKit"</span> $site.Url<span class="kwrd">foreach</span> ($web <span class="kwrd">in</span> $site.AllWebs) { # Output the site url <span class="kwrd">for</span> debugging purposes $web.Url # Only enable <span class="kwrd">if</span> not already enabled <span class="kwrd">if</span> (!$web.Features[$featureId]) { # Output debugging message <span class="str">"Enabling..."</span> Enable-SPFeature $featureName -Url $web.Url } }</pre></div> <p>You can also use this for other features, just by replacing the feature id and name with the appropriate values. To find these look in</p> <p>C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\FEATURES</p> <p>The feature name is the name of the folder in here and the id is in the feature.xml file in that folder.<br><br><br></p></div><div id="spnEditorSign"></div><div><br></div><!-- jy5ContentSuffix -->SharePointhttp://www.blogger.com/profile/11836813831529789606noreply@blogger.comtag:blogger.com,1999:blog-3888123222103988694.post-8794283505716809772013-05-30T00:55:00.001-04:002013-05-30T00:55:41.336-04:00Using PowerShell to Bulk Upload Files to SharePoint 2013/SharePoint 2010<div style="color: rgb(0, 0, 0); font-family: arial; font-size: 14px;"><p>While building a school's Learning Gateway I needed to bulk upload all their student images into a picture library so that the My Children web part could display them. Since there were several hundred of them I wrote a little PowerShell script to perform this.</p> <div id="codeSnippetWrapper"><pre id="codeSnippet" class="csharpcode">$siteUrl = <span class="str">"http://sharepoint/schools/test" </span>$listName = <span class="str">"Students Picture Library"</span> [system.reflection.assembly]::LoadWithPartialName(<span class="str">"Microsoft.Sharepoint"</span>) $site = New-Object Microsoft.SharePoint.SPSite($siteUrl) $web = $site.OpenWeb()$list = $web.Lists[$listName] $fileCollection = $list.RootFolder.Files $files = get-childItem -Exclude *.ps1 <span class="kwrd">foreach</span> ($file <span class="kwrd">in</span> $files) { $stream = $file.OpenRead() $uploaded = $fileCollection.Add($file.Name, $stream, $TRUE) <span class="str"> "Uploaded "</span> + $file.Name <span class="kwrd">if</span> ($stream) {$stream.Dispose()} } <span class="kwrd">if</span> ($web) {$web.Dispose()} <span class="kwrd">if</span> ($site) {$site.Dispose()}</pre></div> <p>In order to use this:</p> <ol> <li>Save as as .ps1 file in the same folder as the files to upload. </li><li>Change the site url and name of the list at the beginning of the script to your values </li><li>Make sure that only the files to upload and the ps1 file is in the folder </li><li>Open PowerShell using Run As Administrator </li><li>Navigate to the folder </li><li>Run the .ps1 file </li></ol> <p>The script will then iterate through all files in the current folder and upload them to the given list, overwriting them if they already exist.</p></div><!-- jy5ContentSuffix -->SharePointhttp://www.blogger.com/profile/11836813831529789606noreply@blogger.comtag:blogger.com,1999:blog-3888123222103988694.post-74020407028151013882013-04-15T04:50:00.001-04:002013-04-15T04:50:18.780-04:00SharePoint 2010 - Migrate Users with Move-SPUser from one Active Directory to another<div style="line-height:1.7;color:#000000;font-size:14px;font-family:arial"><div style="color: rgb(0, 0, 0); font-family: arial; font-size: 14px;"><span style="font: 14px/19px "Helvetica Neue Light", HelveticaNeue-Light, "Helvetica Neue", Helvetica, Arial, sans-serif; text-align: justify; color: rgb(51, 51, 51); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; background-color: rgb(250, 250, 250); -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" class="Apple-style-span">I recently ran into a scenario where a customer was migrating their Active Directory users to a new domain to reflect a naming change for their company. I was tasked with researching and documenting the steps required to migrate their SharePoint 2010 users.</span><div style="font: 14px/19px "Helvetica Neue Light", HelveticaNeue-Light, "Helvetica Neue", Helvetica, Arial, sans-serif; margin: 0px; padding: 0px; text-align: justify; color: rgb(51, 51, 51); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; background-color: rgb(250, 250, 250); -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"><span class="Apple-style-span"><br></span></div><div style="font: 14px/19px "Helvetica Neue Light", HelveticaNeue-Light, "Helvetica Neue", Helvetica, Arial, sans-serif; margin: 0px; padding: 0px; text-align: justify; color: rgb(51, 51, 51); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; background-color: rgb(250, 250, 250); -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"><span class="Apple-style-span">After reading a few different blogs and some Technet articles I found that it was a pretty simple task using basically one powershell cmdlet - Move-SPUser.</span></div><div style="font: 14px/19px "Helvetica Neue Light", HelveticaNeue-Light, "Helvetica Neue", Helvetica, Arial, sans-serif; margin: 0px; padding: 0px; text-align: justify; color: rgb(51, 51, 51); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; background-color: rgb(250, 250, 250); -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"><span class="Apple-style-span"><br></span></div><div style="font: 14px/19px "Helvetica Neue Light", HelveticaNeue-Light, "Helvetica Neue", Helvetica, Arial, sans-serif; margin: 0px; padding: 0px; text-align: justify; color: rgb(51, 51, 51); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; background-color: rgb(250, 250, 250); -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"><span class="Apple-style-span">List current user in a SP Site:</span></div><div style="font: 14px/19px "Helvetica Neue Light", HelveticaNeue-Light, "Helvetica Neue", Helvetica, Arial, sans-serif; margin: 0px; padding: 0px; text-align: justify; color: rgb(51, 51, 51); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; background-color: rgb(250, 250, 250); -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"><span class="Apple-style-span"><br></span></div><div style="font: 14px/19px "Helvetica Neue Light", HelveticaNeue-Light, "Helvetica Neue", Helvetica, Arial, sans-serif; margin: 0px; padding: 0px; text-align: justify; color: rgb(51, 51, 51); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; background-color: rgb(250, 250, 250); -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"><span class="Apple-style-span">If you want to list the current users who have access to a SharePoint site you can use the following cmdlet:</span></div><div style="font: 14px/19px "Helvetica Neue Light", HelveticaNeue-Light, "Helvetica Neue", Helvetica, Arial, sans-serif; margin: 0px; padding: 0px; text-align: justify; color: rgb(51, 51, 51); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; background-color: rgb(250, 250, 250); -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"><span class="Apple-style-span"><br></span></div><div style="font: 14px/19px "Helvetica Neue Light", HelveticaNeue-Light, "Helvetica Neue", Helvetica, Arial, sans-serif; margin: 0px; padding: 0px; text-align: justify; color: rgb(51, 51, 51); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; background-color: rgb(250, 250, 250); -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"><span class="Apple-style-span">Get-SPUser -Web [URL of SiteName to scope]<url scope="" to="" sitename="" of=""></url></span></div><div style="font: 14px/19px "Helvetica Neue Light", HelveticaNeue-Light, "Helvetica Neue", Helvetica, Arial, sans-serif; margin: 0px; padding: 0px; text-align: justify; color: rgb(51, 51, 51); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; background-color: rgb(250, 250, 250); -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"><span class="Apple-style-span"><br></span></div><div style="font: 14px/19px "Helvetica Neue Light", HelveticaNeue-Light, "Helvetica Neue", Helvetica, Arial, sans-serif; margin: 0px; padding: 0px; text-align: justify; color: rgb(51, 51, 51); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; background-color: rgb(250, 250, 250); -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"><span class="Apple-style-span">This will give you a list of current users/Groups with permissions on the site. You can also find this list in the Content_Database in SQL under the dbo.AllUsers table.</span></div><div style="font: 14px/19px "Helvetica Neue Light", HelveticaNeue-Light, "Helvetica Neue", Helvetica, Arial, sans-serif; margin: 0px; padding: 0px; text-align: justify; color: rgb(51, 51, 51); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; background-color: rgb(250, 250, 250); -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"><span class="Apple-style-span"><br></span></div><div style="font: 14px/19px "Helvetica Neue Light", HelveticaNeue-Light, "Helvetica Neue", Helvetica, Arial, sans-serif; margin: 0px; padding: 0px; text-align: justify; color: rgb(51, 51, 51); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; background-color: rgb(250, 250, 250); -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"><span class="Apple-style-span">The first thing I always do before making any changes is a backup of the Sharepoint Site Collection - see</span><a style="color: rgb(0, 158, 184); font-family: "Helvetica Neue Light", HelveticaNeue-Light, "Helvetica Neue", Helvetica, Arial, sans-serif; text-decoration: none; display: inline; transition: color 0.3s; -webkit-transition: color 0.3s;" href="http://technet.microsoft.com/en-us/library/ee748617.aspx#section2">http://technet.microsoft.com/en-us/library/ee748617.aspx#section2</a>.</div><div style="font: 14px/19px "Helvetica Neue Light", HelveticaNeue-Light, "Helvetica Neue", Helvetica, Arial, sans-serif; margin: 0px; padding: 0px; text-align: justify; color: rgb(51, 51, 51); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; background-color: rgb(250, 250, 250); -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"><br></div><div style="font: 14px/19px "Helvetica Neue Light", HelveticaNeue-Light, "Helvetica Neue", Helvetica, Arial, sans-serif; margin: 0px; padding: 0px; text-align: justify; color: rgb(51, 51, 51); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; background-color: rgb(250, 250, 250); -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">Once the backup is complete you can start migrating your users: Depending on the authentication method your site users E.g. Claims or Classic NTLM you will need to adjust the username.</div><div style="font: 14px/19px "Helvetica Neue Light", HelveticaNeue-Light, "Helvetica Neue", Helvetica, Arial, sans-serif; margin: 0px; padding: 0px; text-align: justify; color: rgb(51, 51, 51); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; background-color: rgb(250, 250, 250); -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"><br></div><div style="font: 14px/19px "Helvetica Neue Light", HelveticaNeue-Light, "Helvetica Neue", Helvetica, Arial, sans-serif; margin: 0px; padding: 0px; text-align: justify; color: rgb(51, 51, 51); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; background-color: rgb(250, 250, 250); -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">To migrate the users to the new domain:</div><div style="font: 14px/19px "Helvetica Neue Light", HelveticaNeue-Light, "Helvetica Neue", Helvetica, Arial, sans-serif; margin: 0px; padding: 0px; text-align: justify; color: rgb(51, 51, 51); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; background-color: rgb(250, 250, 250); -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"><br></div><div style="font: 14px/19px "Helvetica Neue Light", HelveticaNeue-Light, "Helvetica Neue", Helvetica, Arial, sans-serif; margin: 0px; padding: 0px; text-align: justify; color: rgb(51, 51, 51); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; background-color: rgb(250, 250, 250); -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"><div style="margin: 0px; padding: 0px;"><br></div><div style="margin: 0px; padding: 0px;">(Note for Claims based you woud enter username format as :i:0#.w|domain\user)</div><div style="margin: 0px; padding: 0px;"><br></div><div style="margin: 0px; padding: 0px;">$user = Get-SPUser -web http://my.website.url -Identity DomainA\UserA</div><div style="margin: 0px; padding: 0px;">Move-SPUser -IgnoreSID -Identity $user -NewAlias 'DomainB\UserA'</div></div><div style="font: 14px/19px "Helvetica Neue Light", HelveticaNeue-Light, "Helvetica Neue", Helvetica, Arial, sans-serif; margin: 0px; padding: 0px; text-align: justify; color: rgb(51, 51, 51); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; background-color: rgb(250, 250, 250); -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;"><br></div><div style="font: 14px/19px "Helvetica Neue Light", HelveticaNeue-Light, "Helvetica Neue", Helvetica, Arial, sans-serif; margin: 0px; padding: 0px; text-align: justify; color: rgb(51, 51, 51); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; background-color: rgb(250, 250, 250); -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">Currently this does user by user but you can write this up with a CSV as well and import the list. I am working on that script now for my company and will post when it is complete.</div><br><br><br><br><br><br><div id="spnEditorSign"></div><br></div><span style="display: none;" id="jy5ContentSuffix"></span></div><br><br><span title="neteasefooter"><span id="netease_mail_footer"></span></span>SharePointhttp://www.blogger.com/profile/11836813831529789606noreply@blogger.comtag:blogger.com,1999:blog-3888123222103988694.post-30966087278304745882013-04-09T03:06:00.001-04:002013-04-09T03:06:52.365-04:00SharePoint 2013 Standard vs. Enterprise vs. Foundation Feature Comparison Matrix<div style="line-height:1.7;color:#000000;font-size:14px;font-family:arial"><div style="color: rgb(0, 0, 0); font-family: arial; font-size: 14px;"> <table style="font-size: 8pt; border-collapse: collapse;" border="0" cellSpacing="0" cellPadding="0" width="754"> <colgroup> <col style="width: 281pt;" width="374"> <col style="width: 486pt;" width="648"> <col style="width: 65pt;" width="87"> <col style="width: 53pt;" width="70"> <col style="width: 59pt;" width="79"></colgroup> <tbody> <tr style="height: 15.75pt;" height="21"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; background-color: rgb(47, 117, 181);" class="xl71" height="21" width="151"><font color="#ffffff"><strong>SharePoint 2013 Feature</strong></font></td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; background-color: rgb(47, 117, 181);" class="xl71" width="419"><font color="#ffffff"><strong>Description</strong></font></td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; background-color: rgb(47, 117, 181);" class="xl71" width="66"><font color="#ffffff"><strong>Foundation</strong></font></td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; background-color: rgb(47, 117, 181);" class="xl71" width="55"><font color="#ffffff"><strong>Standard</strong></font></td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; background-color: rgb(47, 117, 181);" class="xl71" width="61"><font color="#ffffff"><strong>Enterprise</strong></font></td></tr> <tr style="height: 15.75pt;" height="21"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; background-color: rgb(165, 165, 165);" class="xl68" height="21" width="151"><strong>Developer</strong></td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; background-color: rgb(165, 165, 165);" class="xl66" width="419"> </td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; background-color: rgb(165, 165, 165);" class="xl66" width="66"> </td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; background-color: rgb(165, 165, 165);" class="xl66" width="55"> </td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; background-color: rgb(165, 165, 165);" class="xl66" width="61"> </td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Access Services</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Build web databases and publish them to a SharePoint site. SharePoint visitors can use your database application in a web browser by using SharePoint permissions to determine who can see what. And you can start with a template so that you can start collaborating immediately.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; text-underline-style: none; text-line-through: none;" class="xl65" width="55">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">App Catalog (SharePoint)</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Publish your apps to an internal corporate catalog, hosted on your SharePoint deployment, to make them available to users who have access to that SharePoint deployment. Learn more about publishing apps for Office and SharePoint.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 60pt;" height="80"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="80" width="151"><font color="#a5a5a5">App Deployment: Autohosted Apps</font></td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419"><font color="#a5a5a5">Autohosted Apps are installed to a host web on the customer's SharePoint Online tenancy, with components automatically installed into a Windows Azure website account. The Windows Azure Web Sites infrastructure manages isolation of tenancies. Learn more about hosting options for apps for SharePoint.</font></td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66"><font color="#a5a5a5">No</font></td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; text-underline-style: none; text-line-through: none;" class="xl65" width="55"><font color="#a5a5a5">No</font></td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; text-underline-style: none; text-line-through: none;" class="xl65" width="61"><font color="#a5a5a5">No</font></td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">App Deployment: Cloud-Hosted Apps</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Cloud-hosted apps for SharePoint includes at least one remote component and may also include SharePoint-hosted components. Cloud-hosted apps include both autohosted and provider-hosted apps. Learn more about hosting options for apps for SharePoint.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">App Deployment: SharePoint-Hosted Apps</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">SharePoint-Hosted Apps allow you to reuse common SharePoint artifacts, such as lists and Web Parts. When you take this approach, you can use only JavaScript and you cannot use any server-side code. Learn more about hosting options for apps for SharePoint.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 30pt;" height="40"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="40" width="151">App Management Services</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">The App Management Service database stores licensing information for all of the apps for SharePoint.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">BCS: Alerts for External Lists</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">SharePoint now provides the capability of using alerts for external lists, just as they have been used for traditional lists. A user can subscribe to be alerted when data changes on an external list. Learn more about external events and alerts in SharePoint 2013.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 60pt;" height="80"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="80" width="151">BCS: App Scoped External Content Types (ECTs)</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">With the addition of the new App model in SharePoint, Business Connectivity Services (BCS) can now scope external content types at the App level instead of at the farm level. This gives great flexibility to App developers by allowing them to use external data inside their Apps. Learn more about app-scoped external content types.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">BCS: Business Data Webparts</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Business Data Webparts are special web parts that work with external data. They are used like standard SharePoint web parts, but are based on external content types, which are XML descriptions of connections to the external data.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">BCS: External List</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">An external list is a special kind of SharePoint list that displays data from an external data source. It is built on an external content type that describes the data source, and allows users to work with the data in a familiar SharePoint interface. Learn more about external content types.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">BCS: OData connector</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">The OData connector is new for SharePoint. It allows for Business Connectivity Services (BCS) to use a RESTful OData endpoint as a data source for external lists, Business Data WebParts, and custom user interfaces.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">BCS: Profile Pages</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Not available to SharePoint Online customers. Business Connectivity Services (BCS) provides a special WebParts page called Profile pages. Profile pages allows for BCS to display details of the external data in addition to its related external content types.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 60pt;" height="80"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="80" width="151">BCS: Rich Client Integration</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Not available to SharePoint Online customers. Business Connectivity Services (BCS) uses a complimentary client and server-side architecture that allows for Office clients, such as Outlook and Excel, to work directly with external data exposed to SharePoint through external content types. Learn more about Business Connectivity Services Client Runtime.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; text-underline-style: none; text-line-through: none;" class="xl65" width="55">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">BCS: Secure Store Service</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">The Secure Store provides single sign on capabilities to Business Connectivity Services (BCS). Using Secure Store, SharePoint Administrators can map user account credentials to external system account credentials so that data can be secured. Learn more about Secure Store Service.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 30pt;" height="40"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="40" width="151">BCS: Tenant-level external data log</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Tenant-level external data logging allows for logging of transactions that affect specific SharePoint tenancies.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; text-underline-style: none; text-line-through: none;" class="xl65" width="55">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 60pt;" height="80"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="80" width="151">Browser-based customizations</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">You can customize your site without any special tools or coding expertise just by using the site settings. For example, you can change the look, title, and logo, change the navigation links, change the contents of a page, or change the appearance of views for lists and libraries. Learn more about customizing sites.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Client Object Model (OM)</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">SharePoint 2013 has three client object models for managed code: .NET, Silverlight, and mobile. In addition, SharePoint includes a JavaScript client object model. Learn more about choosing the right API set in SharePoint 2013.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Client-side rendering (CSR)</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Client-side rendering provides a mechanism that you can use to produce your own output for a set of controls that are hosted in a SharePoint page. Learn more about customizing a field type using client-side rendering.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Custom Site Definitions</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Not available to SharePoint Online customers. SharePoint Server 2013 customers can create their own site definitions that customize and extend standard SharePoint site templates. Learn more about creating custom site definitions.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; text-underline-style: none; text-line-through: none;" class="xl65" width="55">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 30pt;" height="40"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="40" width="151">Custom Site Provisioning</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Not available to SharePoint Online customers. SharePoint Server 2013 customers get a quick and easy way for users to make their site requests and to start using their sites quickly.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; text-underline-style: none; text-line-through: none;" class="xl65" width="55">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Developer Site</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Use an Office 365 Developer Site as a development and testing environment to shorten your setup time and start creating, testing, and deploying your apps for SharePoint. Learn more about signing up for an Office 365 Developer Site.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; text-underline-style: none; text-line-through: none;" class="xl65" width="55">No although On Prem has it's own Developer Site Template</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; text-underline-style: none; text-line-through: none;" class="xl65" width="61">No although On Prem has it's own Developer Site Template</td></tr> <tr style="height: 30pt;" height="40"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="40" width="151">Forms Based Applications</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">A form view is basically a view that contains controls. A Forms Based Application lets the user create and use one or more forms within the application. Learn more about Forms Based Applications.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Forms on Spreadsheets</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Forms on Spreadsheets is a lightweight survey tool built on top of the Excel Web App—authenticated or anonymous users can complete the form on internal or public websites, and the data from all users is aggregated into a single private and secured workbook in SharePoint.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 105pt;" height="140"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="140" width="151">Full-Trust Solutions</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Not available to SharePoint Online customers. SharePoint Server 2013 customers can create full-trust solutions. Also called farm solutions. Unlike apps for SharePoint, farm solutions contain code that is deployed to the SharePoint servers and makes calls to SharePoint's server object model. These assemblies always run with full trust. Farm solutions should be used for customizations of SharePoint administrative functions, such as custom timer jobs, custom Windows PowerShell cmdlets, and extensions of Central Administration. Learn more about building farm solutions in SharePoint 2013.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 30pt;" height="40"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="40" width="151">InfoPath Forms Services</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Forms Service provides a Web browser form-filling experience in SharePoint, based on form templates that are designed in InfoPath. Learn more about InfoPath Forms Services.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; text-underline-style: none; text-line-through: none;" class="xl65" width="55">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 75pt;" height="100"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="100" width="151">JavaScript Object Model</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">SharePoint provides a JavaScript object model for use in either inline script or separate .js files. It includes all the same functionality as the .NET Framework and Silverlight client object models. The JavaScript object model is a useful way to include custom SharePoint code in an app. It also enables web developers to use their existing JavaScript skills to create SharePoint applications with minimal learning curve. Learn more about JavaScript API reference for SharePoint 2013.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 30pt;" height="40"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="40" width="151">List and Library APIs</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">SharePoint provides Aps for accessing list and library data in the server object model, managed and JavaScript client object models, and the REST web service.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Remote Event Receiver</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">To handle events in an app for SharePoint, developers can create remote event receivers and app event receivers. Remote event receivers handle events that occur to an item in the app, such as a list, a list item, or a web. Learn more about handling events in apps for SharePoint.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 75pt;" height="100"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="100" width="151">REST API</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">SharePoint 2013 provides an implementation of a Representational State Transfer (REST) web service that uses the OData protocol to perform CRUD operations on SharePoint list data. Use this when you must access SharePoint data from client technologies that do not use JavaScript and are not built on the .NET Framework or Microsoft Silverlight platforms. Learn more about programming using the SharePoint 2013 REST service.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Sandboxed Solutions</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">A sandboxed solution, compared to a farm solution, enables site collection administrators to install custom solutions in SharePoint Foundation without the involvement of a higher-level administrator. Learn more about Sandboxed Solutions in SharePoint.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">SharePoint Design Manager</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">The Design Manager enables a step-by-step approach for creating design assets that you can use to brand sites. Upload design assets—images, HTML, CSS, and so on—and then create your master pages and page layouts. Learn more about SharePoint 2013 site development.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 30pt;" height="40"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="40" width="151">SharePoint Designer</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Using SharePoint Designer, advanced users and developers can quicky create SharePoint solutions in response to business needs. Learn more about SharePoint Designer for developers.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">SharePoint Store</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">The SharePoint Store provides a convenient location for developers to upload new app solutions that are aimed both at consumers and businesses. Learn more about publishing apps for Office and SharePoint.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 30pt;" height="40"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="40" width="151">Workflow 2010 (.NET 3.5)</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">SharePoint legacy workflow functionality, compatible with .NET 3.5. Learn more about workflows in SharePoint Foundation.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 15.75pt;" height="21"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="21" width="151">Workflow 2010 (out of the box)</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Use out of the box workflows included with SharePoint to model common business processes.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 60pt;" height="80"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="80" width="151">Workflow 2013</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">SharePoint 2013 workflows are powered by Windows Workflow Foundation 4 (WF), which was significantly redesigned from earlier versions. Perhaps the most prominent feature of the new workflow infrastructure is the introduction of Windows Azure as the new workflow execution host. Learn more about what's new in workflows for SharePoint 2013.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Workload API: ECM APIs</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Extend SharePoint enterprise content management capabilities using the Search APIs available in the server, .NET client, and JavaScript object modelsand REST service. Learn more about SharePoint 2013 Sites and Content server class library.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Workload API: Search APIs</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Extend SharePoint search capabilities using the Search APIs available in the server, .NET client, and JavaScript object modelsand REST service. Learn more about SharePoint 2013 Search server class library.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Workload API: Social APIs</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Extend SharePoint social capabilities using the Social APIs available in the server, .NET client, and JavaScript object modelsand REST service. Learn more about SharePoint 2013 Social server class library.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 15.75pt;" height="21"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; background-color: rgb(165, 165, 165);" class="xl68" height="21" width="151"><strong>IT Pro</strong></td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; background-color: rgb(165, 165, 165);" class="xl66" width="419"> </td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; background-color: rgb(165, 165, 165);" class="xl66" width="66"> </td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; background-color: rgb(165, 165, 165);" class="xl66" width="55"> </td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; background-color: rgb(165, 165, 165);" class="xl66" width="61"> </td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Active Directory Synchronization</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">If your company has existing users in a local Active Directory environment, there are tools for synchronizing those users to your Office 365 for enterprise directory. The Office 365 directory then feeds the SharePoint Online user profile. Learn more about Active Directory Synchronization.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Alternate Access Mapping (AAM)</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Not available to SharePoint Online customers. SharePoint Server 2013 customers can configure alternate access mapping to map requests where the URL of a Web request received by Internet Information Services (IIS) differs from the URL that was typed by a user.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 60pt;" height="80"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="80" width="151">Analytics Platform</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Not available to SharePoint Online customers. SharePoint Server 2013 customers can use the Analytics Platform, which replaces the Web Analytics service application, to help identify and surface the content that users consider to be the most useful and relevant. Learn more about Analytics Platform.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; text-underline-style: none; text-line-through: none;" class="xl65" width="55">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Claims-Based Authentication Support</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Not available to SharePoint Online customers. SharePoint Server 2013 customers configure claims-based authentication for web applications that support SharePoint Server 2013 server-to-server authentication and app authentication. Learn more about claims-based authentication.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 60pt;" height="80"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="80" width="151">Configuration Wizards</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Not available to SharePoint Online customers. SharePoint Server 2013 customers can use the Farm Configuration Wizard to configure some SharePoint Server 2013 services automatically. Or they can configure services manually, which gives greater flexibility in designing a logical architecture. Learn more about the Farm Configuration Wizard.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Deferred Site Collection upgrade</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Site owners can perform their own self-service upgrades to their sites, when it is most convenient for them. SharePoint Online also provides new features to support upgrade, such as the health checker and evaluation site collections. Learn more about Site Collection upgrade.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 60pt;" height="80"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="80" width="151">Distributed Cache</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Not available to SharePoint Online customers. SharePoint Server 2013 customers can use the Distributed Cache service to cache feature functionality, which improves authentication, newsfeed, OneNote client access, security trimming, and page load performance. Learn more about Distributed Cache.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Host Header Site Collections</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Not available to SharePoint Online customers. SharePoint Server 2013 site collections can have their own unique host header. Creating a host-named site collection enables organizations' to hose multiple site collections with vanity URLs, which are easier for people to remember.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 15.75pt;" height="21"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="21" width="151">Improved Permissions Management</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Three key security elements work together to control user access to sites and site content:</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 60pt;" height="80"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="80" width="151">Improved Self-Service Site Creation</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">SharePoint Server 2013 customers can use self-service site creation to configure things such as: whether to use a custom form to create the site, whether to create a subweb or site collection, what path should be used when the site collection is created, and whether to ask or require that a site policy be selected when the site is created.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; text-underline-style: none; text-line-through: none;" class="xl65" width="55">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 60pt;" height="80"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="80" width="151">Managed Accounts</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Not available to SharePoint Online customers. SharePoint Server 2013 system administrators can use a Managed Account, an Active Directory user account whose credentials are managed by and contained within SharePoint, to easily manage administrative tasks. That way the fate of your organization's deployment does not rest on just one person's account.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 60pt;" height="80"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="80" width="151">Minimal Download Strategy (MDS)</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">The minimal download strategy will use a single .aspx file (start.aspx) for your pages, with the actual URL encoded in the text following the hashmark ('#'). When moving from page to page, only the changes between two compatible pages will be downloaded. Fewer bytes will be downloaded and the pages will appear more quickly.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 60pt;" height="80"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="80" width="151">OAuth</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Oauth is an Internet protocol for creating and managing app identity. Oauth allows for app identity to be recognized apart from user identity. This cross-platform mechanism means apps can be granted more permissions than the current user has. Learn more about server-to-server authentication.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 60pt;" height="80"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="80" width="151">Patch Management</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Not available to SharePoint Online customers. SharePoint Server 2013 updates will be released by using a two-step phase process: patching and upgrading. During the patching steps, new binary files are copied to the Central Administration server. Any services that are using files that have to be replaced are temporarily stopped. There are some instances when a server must be restarted.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 75pt;" height="100"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="100" width="151">Quota Templates</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Not available to SharePoint Online customers. A quota template consists of storage limit values that specify the maximum amount of data that can be stored in a site collection. When the storage limit is reached, a quota template can also trigger an email alert to the site collection administrator. SharePoint Online administrators and SharePoint Server 2013 farm administrators can create a quota template that can be applied to any site collection.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 30pt;" height="40"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="40" width="151">Read-Only Database Support</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Not available to SharePoint Online customers. SharePoint Server 2013 administrators can set content databases to be read-only.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 60pt;" height="80"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="80" width="151">Remote Blob Storage</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Not available to SharePoint Online customers. Remote BLOB Storage (RBS) is an add-on feature pack for Microsoft SQL Server. RBS is designed to move the storage of binary large objects (BLOBs) from database servers to commodity storage solutions. If the content databases in Microsoft SharePoint Server 2013 are 4 gigabytes (GB) or larger, consider using RBS as part of your data storage solution.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 30pt;" height="40"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="40" width="151">Request Management</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Not available to SharePoint Online customers. SharePoint Server 2013 administrators can define rules, by using Request Manager, to do request routing and throttling to improve performance.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Request throttling</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Not available to SharePoint Online customers. Request throttling provides SharePoint Server 2013 administrators with options for throttling HTTP requests when front-end web servers become too busy to handle all the incoming requests.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 60pt;" height="80"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="80" width="151">Resource throttling</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Not available to SharePoint Online customers. Resource throttling provides SharePoint Server 2013 administrators with options for monitoring and throttling server resources and large lists for Web applications. Resource throttling can monitor such resources as CPU, memory, and Wait Time, checking resources every 5 seconds.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 105pt;" height="140"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="140" width="151">Service Application Platform</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">SharePoint services can be individually consumed from any Web application. This platform provides the flexibility needed to use services, depending on application needs. Web Analytics is no longer a service application. Analyses and reporting processes were incorporated into the Search service application. Office Web Apps is no longer a service application. Office Web Apps Server is now a separate server product. Depending on what Office 365 plan your organization subscribes to, Office Web Apps may be available to SharePoint Online customers. Learn more about SharePoint service applications.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 75pt;" height="100"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="100" width="151">SharePoint Health Analyzer</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Not available to SharePoint Online customers. New for SharePoint Server 2013, site collection pre-upgrade health check examines a site collection and then generates a report listing ay potential upgrade issues and how to address the issues. For example, if a file has been customized, it will be flagged, so your organization can identify the custom file and reset it to the default template if the site definition, if you want.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 75pt;" height="100"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl72" height="100" width="151"><font color="#a5a5a5">SharePoint Online Admin Center</font></td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl73" width="419"><font color="#a5a5a5">The Microsoft SharePoint Online Administration Center, available to certain SharePoint Online customers only, enables administrators to manage features such as the following: Site collections, InfoPath forms,User Profiles,Business Connectivity Services (BCS),Managed metadata and the Term Store,Records management,Search,Secure Store,Apps for SharePoint,External sharing,Information Rights Management,Self-service site creation</font></td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl73" width="66"><font color="#a5a5a5">N/A</font></td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl73" width="55"><font color="#a5a5a5">N/A</font></td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl73" width="61"><font color="#a5a5a5">N/A</font></td></tr> <tr style="height: 90pt;" height="120"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="120" width="151">Shredded Storage</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Not available to SharePoint Online customers. Shredded storage is essentially the chunking of data—only differences are saved. That means if versioning is enabled and someone makes a change to a document, only changes "shreds" are added to the storage footprint of that document. Shredded storage improves I/O performance by reducing how much information retrieved by the web server from the content database. Shredded storage removes duplicate files, and improves data transmission speed.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 75pt;" height="100"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="100" width="151">Site Collection Compliance Policies</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">A site collection policy can be created in the Site Collection Policies list for the top-level site in a site collection. After a site collection policy is created, it can be exported so that site administrators of other site collections can import it into their Site Collection Policies list. Creating an exportable site collection policy enables SharePoint administrators to standardize the information management policies across the sites in an organization.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Site Collection Health Checks</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Site collection owners or administrators can use the site collection health checker to detect issues with their site collections and address them before upgrading the sites to the new version. Learn more about Site Collection Health Checks.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 30pt;" height="40"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="40" width="151">State Service</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Not available to SharePoint Online customers. The State Service allows SharePoint Server 2013 customers to check whether all services in their farm are configured correctly.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 30pt;" height="40"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="40" width="151">Streamlined Central Administration</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Not available to SharePoint Online customers. SharePoint Server 2013 administrators can use Central Administration to perform administrative tasks from a single location.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">System Status Notifications</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Not available to SharePoint Online customers. SharePoint Server 2013 site collection owners will receive an email message and a status bar notification in a site collection when an upgrade is available.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 30pt;" height="40"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="40" width="151">Unattached Content Database Recovery</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Not available to SharePoint Online customers. SharePoint Server 2013 customers can recover content from an unattached content database by using Central Administration.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 90pt;" height="120"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="120" width="151">Upgrade evaluation site collections</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Not available to SharePoint Online customers. A key benefit of separating the process of upgrading software and data from upgrading sites is that it allows site owners or administrators to run sites in SharePoint 2010 mode until the sites are ready to be upgraded to the latest version. In preparation for upgrading the site, site owners or administrators can request an evaluation site collection, which is a copy of the site, for review purposes. Evaluation sites are set to automatically expire and be deleted.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Usage Reporting and Logging</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Not available to SharePoint Online customers. SharePoint Server 2013 administrators use audit log reports to view the data in the audit logs for a site collection. Learn more about Site Collection audit logs.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 60pt;" height="80"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="80" width="151">Windows PowerShell Support</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">SharePoint Online administrators can use SharePoint Online Windows PowerShell cmdlets to script and automate administrative tasks for their subscription, such as the following: Site creation,Evaluation for site upgrade,Site upgrade,Adding and removing SharePoint users and groups,Site repair,Recycle bin management</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 15.75pt;" height="21"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; background-color: rgb(165, 165, 165);" class="xl69" height="21" width="151"><strong>Content</strong></td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; background-color: rgb(165, 165, 165);" class="xl66" width="419"> </td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; background-color: rgb(165, 165, 165);" class="xl66" width="66"> </td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; background-color: rgb(165, 165, 165);" class="xl66" width="55"> </td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; background-color: rgb(165, 165, 165);" class="xl66" width="61"> </td></tr> <tr style="height: 60pt;" height="80"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="80" width="151">Accessibility Standards Support</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Most SharePoint user interface (UI) elements, such as links, form controls, and buttons are designed to use Microsoft Active Accessibility (MSAA). MSA enables people with disabilities to interact with content by using assistive technologies, such as a screen reader. Learn more about Accessibility features.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 30pt;" height="40"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="40" width="151">Asset Library Enhancements/Video Support</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">An Asset Library is pre-configured to use special features that help users manage rich media assets, such as image, audio, and video files. Learn more about Asset Library.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Auditing</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">SharePoint Online site collection administrators can use the audit feature to track which users have taken what actions on the sites, content types, lists, libraries, lit items, and library files of site collections. Learn more about configuring audit settings for a site collection.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Auditing & Reporting (e.g. doc edits, policy edits, deletes)</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">SharePoint Online site collection administrators can use the audit feature to track which users have taken what actions on the sites, content types, lists, libraries, and list items of site collections. Learn more about configuring audit settings for a site collection.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 30pt;" height="40"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="40" width="151">Auditing of View Events</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Not available to SharePoint Online customers. SharePoint Server 2013 customers who deploy on-premises can track and log when someone views a document.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 60pt;" height="80"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="80" width="151">Content Organizer</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">The Content Organizer acts as a gatekeeper for documents. You can automatically manage some important library tasks, such as managing folder sizes and routing documents to different libraries or folders. This not only saves time, but can help make sure that a document library is managed consistently. Learn more about Content Organizer.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Design Manager</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Design Manager lets organizations change master pages, page layouts, mobile views, and more. This feature is especially useful for advanced site design and branding to your public-facing website or your internal site collection or portal. Learn more about site development.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Document Sets</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Document sets let users store, act on, export, and add a description to multiple files as a single entity. Policies, tagging, and templates can be applied to any document set that is created. Learn more about Document Sets.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 30pt;" height="40"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="40" width="151">Document Translation in Word Web App</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">In Reading View, Word Web App now features an option to let organizations translate their documents directly in the browser. Even document comments are translated.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 60pt;" height="80"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="80" width="151">eDiscovery</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Electronic Discovery, or eDiscovery, features allow organizations to identify, hold, search, and export content from Exchange mailboxes, SharePoint sites, and file shares to support case management in addition to preservation and compliance. Learn more about planning and managing eDiscovery cases.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; text-underline-style: none; text-line-through: none;" class="xl65" width="55">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 60pt;" height="80"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="80" width="151"><font color="#a5a5a5">External Sharing: External Access</font></td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419"><font color="#a5a5a5">If your organization performs work that involves sharing documents or collaborating directly with vendors, clients, or customers, then you might want to use your SharePoint Online sites to share content with people outside your organization who do not have licenses for your organization's Microsoft Office 365 subscription. Learn more about external sharing.</font></td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66"><font color="#a5a5a5">No</font></td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; text-underline-style: none; text-line-through: none;" class="xl65" width="55"><font color="#a5a5a5">No</font></td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; text-underline-style: none; text-line-through: none;" class="xl65" width="61"><font color="#a5a5a5">No</font></td></tr> <tr style="height: 60pt;" height="80"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="80" width="151"><font color="#a5a5a5">External Sharing: Guest Link</font></td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419"><font color="#a5a5a5">When a site is shared in SharePoint Online, an email message is sent to the external user containing the invitation to join the site. Invitations can be sent to people with any type of email address, such as *.gmail.com, *contoso.com, or *Comcast.net. However, to sign in to the site, the email address has to be associated with a Microsoft account. Learn more about sharing a site with external users.</font></td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66"><font color="#a5a5a5">No</font></td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; text-underline-style: none; text-line-through: none;" class="xl65" width="55"><font color="#a5a5a5">No</font></td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; text-underline-style: none; text-line-through: none;" class="xl65" width="61"><font color="#a5a5a5">No</font></td></tr> <tr style="height: 60pt;" height="80"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="80" width="151">Folder Sync</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Users can sync a SharePoint library to their computers, and then work with those files in the library by using File Explorer. Updates to files sync to SharePoint when users are online. SkyDrive Pro or a document library on a team site can be synched. Learn more about syncing a library to your computer.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Information Rights Management (IRM)</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">SharePoint Online IRM uses Windows Azure Active Directory Rights Management Services (RMS), an information protection technology in Office 365. IRM protection is applied to files at the SharePoint list and library levels. Learn more about IRM in SharePoint Online.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">In-Place Hold</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">When a content source is part of an eDiscovery case, organizations can place it on hold so that a copy preserved. This includes SharePoint sites, documents, or pages, Lync conversations, and Exchange mailboxes. Learn more about placing content sources on hold.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Managed Metadata Service</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Metadata management provides multiple taxonomies and folksonomies from a tenant-level store service that can be consumed at the site collection level. Metadata fields can even be embedded in documents. Learn more about managed metadata.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Metadata-driven Navigation</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Metadata-driven navigation makes it easier to discover content in large lists and libraries. User tagging incentives are introduced and offer anticipatory suggestions of appropriate metadata based on location and context. Learn more about setting up metadata navigation.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Multi-stage Disposition</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Retentions policies can have multiple stages, allowing you to specify the entire document lifecycle as one policy. For example, review contracts every year, and delete after seven years. Learn more about storing and managing records.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151"><font color="#a5a5a5">Office ProPlus (Osub)</font></td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419"><font color="#a5a5a5">Office ProPlus provides the complete Office 2013 application suite as a monthly subscription service. This lets customers purchase monthly licenses for each user that allow five concurrent installations. Learn more about Office ProPlus for Office 365.</font></td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66"><font color="#a5a5a5">No</font></td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; text-underline-style: none; text-line-through: none;" class="xl65" width="55"><font color="#a5a5a5">No</font></td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; text-underline-style: none; text-line-through: none;" class="xl65" width="61"><font color="#a5a5a5">No</font></td></tr> <tr style="height: 30pt;" height="40"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="40" width="151">Office Web Apps (edit)</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Organizations must purchase an editing license for users to use the editing features of Office Web Apps. Learn more about Office Web Apps.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 30pt;" height="40"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="40" width="151">Office Web Apps (view)</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">By default, Office Web Apps are view-only. View-only functionality is provided for free. Learn more about using Office Web Apps in your organization's SharePoint site.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 90pt;" height="120"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="120" width="151">Office Web Apps Server integration</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Not applicable to SharePoint Online customers. In SharePoint Server 2010, Office Web Apps was a SharePoint service application. For SharePoint Server 2013, Office Web Apps are now delivered in a new Office server product, Office Web Apps Server. A single Office Web Apps server farm can support users who access Office files through SharePoint Server 2013, Exchange Server 2013, shared folders, and websites. It's a simpler way of deploying and managing Office Web Apps in an on-premise environment. Learn more about Office Web Apps Server Integration.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 60pt;" height="80"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="80" width="151">PowerPoint Automation Services</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Not available to SharePoint Online customers. PowerPoint Automation Services helps enterprises manage their presentations. It is a shared service that provides unattended, server-side conversion of presentations into other formats. Learn more about PowerPoint Automation Services in SharePoint Server 2013.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 60pt;" height="80"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="80" width="151">Preservation hold library</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Content that is placed on hold is preserved, but users can still change it. The state of the content at the time of preservation is recorded. If a user changes the content or even deletes it, the item is retained at the time of deletion and the original, preserved version is still available. Learn more about placing content sources on hold.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; text-underline-style: none; text-line-through: none;" class="xl65" width="55">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 60pt;" height="80"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="80" width="151">Quick Edit</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">The Quick Edit View, also known as Datasheet View, displays list and library items in a grid, similar to a spreadsheet. Quick Edit can be helpful if you have to edit many items in a list or library at the same time. This view quires a control or program that is compatible with SharePoint, such as Microsoft Office, and ActiveX control support. Learn more about editing list items.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 15.75pt;" height="21"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="21" width="151">Related Items</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Related Items is a site column that enables you to associate a related list item with another item.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Rich Media Management</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">An Asset Library is pre-configured to use special features that help you manage rich media assets, such as image, audio, and video files. Learn more about setting up an Asset Library to store image, audio, or video files.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 75pt;" height="100"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="100" width="151">Shared Content Types</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">To share content types among site collections, you make on content type gallery the "hub" of a managed metadata service, create connections to the service from each web application that contains a site collection, and specify that site collections should use the content types in the service. Learn more about sharing term sets and content types in SharePoint Server 2013. This feature is not available in SharePoint Online.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 60pt;" height="80"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="80" width="151">SharePoint Translation Services</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">The Machine Translation Service lets users automatically translate documents. You can create a Machine Translation service application and configure the Machine Translation Service by using Central Administration, or Windows PowerShell. Learn more about creating and configuring Machine Translation services in SharePoint Server 2013.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 30pt;" height="40"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="40" width="151">Site mailbox</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">A site mailbox is a shared inbox in Exchange Online that all the members of a SharePoint Online site can access. It is implemented in SharePoint Online as an app.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Unique Document IDs</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">The unique Document ID services improves the managing and tracking of information by assigning a unique, human-readable identifier to every piece of content, making it easier to locate, even if the content was moved from its original location. Learn more about Document IDs.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Video Search</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">An Asset Library is pre-configured to use special features that help you manage rich media assets, such as image, audio, and video files. Learn more about setting up an Asset Library to store image, audio, or video files.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; text-underline-style: none; text-line-through: none;" class="xl65" width="55">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 120pt;" height="160"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="160" width="151">WCM: Analytics</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Not available to SharePoint Online customers. The Analytics Processing Component helps SharePoint Server 2013 administrators identify and surface content that users consider to be the most useful and relevant. The component analyzes both the content itself, and also the way users interact with it. The results from the analysis are added to the items in the search index so that search relevant improves automatically over time. Also, the results are used in reports that help search administrators see which manyual steps they can take to improve the search system. Learn more about analytics processing in SharePoint Server 2013. This feature is not available in SharePoint Online.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 30pt;" height="40"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="40" width="151">WCM: Catalog</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Not available to SharePoint Online customers. A catalog is a library or list that is shared across other sites and site collections. Lean more about catalog content for SharePoint authoring sites.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; text-underline-style: none; text-line-through: none;" class="xl65" width="55">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 120pt;" height="160"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="160" width="151">WCM: Cross-site publishing</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Not available to SharePoint Online customers. Cross-site publishing allows SharePoint Server 2013 customers to use one or more authoring site collections to author and store content, and one or more publishing site collections to control the design of the site and to show the content. The authoring site collection contains catalogs, such as Pages libraries and lists, which contain content that is tagged with metadata. These catalogs are indexed by the search system and made available to the publishing site collection. The publishing site collection issues queries for data that was indexed and shows it on web pages by using Web Parts that use search technology. Learn more about cross-site publishing in SharePoint Server 2013. This feature is not available in SharePoint Online.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; text-underline-style: none; text-line-through: none;" class="xl65" width="55">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 60pt;" height="80"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="80" width="151">WCM: Designer Tools</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">If an organization needs to completely redesign a site from scratch or reuse a previous site design, the Design Manager allows the modification of master pages, page layouts, mobile views, and more. This feature is especially useful for advanced site design and branding to a public-facing website or internal site collection or portal.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 60pt;" height="80"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="80" width="151">WCM: Faceted navigation</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Not available to SharePoint Online customers. Faceted navigation help users browser for content more easily by filtering on refiners that are tied to terms in a term set. By using faceted navigation, SharePoint Server 2013 administrators can configure different refiners for different terms in a term set without having to create additional pages. Learn more about refiners and faceted navigation.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; text-underline-style: none; text-line-through: none;" class="xl65" width="55">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">WCM: Image Renditions</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Not available to SharePoint Online customers. Image renditions let organizations have large source images on a SharePoint Server 2013 site and also have places on a site where pages only use smaller versions.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; text-underline-style: none; text-line-through: none;" class="xl65" width="55">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">WCM: Mobile and Device Rendering</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">SharePoint supports targeting different devices, such as smartphones, tablets, and set-top boxes. Designers can create channels that allow a single publishing site to be rendered in multiple ways by using different designs that target different devices. Learn more about design channels.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 60pt;" height="80"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="80" width="151">WCM: Multiple Domains</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Not available to SharePoint Online customers. SharePoint Server 2013 can create host-named site collections with the host header. Host-named site collections in SharePoint provide URL management and scalability of sites within a single web application. This feature is not available to SharePoint Online customers.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; text-underline-style: none; text-line-through: none;" class="xl65" width="55">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">yes</td></tr> <tr style="height: 60pt;" height="80"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="80" width="151">WCM: OOTB Recommendations Webparts</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">The Recommended Items Web Part shows content recommendations based on how users have previously interacted with the site. For example, you can add this Web Part to a catalog item page. If a user views a specific item, this Web Part will show other items that users have previously viewed, such as "Users who viewed this item also viewed these items." Lean more about Search Web Parts.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 60pt;" height="80"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="80" width="151">WCM: Search Engine Optimizations (SEO)</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Optimizing a public website for search is very important to connecting with new and returning customers. SharePoint Online includes built-in SEO features, such as customizable robots.txt and page-level metatagging so organizations can easily tune sites for better search results. Learn more about optimizing your website for search.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">WCM: Topic Pages</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Not available to SharePoint Online customers. Category pages and catalog item pages are page layouts that you can use to show structured catalog content consistently across a SharePoint Server 2013 site. Learn more about cross-site publishing. This feature is not available in SharePoint Online.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; text-underline-style: none; text-line-through: none;" class="xl65" width="55">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 60pt;" height="80"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="80" width="151">Word Automation Services</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Not available to SharePoint Online customers. Word Automation Services enables unattended, server-side conversion of documents that are supported by Microsoft Word. With Word Automation Services, tasks that previously required you to run the Word desktop application can be automated in SharePoint Server 2013.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 15.75pt;" height="21"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; background-color: rgb(165, 165, 165);" class="xl68" height="21" width="151"><strong>Insights</strong></td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; background-color: rgb(165, 165, 165);" class="xl66" width="419"> </td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; background-color: rgb(165, 165, 165);" class="xl66" width="66"> </td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; background-color: rgb(165, 165, 165);" class="xl66" width="55"> </td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; background-color: rgb(165, 165, 165);" class="xl66" width="61"> </td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Business Intelligence Center</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">The Business Intelligence Center site enables you to store data connections, workbooks, reports, scorecards, and dashboards in a central, secure location. Learn more about configuring Business Intelligence Center.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; text-underline-style: none; text-line-through: none;" class="xl65" width="55">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Calculated Measures and Members</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">When you create PivotChart reports of PivotTable reports that use data that is stored in SQL Server Analysis Services, you can create calculated measure and calculated members for that report. Learn more about Business intelligence capabilities in Excel Services.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; text-underline-style: none; text-line-through: none;" class="xl65" width="55">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Data Connection Library</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">A data connection library is a special SharePoint library that is designed to store and manage shared data connections. These can include ODC files that you create by using Excel. Learn more about Trusted Data Connection Libraries in SharePoint Server 2013.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; text-underline-style: none; text-line-through: none;" class="xl65" width="55">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 75pt;" height="100"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="100" width="151">Decoupled PivotTables and PivotCharts</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">When you create a PivotChart report, a corresponding PivtoTable report is automatically created. New in Excel 2013, you do not have to display a PivotTable report on the same worksheet as its corresponding PivotChart report. You can choose to display only the PivotChart report. This capability is called "decoupled PivotTables and PivotCharts". Learn more about PivotTables and PivotCharts.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; text-underline-style: none; text-line-through: none;" class="xl65" width="55">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 75pt;" height="100"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="100" width="151">Excel Services</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Excel Services enables you to share workbooks with others, view and explore information in a browser window, and refresh data. Excel Services enables you to view and interact with reports, scorecards, and dashboards in a browser window, much like you would use the Excel client. Excel Services also enables you to share all or parts of workbooks with others, and control what information is displayed in those workbooks. Learn more about Excel Services.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; text-underline-style: none; text-line-through: none;" class="xl65" width="55">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 60pt;" height="80"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="80" width="151">Field list and Field Support</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Excel Services enables you to open the Field List and Field Well for PivotChart reports and PivotTable reports that are viewed in a browser windows. This capability makes it easy to temporarily change the information that is displayed in a PivotChart report or a PivotTable report without having to open Excel. Learn more about Business Intelligence in Excel Services.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; text-underline-style: none; text-line-through: none;" class="xl65" width="55">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Filter Enhancements</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Slicers are easier to create and connect to reports and scorecards. You can adjust the size and orientation of a slicer. You can also format slicers by applying built-in styles or defining your own style.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; text-underline-style: none; text-line-through: none;" class="xl65" width="55">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 30pt;" height="40"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="40" width="151">Filter Search</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">You can search on filter results, which makes it easy to jump to a particular item in a long list. Learn more about using filters and slicers.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; text-underline-style: none; text-line-through: none;" class="xl65" width="55">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 60pt;" height="80"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="80" width="151">PerformancePoint Services</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Not available to SharePoint Online customers. PerformancePoint Services enables SharePoint Server 2013 customers to create interactive dashboards that display key performance indicators (KPIs) and data virtualizations in the form of scorecards, reports, and filters. Learn more about PerformancePoint Services.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; text-underline-style: none; text-line-through: none;" class="xl65" width="55">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 75pt;" height="100"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="100" width="151">PerformancePoint Services (PPS) Dashboard Migration</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Not available to SharePoint Online customers. With Dashboard Migration, SharePoint Server 2013 customers will be able to copy complete dashboards and dependencies. This includes the .aspx file, to other users, servers, or site collections. This feature also allows the ability to migrate single items to other environments and migrate content by using Windows PowerShell commands. Learn more about creating Dashboards by using PerformancePoint Services.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; text-underline-style: none; text-line-through: none;" class="xl65" width="55">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 60pt;" height="80"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="80" width="151">Power View</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Power View is an add-in for Excel that enables organizations to visualize and interact with modeled data by using highly interactive visualizations, animations, and smart querying. Organizations can present insights with other through storyboard presentation capabilities. Power View is powered by BI Semantic Model and the VertiPaq engine. Learn more about Power View.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; text-underline-style: none; text-line-through: none;" class="xl65" width="55">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">PowerPivot</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">PowerPivot is an add-in that organizations can use to perform powerful data analysis and create sophisticated data models. PowerPivot also enables organizations to mash up large volumes of data from various sources, analyze data quickly, and share insights. Learn more about PowerPivot.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; text-underline-style: none; text-line-through: none;" class="xl65" width="55">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 75pt;" height="100"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="100" width="151">Quick Explore</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Quick Explore enables organizations to select a value in a PivotChart report or a PivotTable report and see additional information about that value. For example, if you are viewing a sales report and you select a value that represents total sales amounts, you can use Quick Explore to view additional information such as sales amounts across different product categories or geographical areas. Learn more about Quick Explore.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; text-underline-style: none; text-line-through: none;" class="xl65" width="55">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 75pt;" height="100"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="100" width="151">Scorecards & Dashboards</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Not available to SharePoint Online customers. A scorecard shows at a glance whether performance is on or off target for one or more key performance indicators (KPIs). A dashboard is a collection of views that can include scorecards and other reports. Scorecards and dashboard are designed to show current performance information and are typically rendered in a site such as a SharePoint Server 2013 site. Learn more about creating and using a report or a scorecard.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; text-underline-style: none; text-line-through: none;" class="xl65" width="55">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 90pt;" height="120"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="120" width="151">SQL Server Reporting Services (SSRS) Integrated Mode</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">When SQL Server 2012 Reporting Services is integrated with SharePoint, you can use powerful SharePoint collaboration and centralized document management features for SQL Server 2012 Reporting Services content. Reports are stored in SharePoint document libraries, alongside other reports such as Excel Services files. SharePoint permissions can be used to control access to Reporting Services content, and people are able to start Report Designer, Model Designer, and Report Builder within a document library. Learn more about Reporting Services Report Server.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; text-underline-style: none; text-line-through: none;" class="xl65" width="55">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 90pt;" height="120"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="120" width="151">SQL Server Reporting Services (SSRS) Integrated Mode</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">When SQL Server 2012 Reporting Services is integrated with SharePoint, you can use powerful SharePoint collaboration and centralized document management features for SQL Server 2012 Reporting Services content. Reports are stored in SharePoint document libraries, alongside other reports such as Excel Services files. SharePoint permissions can be used to control access to Reporting Services content, and people are able to start Report Designer, Model Designer, and Report Builder within a document library. Learn more about Reporting Services Report Server.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; text-underline-style: none; text-line-through: none;" class="xl65" width="55">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Timeline Slicer</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">A timeline slicer is a control that can be added to a dashboard created by using Excel. A timeline control enables people to view information for a particular period of time. Learn more about Business Intelligence in Excel Services.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; text-underline-style: none; text-line-through: none;" class="xl65" width="55">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 30pt;" height="40"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="40" width="151">Visio Services</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Visio Services is a service application that lets users share and view Microsoft Visio Drawing (*.vsdx) and Visio 2010 Web drawing (*.vdw) files. Learn more about Visio Services.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; text-underline-style: none; text-line-through: none;" class="xl65" width="55">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 15.75pt;" height="21"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; background-color: rgb(165, 165, 165);" class="xl68" height="21" width="151"><strong>Search</strong></td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; background-color: rgb(165, 165, 165);" class="xl66" width="419"> </td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; background-color: rgb(165, 165, 165);" class="xl66" width="66"> </td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; background-color: rgb(165, 165, 165);" class="xl66" width="55"> </td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; background-color: rgb(165, 165, 165);" class="xl66" width="61"> </td></tr> <tr style="height: 105pt;" height="140"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="140" width="151">Advanced Content Processing</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Not available to SharePoint Online customers. To improve SharePoint Server 2013 search relevance, the document parsing functionality in the content processing component analyzes both the structure and content of documents. Documents parsers extract useful metadata and remove redundant information. For example, parsers extract heading and subheadings from Word documents, and titles, dates, and authors from slides in PowerPoint presentations. For HTML content, redundant generic information such as menus, headers, and footers are removed from document summaries in the search results. Learn more about search improvements.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 105pt;" height="140"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="140" width="151">Content Search Web Part</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Not available to SharePoint Online customers. The Content Search Web Part is a SharePoint Server 2013 feature that displays content that was crawled and added to an organization's search index. It is a very powerful and versatile Web Part, especially when it is used in combination with managed navigation and category pages. The Content Search Web Part allows you to select a result source. This makes it very easy to specify which content should be searched. You can also use Keyword Query Language to add more filters and search terms to the query in this Web Part. Learn more about Content Search Web Part.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 60pt;" height="80"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="80" width="151">Continuous crawl</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Not available to SharePoint Online customers. Configure crawl schedules for SharePoint Server 2013 content sources so that crawls are performed continuously. This option eliminates the need to schedule incremental crawls and automatically starts crawls as necessary to keep the search index fresh. Learn more about managing continuous crawl.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 75pt;" height="100"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="100" width="151">Custom entity extraction</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Not available to SharePoint Online customers. SharePoint Server 2013 administrators can create and deploy custom entity extraction dictionaries to configure the search system to look for specific words or phrases (entities) in unstructured content. The extracted entities are stored in separate managed properties, and you can use them to improve your organization's search experience, for example by creating refiners. Learn more about creating and deploying custom entity extractors.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; text-underline-style: none; text-line-through: none;" class="xl65" width="55">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 30pt;" height="40"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="40" width="151">Deep links</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">The search system automatically creates links directly to sub-sections of a main page that is frequently visited. These links are called "deep links".</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 60pt;" height="80"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="80" width="151">Event-based relevancy</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">The search system determines the relevance of search results in part by how content is connected, how often an item appears in search results, and which search results people click. The analytics component tracks and analyzes this information and uses it to continuously improve relevance. Learn more about analytics processing.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Expertise Search</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">In SharePoint, it is easier to find people with specific skills or expertise in the People Search vertical. The search results are based on information such as the metadata users have entered about themselves on their personal sites, and information from the content that they have created.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 75pt;" height="100"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="100" width="151">Extensible content processing</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Not available to SharePoint Online customers. Developers can call out to an external content enrichment web service to change the managed properties of crawled items before they are indexed. The ability to change managed properties for items during content processing is helpful for tasks such as data cleansing, entity extraction, classification, and tagging. Learn more about custom content processing.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; text-underline-style: none; text-line-through: none;" class="xl65" width="55">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 30pt;" height="40"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="40" width="151">Graphical refiners</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">The new graphical refiners provide a more visual way of filtering search results. Learn more about configuring the Refinement Web Part.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 30pt;" height="40"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="40" width="151">Hybrid search</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">In a hybrid deployment of SharePoint, search result content can come from both SharePoint Online and SharePoint Server 2013 on-premise sites.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 60pt;" height="80"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="80" width="151">Managed navigation</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Managed navigation lets organizations define and maintain the navigation on a site by using term sets. Managed navigation supplements the existing SharePoint navigation that is based on site structure. The managed navigation structure is created by adding terms to term sets in the Term Store Management tool. Learn more about managed navigation.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">On-premises search index</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">The search index is stored in the on-premises SharePoint Server 2013 environment and is not available to SharePoint Online customers. Learn more about search schema in SharePoint Server 2013.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">N/A</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">N/A</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">N/A</td></tr> <tr style="height: 30pt;" height="40"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="40" width="151">Phonetic name matching</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Improved phonetic name matching finds search results for similar sounding names (is it John or Jon?).</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Query rules—Add promoted results</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">In a query rule, specify conditions and correlated actions. When a query meets the conditions in a query rule, the search system performs the actions specified in the rule. The "Add promoted results" action lets you promote individual results so that they appear at the top of search results.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 30pt;" height="40"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="40" width="151">Query rules—advanced actions</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">In this query rule, specify conditions and correlated actions. When a query meets the conditions in a query rule, the search system performs the actions specified in the rule.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; text-underline-style: none; text-line-through: none;" class="xl65" width="55">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Query spelling correction</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Edit exclusions and inclusions lists to decide which queries the search results page should display alternative query spellings for. This features is often called "Did you mean?". Learn more about query spelling correction.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Query suggestions</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Query suggestions are suggested phrases that users have already searched for. The suggestions appear in a list below the Search Box as a user types a query. Query suggestions are generated automatically, and phrases can be added to the system as "always" or "never" suggest.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 30pt;" height="40"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="40" width="151">Query throttling</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">If query resources become limited, you can decide how queries should be prioritized based on the client type the queries are coming from.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Quick preview</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Users can rest the pointer over a search result to preview and interact with the document or site content in the hover panel to the right of the result. The preview shows rich metadata and has deep links to the main sections of the document or site.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 60pt;" height="80"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="80" width="151">Recommendations</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">The search system looks for patterns in how users interact with content items, sites and people, and can use the information to display recommendations on a site, for example, "People who viewed this also viewed". Learn more about configuring recommendations and usage event types in SharePoint Server 2013.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Refiners</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Not available to SharePoint Online customers. Refiners categorize the top documents in SharePoint Server 2013 search results into groups that lets users filter the search results. Learn more about the Refinement Web Part.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 105pt;" height="140"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="140" width="151">RESTful Query API/Query OM</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Developers can create .NET code to access the public search object model. This includes search administration operations in addition to submitting search queries. To interact with the service side object model, the .NET code must run on a web server in the farm. A sub-set of the object mode can be accessed from a remote computer by using the Client Side Object Model (CSOM). Features of the Client Side Object model (CSOM) can be accessed by using a REST-based web service or oData. This allows developers to submit queries to the SharePoint Server 2013 farm using popular web development tools.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Result sources</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Create and use a result source to specify a location from which to obtain search results and to specify the protocol for getting those results. Result sources replace scopes and federated locations. Learn more about result sources.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 60pt;" height="80"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="80" width="151"><font color="#a5a5a5">Search connector framework</font></td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419"><font color="#a5a5a5">SharePoint Server 2013 provides default connectors (protocol handlers) for the most popular protocols, which can be used to crawl and index content. To crawl content that requires a non-default connector, your organization can purchase and install third-party connectors or build your own custom connectors. Learn more about default connectors in SharePoint Server 2013.</font></td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66"><font color="#a5a5a5">No</font></td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; text-underline-style: none; text-line-through: none;" class="xl65" width="55"><font color="#a5a5a5">No</font></td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; text-underline-style: none; text-line-through: none;" class="xl65" width="61"><font color="#a5a5a5">No</font></td></tr> <tr style="height: 30pt;" height="40"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="40" width="151">Search results sorting</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Users can choose to sort search results by different criteria, for example relevance, freshness, and social distance (people names).</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 30pt;" height="40"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="40" width="151">Search vertical: "Conversations"</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">A targeted search experience that displays results that are custom filtered and formatted for conversations content. Learn more about configuring the Search Navigation Web Part.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Search vertical: "People"</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">A targeted search experience that displays results that are custom filtered and formatted for people content. The search results are based on metadata about the people in an organization and on the content those people have produced. Learn more about configuring the Search Navigation Web Part.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 30pt;" height="40"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="40" width="151">Search vertical: "Video"</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">A targeted search experience that displays results that are custom filtered and formatted for video content. Learn more about configuring the Search Navigation Web Part.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; text-underline-style: none; text-line-through: none;" class="xl65" width="55">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 60pt;" height="80"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="80" width="151"><font color="#a5a5a5">Tunable Relevancy</font></td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419"><font color="#a5a5a5">The search system has strong built-in relevant that will automatically improve over time. In addition, many tools can be used to manually tune the relevancy to match content and to create specific search experiences for an organization. Learn more about managing search relevance in SharePoint Server 2013.</font></td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66"><font color="#a5a5a5">No</font></td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; text-underline-style: none; text-line-through: none;" class="xl65" width="55"><font color="#a5a5a5">No</font></td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; text-underline-style: none; text-line-through: none;" class="xl65" width="61"><font color="#a5a5a5">No</font></td></tr> <tr style="height: 15.75pt;" height="21"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; background-color: rgb(165, 165, 165);" class="xl68" height="21" width="151"><strong>Sites</strong></td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; background-color: rgb(165, 165, 165);" class="xl66" width="419"> </td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; background-color: rgb(165, 165, 165);" class="xl66" width="66"> </td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; background-color: rgb(165, 165, 165);" class="xl66" width="55"> </td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; background-color: rgb(165, 165, 165);" class="xl66" width="61"> </td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Change the look</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">You can quickly customize your team site so that it's easier to use and reflects your professional style and brand. You can change the background image, colors, site layout and fonts with just a few clicks. Learn more about customizing team sites.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 30pt;" height="40"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="40" width="151">Connections to Microsoft Office Clients</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">By using the Connect to Office commands, you can conveniently access commonly used libraries from a Microsoft Office program. Learn more about Connect to Office commands.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Cross Browser Support</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">SharePoint Online supports several commonly used web browsers, including the latest three versions of Internet Explorer, and the latest versions of Google Chrome, Mozilla Firefox, and Apple Safari. Learn more about planning browser support.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 60pt;" height="80"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="80" width="151">Custom Managed Paths</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">By defining managed paths, you can specify which paths in the URL namespace of a Web application are used for site collections. You can specify that one or more site collections exists at a specified path. This can be a convenient method of consolidating multiple site access to users in various departments. Learn more about managed paths.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Governance</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">An important but often invisible part of any site is its governance model—the set of policies, roles, responsibilities, and processes that you establish to determine how the people in your group use SharePoint. Learn more about best practices for creating and managing team sites.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Large List Scalability and Management</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">By planning and using key list and library features, you can ensure that you and other users quickly find information without adversely affecting the performance of the rest of your site. Learn more about managing lists and libraries.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 60pt;" height="80"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="80" width="151">Mobile Connectivity</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">You can access SharePoint sites on the go from an Internet-connected mobile phone or tablet. You can view and update documents, lists, and other site content and collaborate with colleagues, all from your mobile device. Learn more about using a mobile device to work with SharePoint Online sites.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 30pt;" height="40"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="40" width="151">Multi-Lingual User Interface</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Use the Multi-Lingual User Interface (MUI) feature to create sites in different languages that the default language for your SharePoint installation. Learn more about multilingual features.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">My Tasks</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">The My Tasks page on your personal site enables you to see all of the tasks that you are working on in one central location. Tasks are pulled from your personal site, project and team sites, Microsoft Outlook, and Project Web App. Learn more about working with tasks on your personal site.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 15.75pt;" height="21"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="21" width="151">OOTB Web Parts</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">A Web Part is a modular unit of information that forms the basic building block of a Web Part page.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 75pt;" height="100"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="100" width="151">Permissions Management</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">SharePoint permissions are flexible and configurable enough for an organization to manage permissions at whatever level of detail that is needed. Three key security elements work together to control use access to sites and site content: permissions inheritance, permission levels (sometimes known as SharePoint roles), and SharePoint groups (or SharePoint security groups). Learn more about controlling user access with permissions.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Project functionality for team sites</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Add project functionality to your team site to help plan and track a project. This functionality includes a task list with a visual timeline, a calendar, and the Project Summary web part. Learn more about project sites.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Project site template</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Use the project site template to create a site where you can capture tasks and assign them to people in your organization, store and manage project-related documentation, and track project team events on a common calendar. Learn more about project sites.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 60pt;" height="80"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="80" width="151">Project Summary web part</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">The Project Summary web part provides a visual timeline for a task list, and information about late and upcoming tasks and events. By default, it is included on the Home page for a project site, and it can be added to any other site that includes a task list. Learn more about the Project Summary web part.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 75pt;" height="100"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="100" width="151">Project workspace</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Existing project workspace sites are upgraded in this version to look similar to newly-created project and team sites that include the project functionality. Upgraded project workspace sites can be used to capture tasks and assign them to people in your organization, store and mange project-related documentation, and track project team events on a common calendar. Learn more about project sites.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 30pt;" height="40"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl72" height="40" width="151"><font color="#a5a5a5">Public Website (SPO)</font></td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl73" width="419"><font color="#a5a5a5">Your Office 365 account includes a public website that you can use to create a professional online presence for your organization. Learn more about Public Website.</font></td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl73" width="66"><font color="#a5a5a5">N/A</font></td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl73" width="55"><font color="#a5a5a5">N/A</font></td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl73" width="61"><font color="#a5a5a5">N/A</font></td></tr> <tr style="height: 60pt;" height="80"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="80" width="151">SharePoint Lists</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">A list is a collection of data that you can share with team members and other site users. For example, you can create a sign-up sheet for an event or track team events on a calendar by using a list. You can use several ready-to-use lists and list templates, which provide a good starting point for organizing list items. Learn more about SharePoint lists.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 60pt;" height="80"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="80" width="151">SharePoint Ribbon</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Similar to the interface in products such as Microsoft Word, the ribbon is a toolbar that appears across the top of each SharePoint page and displays the most commonly-used controls and commands. The controls that appear on the ribbon vary according to the page you are viewing and the context.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 60pt;" height="80"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="80" width="151">Task list</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Task lists are used for managing work in a hierarchical way, with summary tasks and subtasks appearing in a single list. Tasks can have start and end dates, can be assigned to people in your organization, and can be included in an illustrated timeline. Learn more about adding tasks to your project.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 30pt;" height="40"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="40" width="151">Team Site: Drag & Drop</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">You can upload documents, pictures, and other types of files to your site by dragging them from your computer to a library on your site, such as Documents or your SkyDrive Pro library.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 60pt;" height="80"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="80" width="151">Team Site: Notebook</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">When you create a team site, a OneNote 2013 shared notebook is automatically created as part of the site. You can use this notebook to capture, compile, and share information. (This feature is available only if you have signed up with an Office 365 suite that includes Microsoft Office Web Apps support.)</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Team Site: Simplified Access</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">When you share a site, you invite other people to have access to the site. You can share any site in which you have the required permissions. As you set up sharing, you may be able to set permissions for the people you're inviting to the site, depending on your own permissions.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Templates</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">When you create a new site in SharePoint, you start by selecting a site template to base your site on. Site templates contain lists, libraries, pages, and other elements or features that support the needs of an organization. Learn more about customizing your team site.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 30pt;" height="40"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="40" width="151">Themes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">You can quickly customize your team site so that it's easier to use and reflects your professional style and brand. Themes are a quick and way to apply colors and fonts to sites.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Work Management Service</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">The Work Aggregation Service finds and pulls together tasks from all of your projects, across SharePoint, Outlook, and Project Web App. Learn more about working with tasks on your personal site.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 30pt;" height="40"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="40" width="151">Usage Analytics</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Web Analytics reports are pre-built reports in SharePoint that use usage data to analyze various aspects of sites and site collections.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 15.75pt;" height="21"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; background-color: rgb(165, 165, 165);" class="xl68" height="21" width="151"><strong>Social</strong></td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; background-color: rgb(165, 165, 165);" class="xl66" width="419"> </td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; background-color: rgb(165, 165, 165);" class="xl66" width="66"> </td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; background-color: rgb(165, 165, 165);" class="xl66" width="55"> </td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; background-color: rgb(165, 165, 165);" class="xl66" width="61"> </td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Ask Me About</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">The Ask Me About section of your profile lets you list your areas of expertise, presenting yourself as a go-to person for those areas to anyone who visits your profile page. Learn more about SharePoint profiles.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Blogs</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Blogs can enable an organization to quickly share information among employees, partners, or customers. People can add insight to a difficult subject area, provide inspiration and guidance, or explain a new guideline or procedure.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 60pt;" height="80"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="80" width="151">Communities Reputation, Badging, and Moderation</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">When you participate in community discussions, you build your reputation as an expert and earn points and badges that reward your contributions. If you're really into it, you can become a moderator and work behind the scenes to makes sure the community thrives. Learn more about moderating a community.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Community</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">An online community is a virtual place where ideas are discussed and shared. It promotes open communication by fostering discussions among users who both share their expertise and learn from others. Learn more about creating a community.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 30pt;" height="40"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="40" width="151">Company Feed</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">The company feed is an organization's public newsfeed. All posts appear to the company, including those created by people that users might not be following. Learn more about Company Feed.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 30pt;" height="40"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="40" width="151">Follow</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Users can follow people, documents, sites, and tags to see newsfeed postings associated with people documents, sites, and tags that interest them. Learn more about following in SharePoint.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 30pt;" height="40"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="40" width="151">Microblogging</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Microblogging lets users post items of interest in a newsfeed and participate in conversations. Learn more about microblogging.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Newsfeed</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">A newsfeed is a place to post information and reply to other posts, and to get updates about people and content you're following. You can post to the public newsfeed or to newsfeeds on team sites on which you're a member. Learn more about the SharePoint newsfeed.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">One Click Sharing</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">You can easily share documents and sites with others in your organization, from your SkyDrive Pro and Sites pages, helping promote team collaboration. Learn more about sharing ideas, sites, and content.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 30pt;" height="40"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="40" width="151">People, Sites, Document Recommendations</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Your SkyDrive Pro and Sites pages give you suggestions for documents and sites to follow, based on your profile information and newsfeed activity. Learn more about suggested documents to follow.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Personal Site</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Each SharePoint Online users has a personal site where data is personalized for them. Personal site includes a Newsfeed, SkyDrive document library, and Sites pages. Learn more about sharing ideas, sites, and content.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 60pt;" height="80"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="80" width="151">Photos and Presence</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Exchange Online and Lync Online integration with some Office 365 plans allows users to sync their profile pictures and presence indicator with SharePoint Online. Photos appearing in a person's About Me page are managed by Exchange Online and are no longer managed by using the Microsoft SharePoint Online Administration Center.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Profile</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Part of a user's profile is fed in from the Office 365 directory service. If an organization sets up Office 365 Directory Synchronization (DirSync), then user profiles will sync with that organization's Active Directory accounts. Learn more about SharePoint profiles.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 30pt;" height="40"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="40" width="151">Ratings</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Users can add ratings to their SkyDrive Pro libraries that allow sites visitors to 'Like' a library document or to use a 'star' tool to rate it. Learn more about adding a ratings feature to a library.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 30pt;" height="40"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="40" width="151">Site Feed</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">A site feed, similar to a newsfeed, is a place on a team site to post information, and reply to other posts. Learn more about posting something to a small group of people.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 30pt;" height="40"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="40" width="151">Skydrive Pro</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">SkyDrive Pro is a service available with SharePoint Online that lets users sync documents to the cloud, and also to their computers. Learn more about SkyDrive Pro.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 30pt;" height="40"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="40" width="151">Tag profiles</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Tag profiles display information about tags that appear in a newsfeed. Information includes conversations that reference the tag and a list of related tags. Learn more about tags.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="60" width="151">Tasks integrated with Outlook</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">You can synchronize your SharePoint task lists with Exchange so that you can manage and add tasks by using Outlook.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="background: rgb(252, 228, 214); padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; text-underline-style: none; text-line-through: none;" class="xl65" width="61">No <font class="font5" color="#ff0000"><strong>(seems like a mistake!)</strong></font></td></tr> <tr style="height: 15.75pt;" height="21"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="21" width="151">Trending Tags</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">Currently popular #tags references appear in public newsfeed posts.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 60pt;" height="80"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl67" height="80" width="151">Wikis</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="419">A wiki is a site designed for groups of people to quickly capture and share ideas by creating simple pages and linking them together. Every team site is a wiki, but you can also add a separate wiki page library to a site, or create a large-scale Enterprise wiki as a separate site or site collection. Learn more about creating a wiki.</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="66">No</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="55">Yes</td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl65" width="61">Yes</td></tr> <tr style="height: 15.75pt;" height="21"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; background-color: rgb(165, 165, 165);" class="xl68" height="21" width="151"><strong>Add-Ons</strong></td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; background-color: rgb(165, 165, 165);" class="xl66" width="419"> </td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; background-color: rgb(165, 165, 165);" class="xl66" width="66"> </td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; background-color: rgb(165, 165, 165);" class="xl66" width="55"> </td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top; background-color: rgb(165, 165, 165);" class="xl66" width="61"> </td></tr> <tr style="height: 15.75pt;" height="21"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl72" height="21" width="151"><font color="#a5a5a5">Additional Storage</font></td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl73" width="419"><font color="#a5a5a5">Should you require more storage, it is available at a cost per gigabyte (GB) per month.</font></td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl73" width="66"><font color="#a5a5a5">N/A</font></td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl73" width="55"><font color="#a5a5a5">N/A</font></td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl73" width="61"><font color="#a5a5a5">N/A</font></td></tr> <tr style="height: 30pt;" height="40"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl72" height="40" width="151"><font color="#a5a5a5">App Hosting: Base</font></td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl73" width="419"><font color="#a5a5a5">The add-on is used to buy additional app hosting licenses which provide hosting resources to the Autohosted Apps in SharePoint app catalog.</font></td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl73" width="66"><font color="#a5a5a5">N/A</font></td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl73" width="55"><font color="#a5a5a5">N/A</font></td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl73" width="61"><font color="#a5a5a5">N/A</font></td></tr> <tr style="height: 30pt;" height="40"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl72" height="40" width="151"><font color="#a5a5a5">App Hosting: Per User</font></td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl73" width="419"><font color="#a5a5a5">The add-on is used to buy additional app hosting licenses which provide hosting resources to the Autohosted Apps in SharePoint app catalog.</font></td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl73" width="66"><font color="#a5a5a5">N/A</font></td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl73" width="55"><font color="#a5a5a5">N/A</font></td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl73" width="61"><font color="#a5a5a5">N/A</font></td></tr> <tr style="height: 30pt;" height="40"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl72" height="40" width="151"><font color="#a5a5a5">Azure Provisioned Apps: Access Services</font></td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl73" width="419"><font color="#a5a5a5">Access Services allows business users to quickly create apps that run in Office 365 and store their data in SWL databases on Windows Azure.</font></td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl73" width="66"><font color="#a5a5a5">N/A</font></td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl73" width="55"><font color="#a5a5a5">N/A</font></td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl73" width="61"><font color="#a5a5a5">N/A</font></td></tr> <tr style="height: 60pt;" height="80"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl72" height="80" width="151"><font color="#a5a5a5">Azure Provisioned Apps: Custom Code in Azure Lightweight Web Role (LWR)</font></td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl73" width="419"><font color="#a5a5a5">Provider-hosted apps for SharePoint include components that are deployed and hosted outside the SharePoint farm, usually by a developer, but in some scenarios by the customer. The provider-hosted app for SharePoint interacts with a SharePoint site but also uses resources and services that reside on the remote site. Learn more about hosting options for apps for SharePoint.</font></td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl73" width="66"><font color="#a5a5a5">N/A</font></td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl73" width="55"><font color="#a5a5a5">N/A</font></td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl73" width="61"><font color="#a5a5a5">N/A</font></td></tr> <tr style="height: 45pt;" height="60"> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl72" height="60" width="151"><font color="#a5a5a5">Duet Online</font></td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl73" width="419"><font color="#a5a5a5">Duet Online for SharePoint and SAP is a jointly developed product from SAP and Microsoft that enables interoperability between SAP applications and SharePoint Online. Learn more about Duet Online.</font></td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl73" width="66"><font color="#a5a5a5">N/A</font></td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl73" width="55"><font color="#a5a5a5">N/A</font></td> <td style="padding-top: 1px; padding-right: 1px; padding-left: 1px; vertical-align: top;" class="xl73" width="61"><font color="#a5a5a5">N/A</font></td></tr></tbody></table> <p> </p> <br><br><br><br><br><br><div id="spnEditorSign"></div><br></div><span style="display: none;" id="jy5ContentSuffix"></span></div><br><br><span title="neteasefooter"><span id="netease_mail_footer"></span></span>SharePointhttp://www.blogger.com/profile/11836813831529789606noreply@blogger.comtag:blogger.com,1999:blog-3888123222103988694.post-9288623036930031832013-03-05T00:20:00.002-05:002013-03-05T00:20:30.272-05:00SharePoint 2013:System.ServiceModel.ServiceActivationException<br />
<div style="background-color: #f4f2e7; border: 0px; color: #666666; font-family: Georgia, Palatino, 'Palatino Linotype', 'Book Antiqua', serif; font-size: 16px; line-height: 24px; margin-bottom: 1.5em; outline: 0px; padding: 0px; vertical-align: baseline;">
After having this issue on newly installed SharePoint 2013 farm in production environment, I figure it out that Single server is running out of memory. Especially, thanks to one new process noderunner.exe.</div>
<div style="background-color: #f4f2e7; border: 0px; color: #666666; font-family: Georgia, Palatino, 'Palatino Linotype', 'Book Antiqua', serif; font-size: 16px; line-height: 24px; margin-bottom: 1.5em; outline: 0px; padding: 0px; vertical-align: baseline;">
Noderunner.exe is the new executable of search service on SharePoint 2013. This process can’t turn it off because Search is one of essential service application in SharePoint 2013, and it is integrated in many features. So, there are some things you can do to reduce the impact of Search on your system.</div>
<div style="background-color: #f4f2e7; border: 0px; color: #666666; font-family: Georgia, Palatino, 'Palatino Linotype', 'Book Antiqua', serif; font-size: 16px; line-height: 24px; margin-bottom: 1.5em; outline: 0px; padding: 0px; vertical-align: baseline;">
<b>Solution 1</b></div>
<div style="background-color: #f4f2e7; border: 0px; color: #666666; font-family: Georgia, Palatino, 'Palatino Linotype', 'Book Antiqua', serif; font-size: 16px; line-height: 24px; margin-bottom: 1.5em; outline: 0px; padding: 0px; vertical-align: baseline;">
Reduce the Search Service Performance Level with this PowerShell command:</div>
<div style="background-color: #f4f2e7; border: 0px; color: #666666; font-family: Georgia, Palatino, 'Palatino Linotype', 'Book Antiqua', serif; font-size: 16px; line-height: 24px; margin-bottom: 1.5em; outline: 0px; padding: 0px; vertical-align: baseline;">
Set-SPEnterpriseSearchService -PerformanceLevel Reduced</div>
<div style="background-color: #f4f2e7; border: 0px; color: #666666; font-family: Georgia, Palatino, 'Palatino Linotype', 'Book Antiqua', serif; font-size: 16px; line-height: 24px; margin-bottom: 1.5em; outline: 0px; padding: 0px; vertical-align: baseline;">
or</div>
<div style="background-color: #f4f2e7; border: 0px; color: #666666; font-family: Georgia, Palatino, 'Palatino Linotype', 'Book Antiqua', serif; font-size: 16px; line-height: 24px; margin-bottom: 1.5em; outline: 0px; padding: 0px; vertical-align: baseline;">
Set-SPEnterpriseSearchService -PerformanceLevel PartiallyReduced, which is in between reduced and Maximal</div>
<div style="background-color: #f4f2e7; border: 0px; color: #666666; font-family: Georgia, Palatino, 'Palatino Linotype', 'Book Antiqua', serif; font-size: 16px; line-height: 24px; margin-bottom: 1.5em; outline: 0px; padding: 0px; vertical-align: baseline;">
<b>Solution 2</b></div>
<div style="background-color: #f4f2e7; border: 0px; color: #666666; font-family: Georgia, Palatino, 'Palatino Linotype', 'Book Antiqua', serif; font-size: 16px; line-height: 24px; margin-bottom: 1.5em; outline: 0px; padding: 0px; vertical-align: baseline;">
Limit the Memory Footprint of NodeRunner.exe is one thing that is not so recommended. There is a configuration setting for NodeRunner.exe’s configuration file that can limit RAM usage of a single process to specific value in megabytes. This configuration file is located at: C:\Program Files\Microsoft Office Servers\15.0\Search\Runtime\1.0\noderunner.exe.config. The configuration setting is under the nodeRunnerSettings node and it’s called memoryLimitMegabytes. Its default value is 0 (unlimited). Every time you change it, you’ll need to restart all of the noderunner.exe processes.</div>
<div style="background-color: #f4f2e7; border: 0px; color: #666666; font-family: Georgia, Palatino, 'Palatino Linotype', 'Book Antiqua', serif; font-size: 16px; line-height: 24px; margin-bottom: 1.5em; outline: 0px; padding: 0px; vertical-align: baseline;">
On some blogs I have found that noderunner.exe has memory leak and this is known bug in SharePoint 2013.</div>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-3888123222103988694.post-89158249908673868792013-02-19T05:11:00.003-05:002013-02-19T05:16:43.375-05:00Creating iGoogle UI for SharePoint 2010/SharePoint 2013 - Part V : SharePoint 2010 Integration<br />
<h2>
Series Content</h2>
<ol>
<li><h3 class="post-title entry-title" style="background-color: white; background-image: url(http://www.templatesimages.com/images/Minyx20/thdotsH.gif); background-position: 0% 100%; background-repeat: repeat no-repeat; color: #333333; font-family: 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; font-weight: normal; letter-spacing: -1px; line-height: 18px; margin: 0px; padding: 6px 0px;">
<a href="http://digsharepoint.blogspot.com/2013/02/creating-igoogle-ui-for-sharepoint.html" style="color: #6699cc; margin: 0px; outline-style: none; padding: 0px; text-decoration: initial;"><span style="font-size: small;">Creating iGoogle UI for SharePoint 2010/SharePoint 2013 - Part I : Overview, Concept, HTML Structure & Jquery Basics</span></a></h3>
</li>
<li><h3 class="post-title entry-title" style="background-color: white; background-image: url(http://www.templatesimages.com/images/Minyx20/thdotsH.gif); background-position: 0% 100%; background-repeat: repeat no-repeat; color: #333333; font-family: 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; font-weight: normal; letter-spacing: -1px; line-height: 18px; margin: 0px; padding: 6px 0px;">
<a href="http://digsharepoint.blogspot.com/2013/02/creating-igoogle-ui-for-sharepoint_19.html" style="color: #6699cc; margin: 0px; outline-style: none; padding: 0px; text-decoration: initial;"><span style="font-size: small;">Creating iGoogle UI for SharePoint 2010/SharePoint 2013 - Part II : Dragging, Dropping, Sorting and Collapsing</span></a></h3>
</li>
<li><h3 class="post-title entry-title" style="background-color: white; background-image: url(http://www.templatesimages.com/images/Minyx20/thdotsH.gif); background-position: 0% 100%; background-repeat: repeat no-repeat; color: #333333; font-family: 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; font-weight: normal; letter-spacing: -1px; line-height: 18px; margin: 0px; padding: 6px 0px;">
<a href="http://digsharepoint.blogspot.com/2013/02/creating-igoogle-ui-for-sharepoint_333.html" style="color: #ff3366; margin: 0px; outline-style: none; padding: 0px; text-decoration: initial;"><span style="font-size: small;">Creating iGoogle UI for SharePoint 2010/SharePoint 2013 - Part III : Saving WebPart states using Cookies</span></a></h3>
</li>
<li><h3 class="post-title entry-title" style="background-color: white; background-image: url(http://www.templatesimages.com/images/Minyx20/thdotsH.gif); background-position: 0% 100%; background-repeat: repeat no-repeat; color: #333333; font-family: 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; font-weight: normal; letter-spacing: -1px; line-height: 18px; margin: 0px; padding: 6px 0px;">
<a href="http://digsharepoint.blogspot.com/2013/02/creating-igoogle-ui-for-sharepoint_5146.html" style="color: #6699cc; margin: 0px; outline-style: none; padding: 0px; text-decoration: initial;"><span style="font-size: small;">Creating iGoogle UI for SharePoint 2010/SharePoint 2013 - Part IV : Control Adapters</span></a></h3>
</li>
<li><h3 class="post-title entry-title" style="background-color: white; background-image: url(http://www.templatesimages.com/images/Minyx20/thdotsH.gif); background-position: 0% 100%; background-repeat: repeat no-repeat; color: #333333; font-family: 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; font-weight: normal; letter-spacing: -1px; line-height: 18px; margin: 0px; padding: 6px 0px;">
<a href="http://digsharepoint.blogspot.com/2013/02/creating-igoogle-ui-for-sharepoint_349.html" style="color: #6699cc; margin: 0px; outline-style: none; padding: 0px; text-decoration: initial;"><span style="font-size: small;">Creating iGoogle UI for SharePoint 2010/SharePoint 2013 - Part V : SharePoint 2010 Integration</span></a></h3>
</li>
</ol>
<br />
<h2>
Overview</h2>
In Part Five, we will take the previous posts and show you how to get it into SharePoint 2010. I’ll show how to create the Visual Studio Project, and then deploy the assets into SharePoint to create a working example.<br />
<h2>
Visual Studio Project & Assets</h2>
For this post will be using Visual Studio 2010 as our development platform. As part of my default development build i like to have the following VS plug-ins installed.<br />
<ul>
<li><a href="http://wspbuilder.codeplex.com/downloads/get/94507">WSPBuilder 2010</a></li>
<li><a href="http://cksdev.codeplex.com/">CKSDev</a></li>
<li><a href="http://archive.msdn.microsoft.com/SPDisposeCheck">SPDisposeCheck</a></li>
</ul>
For this post, we will be using Visual Studio 2010 as our development platform. As part of my default development build, I like to have the following VS plug-ins installed:<br />
<h2>
SPI’s & Features</h2>
Our project will contain the following SPI’s (SharePoint Item) to deploy the required assets.<br />
<ul>
<li> Module – This will deploy an iGoogle.aspx page with the configured WebPart Zones, and some dummy content editor webparts (CEWP) to show a working example.</li>
<li>Mapped Folder – A Mapped folder to the /_layouts directory will be used to deploy the css, images, and javascript files required and created from the first three parts of this series.</li>
<li>Control Adapter – Although technically not an SPI, the control adapter code from the previous post will also be created.</li>
</ul>
The Project will contain only a single feature which will deploy all the assets required for the iGoogle interface. This will be a SITE scoped feature with an event receiver to manage the addition of values to the compact.browser file.<br />
<h2>
Visual Studio</h2>
The first step for this and pretty much every other SharePoint Project is to fire up Visual Studio 2010 and create a new SharePoint 2010 Project. Call the project LifeInSharePoint.iGoogle. On the next screen we would also like to create this as a FARM solution. Sandbox solutions will not work as control adapters cannot be deployed using a Sandbox Solution.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieMUpdzd7ml-x1jeo8lZRybRqyZWWqvY_OpZpKRrtxKCAPTLRPxGH-EK2dvMjBpEDGYB-Zzqu6sgoO0B4_pNh97AGMQJ4h7MN-l4bwm9409oOw5TXPIAWEAyBUNSvN1JsqueYR1vTdhf0/s1600/farm.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="316" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieMUpdzd7ml-x1jeo8lZRybRqyZWWqvY_OpZpKRrtxKCAPTLRPxGH-EK2dvMjBpEDGYB-Zzqu6sgoO0B4_pNh97AGMQJ4h7MN-l4bwm9409oOw5TXPIAWEAyBUNSvN1JsqueYR1vTdhf0/s400/farm.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
Now that we have a project created, we first need to create some folders to contain our SPI’s. I like to organise my folders in a manner that I feel makes it easier to understand, so I will first create a <strong>Common</strong> folder which will contain a sub folder called <strong>ControlAdapters</strong>. <em><strong>NOTE: I do not have spaces in my folder names as visual studio will replace them with “_” in namespaces</strong></em>. I will now create another top level folder called <strong>Root</strong> and within this I will create another folder called <strong>Content</strong>. These two folders will contain the module that will deploy the iGoogle.aspx page and place WebParts onto the page. To ensure that we can access the images, js and css from anywhere, we will place them in the /_layouts folder. To deploy these to the Layouts folder from Visual Studio is very simple. Firstly you will need to right click on the project in Visual Studio > Add > SharePoint “Layouts” Mapped Folder.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8Fn8NLQjPeQ5ZRRYJNdyCImejWfoBsA8Xdo-GgNWj4kOVnXynWzTP-GtjiyOQ1ndXKiW-gKTglRdXM0X3m3XtLvBe2U_vX8P9KcUY3SHRpIAfByGUo4Jvz74BVHXdTjrg9iA7-sW3JsA/s1600/layoutsfolder.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="145" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8Fn8NLQjPeQ5ZRRYJNdyCImejWfoBsA8Xdo-GgNWj4kOVnXynWzTP-GtjiyOQ1ndXKiW-gKTglRdXM0X3m3XtLvBe2U_vX8P9KcUY3SHRpIAfByGUo4Jvz74BVHXdTjrg9iA7-sW3JsA/s400/layoutsfolder.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
This will create you a project named sub folder which we can use to place our css etc. Once this has been done your folder structure should look like this.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiT2mWBh7ktWXVpNYzU8HDUrAj4LuL5jgAczY_IeYN5kaQ2cUtCqwvyTchoECeFGTCEndmIIgjIYaP719SlSwaTS6TdX5eEDVN8G7nBscLOmtzPkap_RrfwFZNIbei9Ldv9KE4_G_eInsc/s1600/folderstructure.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiT2mWBh7ktWXVpNYzU8HDUrAj4LuL5jgAczY_IeYN5kaQ2cUtCqwvyTchoECeFGTCEndmIIgjIYaP719SlSwaTS6TdX5eEDVN8G7nBscLOmtzPkap_RrfwFZNIbei9Ldv9KE4_G_eInsc/s1600/folderstructure.png" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
Now that I have the basic folder structure, I will now create a new a new class file for my ControlAdapter called WebPartRenderControlAdapter.cs. For the info on how to create and what goes into this class file, please see the previous post where I go into a lot more detail. <span style="color: black; font-family: 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; letter-spacing: -1px; line-height: 18px; margin: 0px; outline-style: none; padding: 0px; text-decoration: initial;"><a href="http://digsharepoint.blogspot.com/2013/02/creating-igoogle-ui-for-sharepoint_5146.html" style="font-family: 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; letter-spacing: -1px; line-height: 18px; margin: 0px; outline-style: none; padding: 0px; text-decoration: initial;">Creating iGoogle UI for SharePoint 2010/SharePoint 2013 - Part IV : Control Adapters</a></span></div>
<div class="separator" style="clear: both; text-align: left;">
</div>
The next step is to add the CSS, JS, and Image that we created in the first three parts of this blog series. (These will be available at the end of this post) in the supplied zip file.<br />
<h2>
Adding Content & Pages</h2>
Next, we need to create the root content module. This module contains two items. The first is the Elements.xml file which will contain the XML required to deploy our page, and the second item is the default.aspx page which we will provision. This default.aspx page contains the HTML snippets from the first couple of posts in this series as well as the references to our javascript and css which we are storing above in the /_layouts folder. Below is a snippet from within the default.aspx page.<br />
<br />
<br />
<div class="container">
<div class="line number1 index0 alt2">
<code class="csharp plain"><asp:Content ContentPlaceHolderId=</code><code class="csharp string">"PlaceHolderMain"</code> <code class="csharp plain">runat=</code><code class="csharp string">"server"</code><code class="csharp plain">></code></div>
<div class="line number2 index1 alt1">
<code class="csharp spaces"> </code><code class="csharp plain"><table cellspacing=</code><code class="csharp string">"0"</code> <code class="csharp plain">border=</code><code class="csharp string">"0"</code> <code class="csharp plain">width=</code><code class="csharp string">"100%"</code><code class="csharp plain">></code></div>
<div class="line number3 index2 alt2">
<code class="csharp spaces"> </code><code class="csharp plain"><tr </code><code class="csharp keyword">class</code><code class="csharp plain">=</code><code class="csharp string">"s4-die"</code><code class="csharp plain">></code></div>
<div class="line number4 index3 alt1">
<code class="csharp spaces"> </code><code class="csharp plain"><td </code><code class="csharp keyword">class</code><code class="csharp plain">=</code><code class="csharp string">"ms-pagebreadcrumb"</code><code class="csharp plain">></code></div>
<div class="line number5 index4 alt2">
<code class="csharp spaces"> </code><code class="csharp plain"><asp:SiteMapPath SiteMapProvider=</code><code class="csharp string">"SPContentMapProvider"</code> <code class="csharp plain">id=</code><code class="csharp string">"ContentMap"</code> <code class="csharp plain">SkipLinkText=</code><code class="csharp string">""</code> <code class="csharp plain">NodeStyle-CssClass=</code><code class="csharp string">"ms-sitemapdirectional"</code> <code class="csharp plain">runat=</code><code class="csharp string">"server"</code><code class="csharp plain">/></code></div>
<div class="line number6 index5 alt1">
<code class="csharp spaces"> </code><code class="csharp plain"></td></code></div>
<div class="line number7 index6 alt2">
<code class="csharp spaces"> </code><code class="csharp plain"></tr></code></div>
<div class="line number8 index7 alt1">
<code class="csharp spaces"> </code><code class="csharp plain"><tr></code></div>
<div class="line number9 index8 alt2">
<code class="csharp spaces"> </code><code class="csharp plain"><td </code><code class="csharp keyword">class</code><code class="csharp plain">=</code><code class="csharp string">"ms-webpartpagedescription"</code><code class="csharp plain">><SharePoint:ProjectProperty Property=</code><code class="csharp string">"Description"</code> <code class="csharp plain">runat=</code><code class="csharp string">"server"</code><code class="csharp plain">/></td></code></div>
<div class="line number10 index9 alt1">
<code class="csharp spaces"> </code><code class="csharp plain"></tr></code></div>
<div class="line number11 index10 alt2">
<code class="csharp spaces"> </code><code class="csharp plain"><tr></code></div>
<div class="line number12 index11 alt1">
<code class="csharp spaces"> </code><code class="csharp plain"><td></code></div>
<div class="line number13 index12 alt2">
<code class="csharp spaces"> </code><code class="csharp plain"><table width=</code><code class="csharp string">"100%"</code> <code class="csharp plain">cellpadding=</code><code class="csharp string">"0"</code> <code class="csharp plain">cellspacing=</code><code class="csharp string">"0"</code> <code class="csharp plain">style=</code><code class="csharp string">"padding: 5px 10px 10px 10px;"</code><code class="csharp plain">></code></div>
<div class="line number14 index13 alt1">
<code class="csharp spaces"> </code><code class="csharp plain"><tr></code></div>
<div class="line number15 index14 alt2">
<code class="csharp spaces"> </code><code class="csharp plain"><td valign=</code><code class="csharp string">"top"</code><code class="csharp plain">></code></div>
<div class="line number16 index15 alt1">
<code class="csharp spaces"> </code><code class="csharp plain"><div </code><code class="csharp keyword">class</code><code class="csharp plain">=</code><code class="csharp string">'column'</code> <code class="csharp plain">id=</code><code class="csharp string">'leftCol'</code><code class="csharp plain">></code></div>
<div class="line number17 index16 alt2">
<code class="csharp spaces"> </code><code class="csharp plain"><WebPartPages:WebPartZone runat=</code><code class="csharp string">"server"</code> <code class="csharp plain">FrameType=</code><code class="csharp string">"TitleBarOnly"</code> <code class="csharp plain">ID=</code><code class="csharp string">"Left"</code> <code class="csharp plain">Title=</code><code class="csharp string">"iGoogle Left"</code> <code class="csharp plain">/></code></div>
<div class="line number18 index17 alt1">
<code class="csharp spaces"> </code><code class="csharp plain"></div></code></div>
<div class="line number19 index18 alt2">
<code class="csharp spaces"> </code><code class="csharp plain"><div </code><code class="csharp keyword">class</code><code class="csharp plain">=</code><code class="csharp string">'column'</code> <code class="csharp plain">id=</code><code class="csharp string">'middleCol'</code><code class="csharp plain">></code></div>
<div class="line number20 index19 alt1">
<code class="csharp spaces"> </code><code class="csharp plain"><WebPartPages:WebPartZone runat=</code><code class="csharp string">"server"</code> <code class="csharp plain">FrameType=</code><code class="csharp string">"TitleBarOnly"</code> <code class="csharp plain">ID=</code><code class="csharp string">"Center"</code> <code class="csharp plain">Title=</code><code class="csharp string">"iGoogle Center"</code> <code class="csharp plain">/></code></div>
<div class="line number21 index20 alt2">
<code class="csharp spaces"> </code><code class="csharp plain"></div></code></div>
<div class="line number22 index21 alt1">
<code class="csharp spaces"> </code><code class="csharp plain"><div </code><code class="csharp keyword">class</code><code class="csharp plain">=</code><code class="csharp string">'column'</code> <code class="csharp plain">id=</code><code class="csharp string">'rightCol'</code><code class="csharp plain">></code></div>
<div class="line number23 index22 alt2">
<code class="csharp spaces"> </code><code class="csharp plain"><WebPartPages:WebPartZone runat=</code><code class="csharp string">"server"</code> <code class="csharp plain">FrameType=</code><code class="csharp string">"TitleBarOnly"</code> <code class="csharp plain">ID=</code><code class="csharp string">"Right"</code> <code class="csharp plain">Title=</code><code class="csharp string">"iGoogle Right"</code> <code class="csharp plain">/></code></div>
<div class="line number24 index23 alt1">
<code class="csharp spaces"> </code><code class="csharp plain"></div></code></div>
<div class="line number25 index24 alt2">
<code class="csharp spaces"> </code><code class="csharp plain"></td></code></div>
<div class="line number26 index25 alt1">
<code class="csharp spaces"> </code><code class="csharp plain"></tr></code></div>
<div class="line number27 index26 alt2">
<code class="csharp spaces"> </code><code class="csharp plain"><tr></code></div>
<div class="line number28 index27 alt1">
<code class="csharp spaces"> </code><code class="csharp plain"><td colspan=</code><code class="csharp string">"7"</code><code class="csharp plain">></code></div>
<div class="line number29 index28 alt2">
<code class="csharp spaces"> </code><code class="csharp plain"><div id=</code><code class="csharp string">'toolbox-wrapper'</code><code class="csharp plain">></code></div>
<div class="line number30 index29 alt1">
</div>
<div class="line number31 index30 alt2">
<code class="csharp spaces"> </code><code class="csharp plain"><div id=</code><code class="csharp string">'toolbox-controls'</code><code class="csharp plain">></code></div>
<div class="line number32 index31 alt1">
<code class="csharp spaces"> </code><code class="csharp plain"><div </code><code class="csharp keyword">class</code><code class="csharp plain">=</code><code class="csharp string">'badge'</code><code class="csharp plain">></div> </code></div>
<div class="line number33 index32 alt2">
<code class="csharp spaces"> </code><code class="csharp plain"><p </code><code class="csharp keyword">class</code><code class="csharp plain">=</code><code class="csharp string">"slide"</code><code class="csharp plain">><a href=</code><code class="csharp string">"#"</code> <code class="csharp keyword">class</code><code class="csharp plain">=</code><code class="csharp string">"btn-slide"</code><code class="csharp plain">>Toolbox</a></p> </code></div>
<div class="line number34 index33 alt1">
<code class="csharp spaces"> </code><code class="csharp plain"><p </code><code class="csharp keyword">class</code><code class="csharp plain">=</code><code class="csharp string">"reset"</code><code class="csharp plain">><a href=</code><code class="csharp string">"#"</code> <code class="csharp keyword">class</code><code class="csharp plain">=</code><code class="csharp string">"btn-reset"</code><code class="csharp plain">>Reset Widgets</a></p> </code></div>
<div class="line number35 index34 alt2">
<code class="csharp spaces"> </code><code class="csharp plain"></div></code></div>
<div class="line number36 index35 alt1">
<code class="csharp spaces"> </code><code class="csharp plain"><div </code><code class="csharp keyword">class</code><code class="csharp plain">=</code><code class="csharp string">'column'</code> <code class="csharp plain">id=</code><code class="csharp string">'toolbox'</code><code class="csharp plain">></code></div>
<div class="line number37 index36 alt2">
</div>
<div class="line number38 index37 alt1">
<code class="csharp spaces"> </code><code class="csharp plain"></div> </code></div>
<div class="line number39 index38 alt2">
<code class="csharp spaces"> </code><code class="csharp plain"><div style=</code><code class="csharp string">'clear:both;'</code><code class="csharp plain">></div> </code></div>
<div class="line number40 index39 alt1">
<code class="csharp spaces"> </code><code class="csharp plain"></div> </code></div>
<div class="line number41 index40 alt2">
<code class="csharp spaces"> </code><code class="csharp plain"></td></code></div>
<div class="line number42 index41 alt1">
<code class="csharp spaces"> </code><code class="csharp plain"></tr></code></div>
<div class="line number43 index42 alt2">
<code class="csharp spaces"> </code><code class="csharp plain"></table></code></div>
<div class="line number44 index43 alt1">
<code class="csharp spaces"> </code><code class="csharp plain"></td></code></div>
<div class="line number45 index44 alt2">
<code class="csharp spaces"> </code><code class="csharp plain"></tr></code></div>
<div class="line number46 index45 alt1">
<code class="csharp spaces"> </code><code class="csharp plain"></table></code></div>
<div class="line number47 index46 alt2">
</div>
<div class="line number48 index47 alt1">
<code class="csharp spaces"> </code><code class="csharp plain"><link rel=</code><code class="csharp string">"stylesheet"</code> <code class="csharp plain">type=</code><code class="csharp string">"text/css"</code> <code class="csharp plain">media=</code><code class="csharp string">"all"</code> <code class="csharp plain">href=</code><code class="csharp string">"/_layouts/LifeInSharePoint.iGoogle/css/style.css"</code> <code class="csharp plain">/></code></div>
<div class="line number49 index48 alt2">
<code class="csharp spaces"> </code><code class="csharp plain"><!-- Load the jQuery Libraries --></code></div>
<div class="line number50 index49 alt1">
<code class="csharp spaces"> </code><code class="csharp plain"><script src=</code><code class="csharp string">"/_layouts/LifeInSharePoint.iGoogle/js/jquery-1.6.2.min.js"</code> <code class="csharp plain">type=</code><code class="csharp string">"text/javascript"</code><code class="csharp plain">></script></code></div>
<div class="line number51 index50 alt2">
<code class="csharp spaces"> </code><code class="csharp plain"><script src=</code><code class="csharp string">"/_layouts/LifeInSharePoint.iGoogle/js/jquery-ui-1.8.16.custom.min.js"</code> <code class="csharp plain">type=</code><code class="csharp string">"text/javascript"</code><code class="csharp plain">></script> </code></div>
<div class="line number52 index51 alt1">
<code class="csharp spaces"> </code><code class="csharp plain"><script type=</code><code class="csharp string">"text/javascript"</code> <code class="csharp plain">src=</code><code class="csharp string">"/_layouts/LifeInSharePoint.iGoogle/js/iColorPicker.js"</code><code class="csharp plain">></script> </code></div>
<div class="line number53 index52 alt2">
<code class="csharp spaces"> </code><code class="csharp plain"><script type=</code><code class="csharp string">"text/javascript"</code> <code class="csharp plain">src=</code><code class="csharp string">"/_layouts/LifeInSharePoint.iGoogle/js/jquery.cookie.js"</code><code class="csharp plain">></script> </code></div>
<div class="line number54 index53 alt1">
<code class="csharp spaces"> </code><code class="csharp plain"><script type=</code><code class="csharp string">"text/javascript"</code> <code class="csharp plain">src=</code><code class="csharp string">"/_layouts/LifeInSharePoint.iGoogle/js/jquery.corner.js"</code><code class="csharp plain">></script> </code></div>
<div class="line number55 index54 alt2">
<code class="csharp spaces"> </code><code class="csharp plain"><!-- script file to add your own JavaScript --></code></div>
<div class="line number56 index55 alt1">
<code class="csharp spaces"> </code><code class="csharp plain"><script type=</code><code class="csharp string">"text/javascript"</code> <code class="csharp plain">src=</code><code class="csharp string">"/_layouts/LifeInSharePoint.iGoogle/js/script.js"</code><code class="csharp plain">></script> </code></div>
<div class="line number57 index56 alt2">
<code class="csharp plain"></asp:Content></code></div>
<div class="line number57 index56 alt2">
<code class="csharp plain"><br /></code></div>
<div class="line number57 index56 alt2">
<code class="csharp plain">As you can see I have made some small changes by placing our three columns within a table to keep things nice and neat. The script references have also been updated to point to our deployed assets. The elements.xml file is very simple. It takes the default.aspx page and deploys it to the root of the current site creating an iGoogle.aspx page at that location.</code></div>
<div class="line number57 index56 alt2">
<br /></div>
</div>
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: #507090;"><?xml version="1.0" encoding="utf-8"?></span>
<span style="color: #007000;"><Elements</span> <span style="color: #0000c0;">xmlns=</span><span style="background-color: #fff0f0;">"http://schemas.microsoft.com/sharepoint/"</span><span style="color: #007000;">></span>
<span style="color: #007000;"><Module</span> <span style="color: #0000c0;">Name=</span><span style="background-color: #fff0f0;">"Root"</span> <span style="color: #0000c0;">Url=</span><span style="background-color: #fff0f0;">""</span> <span style="color: #0000c0;">Path=</span><span style="background-color: #fff0f0;">""</span><span style="color: #007000;">></span>
<span style="color: grey;"><!-- iGoogle PAGE --></span>
<span style="color: #007000;"><File</span> <span style="color: #0000c0;">Name=</span><span style="background-color: #fff0f0;">"iGoogle.aspx"</span> <span style="color: #0000c0;">Url=</span><span style="background-color: #fff0f0;">"Root.Content.Pages/default.aspx"</span> <span style="color: #0000c0;">NavBarHome=</span><span style="background-color: #fff0f0;">"True"</span><span style="color: #007000;">></span>
<span style="color: #007000;"><Property</span> <span style="color: #0000c0;">Name=</span><span style="background-color: #fff0f0;">"Title"</span> <span style="color: #0000c0;">Value=</span><span style="background-color: #fff0f0;">"SharePoint iGoogle Interface"</span> <span style="color: #007000;">/></span>
<span style="color: #007000;"><Property</span> <span style="color: #0000c0;">Name=</span><span style="background-color: #fff0f0;">"ContentType"</span> <span style="color: #0000c0;">Value=</span><span style="background-color: #fff0f0;">"Document"</span> <span style="color: #007000;">/></span>
<span style="color: #007000;"></File></span>
<span style="color: #007000;"></Module></span>
<span style="color: #007000;"></Elements></span>
</pre>
</div>
<br />
<br />
As you can see there is not a lot to it. We are setting the name of the deployed file to iGoogle.aspx and the Url in this case is the relative url within the project, NOT the location it will appear on the site, a common mistake I have made many times. If you wanted to place the page in another location you can modify URL and Path attributes in the <module> tag to point to another location. Since we want to place the page on the root, these are left blank.<br />
<h2>
Adding WebParts</h2>
The final addition to this elements.xml file is to add some default WebParts on to the page. For this demo we are going to use some Content Editor WebParts which will have some dummy Lorem Ipsum text within. (You can replace the xml with some other WebParts if you like, as long as you know the XML) The XML element you need to add WebParts on to the page is the <AllUsersWebPart> Node. This node has attributes which we use to define the order on the page, as well as the WebPart Zone the WebPart is to appear in. The Snippet below shows a single item.<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: #507090;"><?xml version="1.0" encoding="utf-8"?></span>
<span style="color: #007000;"><Elements</span> <span style="color: #0000c0;">xmlns=</span><span style="background-color: #fff0f0;">"http://schemas.microsoft.com/sharepoint/"</span><span style="color: #007000;">></span>
<span style="color: #007000;"><Module</span> <span style="color: #0000c0;">Name=</span><span style="background-color: #fff0f0;">"Root"</span> <span style="color: #0000c0;">Url=</span><span style="background-color: #fff0f0;">""</span> <span style="color: #0000c0;">Path=</span><span style="background-color: #fff0f0;">""</span><span style="color: #007000;">></span>
<span style="color: grey;"><!-- iGoogle PAGE --></span>
<span style="color: #007000;"><File</span> <span style="color: #0000c0;">Name=</span><span style="background-color: #fff0f0;">"iGoogle.aspx"</span> <span style="color: #0000c0;">Url=</span><span style="background-color: #fff0f0;">"Root.Content.Pages/default.aspx"</span> <span style="color: #0000c0;">NavBarHome=</span><span style="background-color: #fff0f0;">"True"</span><span style="color: #007000;">></span>
<span style="color: #007000;"><Property</span> <span style="color: #0000c0;">Name=</span><span style="background-color: #fff0f0;">"Title"</span> <span style="color: #0000c0;">Value=</span><span style="background-color: #fff0f0;">"SharePoint iGoogle Interface"</span> <span style="color: #007000;">/></span>
<span style="color: #007000;"><Property</span> <span style="color: #0000c0;">Name=</span><span style="background-color: #fff0f0;">"ContentType"</span> <span style="color: #0000c0;">Value=</span><span style="background-color: #fff0f0;">"Document"</span> <span style="color: #007000;">/></span>
<span style="color: #007000;"><AllUsersWebPart</span> <span style="color: #0000c0;">WebPartOrder=</span><span style="background-color: #fff0f0;">"1"</span> <span style="color: #0000c0;">WebPartZoneID=</span><span style="background-color: #fff0f0;">"Left"</span><span style="color: #007000;">></span>
<span style="color: #507090;"><![CDATA[ </span>
<span style="color: #507090;"><WebPart xmlns="http://schemas.microsoft.com/WebPart/v2" </span>
<span style="color: #507090;"> xmlns:cewp="http://schemas.microsoft.com/WebPart/v2/ContentEditor"> </span>
<span style="color: #507090;"> <Assembly>Microsoft.SharePoint,</span>
<span style="color: #507090;"> Version=14.0.0.0, </span>
<span style="color: #507090;">Culture=neutral, PublicKeyToken=71e9bce111e9429c</span>
<span style="color: #507090;"></Assembly> </span>
<span style="color: #507090;"><TypeName></span>
<span style="color: #507090;">Microsoft.SharePoint.WebPartPages.ContentEditorWebPart</span>
<span style="color: #507090;"></TypeName> </span>
<span style="color: #507090;"><Title></span>
<span style="color: #507090;">Left Content Editor</span>
<span style="color: #507090;"></Title> <FrameType>None</FrameType> <cewp:Content> </span>
<span style="color: #507090;">Duis sit amet turpis risus. Proin turpis orci, tristique porttitor venenatis eget, lacinia vitae dolor. Maecenas ultrices elementum est, ut dictum velit interdum vel. Maecenas vel urna eu quam rutrum aliquam eget quis dui. Nunc fermentum neque quis dolor facilisis hendrerit. Curabitur semper fermentum tortor, ut consequat turpis facilisis vel. Aliquam erat volutpat. Nam viverra molestie ipsum, vel tempus magna suscipit id.</span>
<span style="color: #507090;"> </cewp:Content></span>
<span style="color: #507090;"> </WebPart> </span>
<span style="color: #507090;"> ]]></span>
<span style="color: #007000;"></AllUsersWebPart></span>
<span style="color: #007000;"></File></span>
<span style="color: #007000;"></Module></span>
<span style="color: #007000;"></Elements></span>
</pre>
</div>
<br />
<br />
You can also see from the code above that we are surrounding the WebPart XML with a <![CDATA[]]> tag which means that the text within will be ignored by the XML Parser.<br />
<h2>
Creating the Feature</h2>
Now that we have nearly all the pieces of the puzzle, the next step is to create a feature in our solution which will deploy the items to SharePoint. You should notice in your project there is a <strong>Web</strong> scoped default feature called <strong>Feature1</strong>. We need to rename our feature to something more meaningful, so in the Solution Explorer right click and rename the feature. My preference for naming Features is as follows:<br />
<strong>SCOPE.ProjectName.FeatureName</strong><br />
The reason for this is that there is no quick and easy way to know the scope of a feature from glancing at the solution explorer as all icons are the same. Therefore in our solution the feature will be:<br />
<strong>SITE.LifeInSharePoint.iGoogle.Assets</strong><br />
The next step is to double click on this feature and it should open the feature management screen on the left side of the window. Within this window you are able to change the Display Title and Description as well as manage the items in the feature. We will call our feature <strong>LifeInSharePoint.iGoogle</strong>, the description can be what ever you please and the Scope should be set to <strong>SITE</strong>. Finally add the Root.Content.Pages SPI into the feature and we are nearly complete.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLMkxwOQ3H6xrbh240DIsHfO2o2vvEnkFOvZDTT5QGjnq2pGAYpGNJAeiZP2_Nf0ByHVykyvYe7Mo-XGWQsyVpG5LjnXa9SbjR9zkt4DsuORiKyLuaM3RJIzqVYdtMzWrpj7T59_JsQ_4/s1600/feature.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="348" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLMkxwOQ3H6xrbh240DIsHfO2o2vvEnkFOvZDTT5QGjnq2pGAYpGNJAeiZP2_Nf0ByHVykyvYe7Mo-XGWQsyVpG5LjnXa9SbjR9zkt4DsuORiKyLuaM3RJIzqVYdtMzWrpj7T59_JsQ_4/s400/feature.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<h2>
Writing the Feature Receiver</h2>
For those who remember the last post, the control adapter requires an entry into the compact.browser file. This entry registers our control adapter for use and it would be very useful if this was added automatically as part of our deployment. To do this we will need to create a small feature receiver to do this for us. To add a receiver, right click on the feature and click the <strong>Add Event Receiver</strong> link.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhB1XdBB-5ITmyQPhty8EJ3sCH9VmEgI0c-_sZrAVTMW9ik5X7mU7NLAVlG5cmvvUIqhfo3GOvYFfgInc2g8jSr0rgDgZ6x3jNyZ47zsSBynkv_8MStFTPaHTnI2vm4RnfDD5WYMFxFUs/s1600/add-event.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="76" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhB1XdBB-5ITmyQPhty8EJ3sCH9VmEgI0c-_sZrAVTMW9ik5X7mU7NLAVlG5cmvvUIqhfo3GOvYFfgInc2g8jSr0rgDgZ6x3jNyZ47zsSBynkv_8MStFTPaHTnI2vm4RnfDD5WYMFxFUs/s400/add-event.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
</div>
We are only going to manage the addition of the code to the compact.browser and not the retraction from the solution. This can be added to your solution if you wish but to save time I will ignore it.<br />
Our first step is to create two string constants which will contain the Control Adapter Type and the Assembly Name of the Solution. The Assembly name will only contain the first part as the full assembly name will be retrieved later through reflection.<br />
<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: green; font-weight: bold;">private</span> <span style="color: green; font-weight: bold;">const</span> <span style="color: #303090; font-weight: bold;">string</span> WEBPART_ADAPTER_CONTROL_TYPE = <span style="background-color: #fff0f0;">"System.Web.UI.WebControls.WebParts.WebPartZone"</span>;
<span style="color: green; font-weight: bold;">private</span> <span style="color: green; font-weight: bold;">const</span> <span style="color: #303090; font-weight: bold;">string</span> WEBPART_ADAPTER_TYPE = <span style="background-color: #fff0f0;">"LifeInSharePoint.iGoogle.Common.ControlAdapters.WebPartRenderControlAdapter,"</span>;
</pre>
</div>
<br />
The next step is to uncomment the <strong>FeatureActivated</strong> method and add the following code in.<br />
<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: green; font-weight: bold;">public</span> <span style="color: green; font-weight: bold;">override</span> <span style="color: green; font-weight: bold;">void</span> <span style="color: #0060b0; font-weight: bold;">FeatureActivated</span>(SPFeatureReceiverProperties properties){
<span style="color: grey;">// Load up the Compat.browser and add the the control adaptor </span>
<span style="color: grey;">// Get the site collection </span>
SPSite SiteCollection = (SPSite)properties.Feature.Parent;
UpdateCompatBrowser(SiteCollection);
}
</pre>
</div>
<br />
This code simply gets the current Site Collection from the features property collection and then passes that SPSite object to the <strong>UpdateCompactBrowser</strong> method which is explained below in the code comments for each line.<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: grey;">/// <summary></span>
<span style="color: grey;">/// Add our control adaptor to the Compat.Browser file</span>
<span style="color: grey;">/// </summary></span>
<span style="color: grey;">/// <param name="SiteCollection"></param></span>
<span style="color: green; font-weight: bold;">private</span> <span style="color: green; font-weight: bold;">void</span> <span style="color: #0060b0; font-weight: bold;">UpdateCompatBrowser</span>(SPSite SiteCollection){
<span style="color: grey;">//Loop through each IISSetting in the current site collections Web App</span>
<span style="color: green; font-weight: bold;">foreach</span> (<span style="color: #303090; font-weight: bold;">var</span> IISSetting <span style="color: green; font-weight: bold;">in</span> SiteCollection.WebApplication.IisSettings)
{
<span style="color: grey;">//Create a path to the compact.browser </span>
String pathToCompatBrowser = IISSetting.Value.Path + <span style="background-color: #fff0f0;">@"\App_Browsers\compat.browser"</span>;
<span style="color: grey;">//Load the Xml element</span>
XElement compatBrowser = XElement.Load
(pathToCompatBrowser);
<span style="color: grey;">//Select the correct element </span>
XElement existingElement = compatBrowser.XPathSelectElement(String.Format( <span style="background-color: #fff0f0;">"./browser[@refID = \"default\"]/controlAdapters/adapter[@controlType=\"{0}\" and @adapterType=\"{1}\"]"</span>, WEBPART_ADAPTER_CONTROL_TYPE, WEBPART_ADAPTER_TYPE + Assembly.GetExecutingAssembly().FullName));
<span style="color: grey;">//If it cannot find the element then it will add it </span>
<span style="color: green; font-weight: bold;">if</span> (existingElement == <span style="color: green; font-weight: bold;">null</span>) {
<span style="color: grey;">// Get the node for the default browser. </span>
XElement controlAdapters = compatBrowser.XPathSelectElement(<span style="background-color: #fff0f0;">"./browser[@refID = \"default\"]/controlAdapters"</span>);
<span style="color: grey;">// Create and add the markup</span>
XElement newAdapter = <span style="color: green; font-weight: bold;">new</span> XElement(<span style="background-color: #fff0f0;">"adapter"</span>);
newAdapter.SetAttributeValue(<span style="background-color: #fff0f0;">"controlType"</span>, WEBPART_ADAPTER_CONTROL_TYPE);
newAdapter.SetAttributeValue(<span style="background-color: #fff0f0;">"adapterType"</span>, WEBPART_ADAPTER_TYPE + Assembly.GetExecutingAssembly().FullName);
controlAdapters.Add(newAdapter);
<span style="color: grey;">// Overwrite the old version of compat.browser with the new version </span>
compatBrowser.Save(pathToCompatBrowser);
}
}
}
</pre>
</div>
<br />
<br />
If we save all the items in the project, we are now ready to deploy our project to our site. When the feature activates it will run the code above which will make the necessary changes to the compact.browser file and our solution should work as expected.<br />
<h2>
Deployment & Testing</h2>
To deploy the solution we need to build the solution by right clicking on the project and clicking Build. After the project has been built and no errors are found, we can then deploy by again right clicking on the project and clicking Deploy. The default deployment configuration in Visual Studio will automatically activate the feature on the destination site. After deployment, navigate to the site and view the site collection features. We should see our feature deployed and activated.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3XhMAhzSENEhbBhQ19fb3x6ruzbxx15Pi8ImFOg2IkAE5LxuAjlZDwyJlJX9aknrJOSa-d165-DU_MqHp0ArDugAn9rMw31vVoAmHNo85kItby4UNRR8G7wIJIsudavUI9wKsy5NsrKM/s1600/featureactive.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="31" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3XhMAhzSENEhbBhQ19fb3x6ruzbxx15Pi8ImFOg2IkAE5LxuAjlZDwyJlJX9aknrJOSa-d165-DU_MqHp0ArDugAn9rMw31vVoAmHNo85kItby4UNRR8G7wIJIsudavUI9wKsy5NsrKM/s400/featureactive.png" width="400" /></a></div>
If we now navigate to the root of the site collection and change the url to http://[SITE URL]/igoogle.aspx, then you should see our newly deployed interface with 5 different CEWP with some Lorem Ipsum text.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkv4YhaeAeg0PK_9TlUTthD2gqfYRVv6knVoevzcV4Zs21V5gBfj9zc57r13ztU63FfESL50JpguzAw0j3k-w_Lw2qXqfQtOwmyH2HDft3mm_WX77dy_djd6WMJxjUZejweHFgJGio2So/s1600/deployed_small.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="225" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkv4YhaeAeg0PK_9TlUTthD2gqfYRVv6knVoevzcV4Zs21V5gBfj9zc57r13ztU63FfESL50JpguzAw0j3k-w_Lw2qXqfQtOwmyH2HDft3mm_WX77dy_djd6WMJxjUZejweHFgJGio2So/s400/deployed_small.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
You should now be able to drag and drop these WebParts around the page, close, and change the colour. When you have finished and navigate away, refresh the page and the WebParts will remember their states. If you edit the page you will see how the Control Adapter does not render in edit mode enabling you to add new WebParts. You can see below that I have added a new Image WebPart to show how easy it is to create new “Widgets”.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEik5xvlNbAWZUhWSRgvoTwuGFHi-Depkqkoe16FBjz0h3HUqT0q3atghy3I-gm3nNuzCyphHStBZ8MPE3zo0zM2oEMaZFzNrvNw71j1-QlXHDtfEt7LTSPDT1bic6szU5mIQBrQToVB_28/s1600/editmode.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="225" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEik5xvlNbAWZUhWSRgvoTwuGFHi-Depkqkoe16FBjz0h3HUqT0q3atghy3I-gm3nNuzCyphHStBZ8MPE3zo0zM2oEMaZFzNrvNw71j1-QlXHDtfEt7LTSPDT1bic6szU5mIQBrQToVB_28/s400/editmode.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<em><strong>NOTE: It is important to understand that this interface is designed for “Rollup” style WebParts. Due to how SharePoint 2010 and the Ribbon works with WebParts you may find some OOTB WebParts do not function fully. (Calendar WebPart, ListViewWebPart) The reason for some WebParts not working is that we are replacing the Chrome around the WebParts with our custom HTML (ControlAdapter). Many of the required ID’s etc are removed and therefore the Javascript that works with the Ribbon & Ajax fails. I am working on this and will post an update when I find a solution.</strong></em><br />
<h2>
Summary</h2>
In this post we have outlined how to get the iGoogle interface into a SharePoint environment. Using a Visual Studio 2010 Project we have deployed css, images and javascript, created and deployed a Control Adapter, and added a page full of WebParts on to a site. I hope this post gives you a stepping stone on how to implement something similar on your SharePoint Deployments. Below I have uploaded a link to my Solution ZIP file that you can use and test on your environments. I have not done lots of cross browser or different environment testing of the solution so should you find an issue let me know and I will try my best to find a solution. In the next post I will show you how you can use the techniques shown in this series to come up with some innovative designs and implementations.<br />
<h2>
Download</h2>
<a href="http://lifeinsharepoint.codeplex.com/downloads/get/389902">LifeInSharePoint.iGoogle.zip</a><br />
<br />
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<br />
<h2>
Series Content</h2>
<ol>
<li><h3 class="post-title entry-title" style="background-color: white; background-image: url(http://www.templatesimages.com/images/Minyx20/thdotsH.gif); background-position: 0% 100%; background-repeat: repeat no-repeat; color: #333333; font-family: 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; font-weight: normal; letter-spacing: -1px; line-height: 18px; margin: 0px; padding: 6px 0px;">
<a href="http://digsharepoint.blogspot.com/2013/02/creating-igoogle-ui-for-sharepoint.html" style="color: #6699cc; margin: 0px; outline-style: none; padding: 0px; text-decoration: initial;"><span style="font-size: small;">Creating iGoogle UI for SharePoint 2010/SharePoint 2013 - Part I : Overview, Concept, HTML Structure & Jquery Basics</span></a></h3>
</li>
<li><h3 class="post-title entry-title" style="background-color: white; background-image: url(http://www.templatesimages.com/images/Minyx20/thdotsH.gif); background-position: 0% 100%; background-repeat: repeat no-repeat; color: #333333; font-family: 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; font-weight: normal; letter-spacing: -1px; line-height: 18px; margin: 0px; padding: 6px 0px;">
<a href="http://digsharepoint.blogspot.com/2013/02/creating-igoogle-ui-for-sharepoint_19.html" style="color: #6699cc; margin: 0px; outline-style: none; padding: 0px; text-decoration: initial;"><span style="font-size: small;">Creating iGoogle UI for SharePoint 2010/SharePoint 2013 - Part II : Dragging, Dropping, Sorting and Collapsing</span></a></h3>
</li>
<li><h3 class="post-title entry-title" style="background-color: white; background-image: url(http://www.templatesimages.com/images/Minyx20/thdotsH.gif); background-position: 0% 100%; background-repeat: repeat no-repeat; color: #333333; font-family: 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; font-weight: normal; letter-spacing: -1px; line-height: 18px; margin: 0px; padding: 6px 0px;">
<a href="http://digsharepoint.blogspot.com/2013/02/creating-igoogle-ui-for-sharepoint_333.html" style="color: #ff3366; margin: 0px; outline-style: none; padding: 0px; text-decoration: initial;"><span style="font-size: small;">Creating iGoogle UI for SharePoint 2010/SharePoint 2013 - Part III : Saving WebPart states using Cookies</span></a></h3>
</li>
<li><h3 class="post-title entry-title" style="background-color: white; background-image: url(http://www.templatesimages.com/images/Minyx20/thdotsH.gif); background-position: 0% 100%; background-repeat: repeat no-repeat; color: #333333; font-family: 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; font-weight: normal; letter-spacing: -1px; line-height: 18px; margin: 0px; padding: 6px 0px;">
<a href="http://digsharepoint.blogspot.com/2013/02/creating-igoogle-ui-for-sharepoint_5146.html" style="color: #6699cc; margin: 0px; outline-style: none; padding: 0px; text-decoration: initial;"><span style="font-size: small;">Creating iGoogle UI for SharePoint 2010/SharePoint 2013 - Part IV : Control Adapters</span></a></h3>
</li>
<li><h3 class="post-title entry-title" style="background-color: white; background-image: url(http://www.templatesimages.com/images/Minyx20/thdotsH.gif); background-position: 0% 100%; background-repeat: repeat no-repeat; color: #333333; font-family: 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; font-weight: normal; letter-spacing: -1px; line-height: 18px; margin: 0px; padding: 6px 0px;">
<a href="http://digsharepoint.blogspot.com/2013/02/creating-igoogle-ui-for-sharepoint_349.html" style="color: #6699cc; margin: 0px; outline-style: none; padding: 0px; text-decoration: initial;"><span style="font-size: small;">Creating iGoogle UI for SharePoint 2010/SharePoint 2013 - Part V : SharePoint 2010 Integration</span></a></h3>
</li>
</ol>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-3888123222103988694.post-60120176005513118702013-02-19T04:27:00.000-05:002013-02-19T05:16:29.331-05:00Creating iGoogle UI for SharePoint 2010/SharePoint 2013 - Part IV : Control Adapters<br />
<h2>
Series Content</h2>
<ol>
<li><h3 class="post-title entry-title" style="background-color: white; background-image: url(http://www.templatesimages.com/images/Minyx20/thdotsH.gif); background-position: 0% 100%; background-repeat: repeat no-repeat; color: #333333; font-family: 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; font-weight: normal; letter-spacing: -1px; line-height: 18px; margin: 0px; padding: 6px 0px;">
<a href="http://digsharepoint.blogspot.com/2013/02/creating-igoogle-ui-for-sharepoint.html" style="color: #6699cc; margin: 0px; outline-style: none; padding: 0px; text-decoration: initial;"><span style="font-size: small;">Creating iGoogle UI for SharePoint 2010/SharePoint 2013 - Part I : Overview, Concept, HTML Structure & Jquery Basics</span></a></h3>
</li>
<li><h3 class="post-title entry-title" style="background-color: white; background-image: url(http://www.templatesimages.com/images/Minyx20/thdotsH.gif); background-position: 0% 100%; background-repeat: repeat no-repeat; color: #333333; font-family: 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; font-weight: normal; letter-spacing: -1px; line-height: 18px; margin: 0px; padding: 6px 0px;">
<a href="http://digsharepoint.blogspot.com/2013/02/creating-igoogle-ui-for-sharepoint_19.html" style="color: #6699cc; margin: 0px; outline-style: none; padding: 0px; text-decoration: initial;"><span style="font-size: small;">Creating iGoogle UI for SharePoint 2010/SharePoint 2013 - Part II : Dragging, Dropping, Sorting and Collapsing</span></a></h3>
</li>
<li><h3 class="post-title entry-title" style="background-color: white; background-image: url(http://www.templatesimages.com/images/Minyx20/thdotsH.gif); background-position: 0% 100%; background-repeat: repeat no-repeat; color: #333333; font-family: 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; font-weight: normal; letter-spacing: -1px; line-height: 18px; margin: 0px; padding: 6px 0px;">
<a href="http://digsharepoint.blogspot.com/2013/02/creating-igoogle-ui-for-sharepoint_333.html" style="color: #ff3366; margin: 0px; outline-style: none; padding: 0px; text-decoration: initial;"><span style="font-size: small;">Creating iGoogle UI for SharePoint 2010/SharePoint 2013 - Part III : Saving WebPart states using Cookies</span></a></h3>
</li>
<li><h3 class="post-title entry-title" style="background-color: white; background-image: url(http://www.templatesimages.com/images/Minyx20/thdotsH.gif); background-position: 0% 100%; background-repeat: repeat no-repeat; color: #333333; font-family: 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; font-weight: normal; letter-spacing: -1px; line-height: 18px; margin: 0px; padding: 6px 0px;">
<a href="http://digsharepoint.blogspot.com/2013/02/creating-igoogle-ui-for-sharepoint_5146.html" style="color: #6699cc; margin: 0px; outline-style: none; padding: 0px; text-decoration: initial;"><span style="font-size: small;">Creating iGoogle UI for SharePoint 2010/SharePoint 2013 - Part IV : Control Adapters</span></a></h3>
</li>
<li><h3 class="post-title entry-title" style="background-color: white; background-image: url(http://www.templatesimages.com/images/Minyx20/thdotsH.gif); background-position: 0% 100%; background-repeat: repeat no-repeat; color: #333333; font-family: 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; font-weight: normal; letter-spacing: -1px; line-height: 18px; margin: 0px; padding: 6px 0px;">
<a href="http://digsharepoint.blogspot.com/2013/02/creating-igoogle-ui-for-sharepoint_349.html" style="color: #6699cc; margin: 0px; outline-style: none; padding: 0px; text-decoration: initial;"><span style="font-size: small;">Creating iGoogle UI for SharePoint 2010/SharePoint 2013 - Part V : SharePoint 2010 Integration</span></a></h3>
</li>
</ol>
<br />
<h2>
Overview</h2>
In Part Four we will take the take a look at how we will create our widgets in SharePoint 2010. As the title of this post mentions we are going to use what is known as a Control Adapter. This Post will outline what they are, how they work, and how we are going to use them in this series. There will also be a code snippet to explain how we can use it.<br />
<h2>
Control Adapters</h2>
Rather than try to explain these myself I thought it would be easier to grab a snippet from a <a href="http://msdn.microsoft.com/en-us/magazine/cc163543.aspx">Microsoft Article</a> which i think does a great job of explaining what and how they work from an architectural level and in more detail than I could probably achieve .<br />
<blockquote>
At their core, control adapters are simply a way of providing different renderings for controls without actually modifying the controls themselves. Because control adapters are designed to provide alternate renderings for different clients, you specify control adapter mappings in a .browser file, which is where associations between User Agent strings and browser capabilities are defined. The control adapter class itself must inherit from the System.Web.UI.Adapters.ControlAdapter, which is an abstract base class that looks much like the Control base class, with events for Init, Load, PreRender, and Unload, as well as a virtual Render method.</blockquote>
The next step to use a control adapter is to derivatively bind your adapter to a specific control. To do this you use a Browser Definition File Schema which is found in the App_Browsers folder of the IIS WebSite you are using.<br />
<h2>
How are we going to use Control Adapters?</h2>
Now we know what a control adapter is, what do we need them for? Well, if we are going to have our WebPart rendering like we have built in the previous three post then we will need to use a Control Adapter to do the hard work for us. WebParts can be placed onto a SharePoint 2010 Page in many ways. They can be either added to content inline using the rich content editor, they can be added directly into a page layout or masterpage, or (the most common way) is that they can be placed into a WebPart zone. It is this final method that we are going to use to modify the rendering of our WebParts.<br />
A basic WebPart Control Adapter Code looks like this:<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: green; font-weight: bold;">using</span> <span style="color: #0e84b5; font-weight: bold;">System.Web.UI</span>;
<span style="color: green; font-weight: bold;">using</span> <span style="color: #0e84b5; font-weight: bold;">System.Web.UI.WebControls.WebParts</span>;
<span style="color: green; font-weight: bold;">namespace</span> <span style="color: #0e84b5; font-weight: bold;">LifeInSharePoint.iGoogle.Common.ControlAdapters</span>
{
<span style="color: green; font-weight: bold;">public</span> <span style="color: green; font-weight: bold;">class</span> <span style="color: #b00060; font-weight: bold;">WebPartRenderControlAdapter</span> : System.Web.UI.Adapters.ControlAdapter {
<span style="color: green; font-weight: bold;">protected</span> <span style="color: green; font-weight: bold;">override</span> <span style="color: green; font-weight: bold;">void</span> <span style="color: #0060b0; font-weight: bold;">Render</span>(HtmlTextWriter writer) {
WebPartZone wpz = Control <span style="color: green; font-weight: bold;">as</span> WebPartZone;
<span style="color: green; font-weight: bold;">if</span> (wpz != <span style="color: green; font-weight: bold;">null</span>) {
<span style="color: grey;">// Render the WebPartZone writer.Indent++; </span>
<span style="color: grey;">// Render the web parts if (wpz.WebParts.Count > 0) </span>
{
WebPartCollection wpColl = <span style="color: green; font-weight: bold;">new</span> WebPartCollection(wpz.WebParts);
<span style="color: green; font-weight: bold;">foreach</span> (WebPart wp <span style="color: green; font-weight: bold;">in</span> wpColl)
{ wp.RenderControl(writer);
}
}
writer.Indent--;
writer.WriteLine();
}
}
}
}
</pre>
</div>
<br />
As you can see from the code above we have a class which inherits from System.Web.UI.Adapters.ControlAdapters. We first get a reference to the current WebPartZone on the Adapter. If this is not null then we can start to override the WebPart rendering. We then check how many WebParts exist in the current WebPartZone that we are in and if there are some then we create a new WebPartCollection object with all the WebParts in the current zone.<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;">WebPartCollection wpColl = <span style="color: green; font-weight: bold;">new</span> WebPartCollection(wpz.WebParts);
</pre>
</div>
<br />
<br />
We can then loop through each WebPart in the collection and render the WebPart control. This alone will remove all the tables for each WebPart rendered in a WebPartZone. The final step to get this basic Control Adapter working is to update the compact.browser file stored (in my case) in the inetpub > webapp > App_Browsers > compact.browser file.<br />
We need to add a single line into the <controlAdapters> node to register our new custom adapter.<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><browser refID=<span style="background-color: #fff0f0;">"default"</span>>
<controlAdapters>
<adapter controlType=<span style="background-color: #fff0f0;">"System.Web.UI.WebControls.WebParts.WebPartZone"</span>
adapterType=<span style="background-color: #fff0f0;">"LifeInSharePoint.iGoogle.Common.ControlAdapters.WebPartRenderControlAdapter, </span>
LifeInSharePoint.iGoogle,
Version=<span style="color: #6000e0; font-weight: bold;">1.0</span>.<span style="color: #6000e0; font-weight: bold;">0.0</span>,
Culture=neutral, PublicKeyToken=<span style="color: #6000e0; font-weight: bold;">4077</span>a3c2ee13ed4a<span style="background-color: #fff0f0;">" /></span>
</controlAdapters>
</browser>
</pre>
</div>
<br />
Save this file and ensure that the dll is in the GAC and then the control adapter should work. One thing that is important to know about Control Adapters is that when they are in use they will by default process EVERY WebPart on the site. For our implementation however we want to be able to choose which WebParts are rendered as our widgets. To do this we will place some logic into our control adapter which will check the title of the WebPartZone to ensure it contains the text “iGoogle” and only process WebParts that are contained within those specific zones. Another piece of logic that we need to place into our zones is that we only want our rendering to process WebParts when the page is in the Display mode and not in Edit mode. The code below shows the updated adapter with the new pieces of logic included.<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: green; font-weight: bold;">using</span> <span style="color: #0e84b5; font-weight: bold;">System.Web.UI</span>;
<span style="color: green; font-weight: bold;">using</span> <span style="color: #0e84b5; font-weight: bold;">System.Web.UI.WebControls.WebParts</span>;
<span style="color: green; font-weight: bold;">using</span> <span style="color: #0e84b5; font-weight: bold;">Microsoft.SharePoint.WebPartPages</span>;
<span style="color: green; font-weight: bold;">using</span> <span style="color: #0e84b5; font-weight: bold;">WebPart</span> = System.Web.UI.WebControls.WebParts.WebPart;
<span style="color: green; font-weight: bold;">using</span> <span style="color: #0e84b5; font-weight: bold;">WebPartZone</span> = System.Web.UI.WebControls.WebParts.WebPartZone;
<span style="color: green; font-weight: bold;">namespace</span> <span style="color: #0e84b5; font-weight: bold;">LifeInSharePoint.iGoogle.Common.ControlAdapters</span>
{
<span style="color: green; font-weight: bold;">public</span> <span style="color: green; font-weight: bold;">class</span> <span style="color: #b00060; font-weight: bold;">WebPartRenderControlAdapter</span> : System.Web.UI.Adapters.ControlAdapter
{
<span style="color: green; font-weight: bold;">protected</span> <span style="color: green; font-weight: bold;">override</span> <span style="color: green; font-weight: bold;">void</span> <span style="color: #0060b0; font-weight: bold;">Render</span>(HtmlTextWriter writer)
{
WebPartZone wpz = Control <span style="color: green; font-weight: bold;">as</span> WebPartZone;
<span style="color: green; font-weight: bold;">if</span> (wpz != <span style="color: green; font-weight: bold;">null</span>) {
SPWebPartManager swpm = (SPWebPartManager)SPWebPartManager.GetCurrentWebPartManager(wpz.Page);
<span style="color: #303090; font-weight: bold;">bool</span> inDisplayMode = !swpm.GetDisplayMode().AllowPageDesign;
<span style="color: green; font-weight: bold;">if</span> (inDisplayMode && wpz.DisplayTitle.Contains(<span style="background-color: #fff0f0;">"iGoogle"</span>)) {
<span style="color: grey;">// Render the WebPartZone </span>
writer.Indent++;
<span style="color: grey;">// Render the web parts </span>
<span style="color: green; font-weight: bold;">if</span> (wpz.WebParts.Count > <span style="color: #6000e0; font-weight: bold;">0</span>)
{
WebPartCollection wpColl = <span style="color: green; font-weight: bold;">new</span> WebPartCollection(wpz.WebParts);
<span style="color: green; font-weight: bold;">foreach</span> (WebPart wp <span style="color: green; font-weight: bold;">in</span> wpColl) { wp.RenderControl(writer);
}
}
writer.Indent--; writer.WriteLine();
}
<span style="color: green; font-weight: bold;">else</span> {
<span style="color: grey;">// If we are not editing the page --> render the web part as usual. </span>
<span style="color: green; font-weight: bold;">base</span>.Render(writer);
}
}
}
}
}
</pre>
</div>
<br />
As you can now see we have first added a line to get a reference to the current WebPartManager on the page which will enable use to get the state of the page and check if we are in display or edit mode.<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;">SPWebPartManager swpm = (SPWebPartManager)SPWebPartManager.GetCurrentWebPartManager(wpz.Page);
</pre>
</div>
<br />
We are then able to set a boolean value to the state of the page.<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: #303090; font-weight: bold;">bool</span> inDisplayMode = !swpm.GetDisplayMode().AllowPageDesign;
</pre>
</div>
<br />
The final step is to wrap a new if statement around the render code which will control when the table removal is processed.<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: green; font-weight: bold;">if</span> (inDisplayMode && wpz.DisplayTitle.Contains(<span style="background-color: #fff0f0;">"iGoogle"</span>))
{
<span style="color: grey;">//Old code to go here</span>
}
<span style="color: green; font-weight: bold;">else</span>{
<span style="color: grey;">// If we are not editing the page --> render the web part as usual. </span>
<span style="color: green; font-weight: bold;">base</span>.Render(writer);
}
</pre>
</div>
<br />
<br />
When this code is run only WebPartZones with the iGoogle text value in the title will be rendered.<br />
<h2>
Adding the Widget Code Wrapper</h2>
Now that we have the basics sorted for our Control Adapter we now need to wrap our widget code around the render control and this can be done like it would be done in a normal WebPart. We need to add the following code and replace it within the foreach loop around for each WebPart.<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;">writer.WriteLine();
writer.Write(<span style="background-color: #fff0f0;">"<div id='"</span> + wp.ID + <span style="background-color: #fff0f0;">"' class='widget'>"</span>);
writer.Write(<span style="background-color: #fff0f0;">"<div class='widget-head'>"</span>);
writer.Write(<span style="background-color: #fff0f0;">"<a class='collapse'>collapse</a>"</span>);
writer.Write(<span style="background-color: #fff0f0;">"<h3>"</span> + wp.Title + <span style="background-color: #fff0f0;">"</h3>"</span>);
writer.Write(<span style="background-color: #fff0f0;">"<a class='remove'>remove</a>"</span>);
writer.Write(<span style="background-color: #fff0f0;">"<a class='edit'>edit</a>"</span>);
writer.Write(<span style="background-color: #fff0f0;">"</div>"</span>);
writer.Write(<span style="background-color: #fff0f0;">"<div class='widget-edit'>"</span>);
writer.Write(<span style="background-color: #fff0f0;">"<input type='text' type='text' class='iColorPicker' id='color"</span> + wp.ID + <span style="background-color: #fff0f0;">"' />"</span>);
writer.Write(<span style="background-color: #fff0f0;">"<div class='clearfix'></div>"</span>);
writer.Write(<span style="background-color: #fff0f0;">"</div>"</span>);
writer.Write(<span style="background-color: #fff0f0;">"<div class='widget-content'>"</span>);
wp.RenderControl(writer);
writer.Write(<span style="background-color: #fff0f0;">"</div>"</span>);
writer.Write(<span style="background-color: #fff0f0;">"</div>"</span>);
</pre>
</div>
<br />
<br />
Those who have been following the previous three posts will recognize the HTML from above. I have use the writer object to inject the HTML and have also ensured that the ID of my widget wrapper div is generated from the current WebPart ID – (wp.ID), and the title of the WebPart is injected into the <H3> tag.<br />
<h2>
Summary</h2>
That wraps up part four of the iGoogle series. The next post will be to integrate the code above into a SharePoint 2010 solution and include some of the extra pieces such as CSS to enable the this solution to come to life. The final code for this Control Adapter is shown below. Thanks for reading and all the positive feedback is greatly appreciated.<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: green; font-weight: bold;">using</span> <span style="color: #0e84b5; font-weight: bold;">System.Web.UI</span>;
<span style="color: green; font-weight: bold;">using</span> <span style="color: #0e84b5; font-weight: bold;">System.Web.UI.WebControls.WebParts</span>;
<span style="color: green; font-weight: bold;">using</span> <span style="color: #0e84b5; font-weight: bold;">Microsoft.SharePoint.WebPartPages</span>;
<span style="color: green; font-weight: bold;">using</span> <span style="color: #0e84b5; font-weight: bold;">WebPart</span> = System.Web.UI.WebControls.WebParts.WebPart;
<span style="color: green; font-weight: bold;">using</span> <span style="color: #0e84b5; font-weight: bold;">WebPartZone</span> = System.Web.UI.WebControls.WebParts.WebPartZone;
<span style="color: green; font-weight: bold;">namespace</span> <span style="color: #0e84b5; font-weight: bold;">LifeInSharePoint.iGoogle.Common.ControlAdapters</span>
{
<span style="color: green; font-weight: bold;">public</span> <span style="color: green; font-weight: bold;">class</span> <span style="color: #b00060; font-weight: bold;">WebPartRenderControlAdapter</span> : System.Web.UI.Adapters.ControlAdapter
{
<span style="color: green; font-weight: bold;">protected</span> <span style="color: green; font-weight: bold;">override</span> <span style="color: green; font-weight: bold;">void</span> <span style="color: #0060b0; font-weight: bold;">Render</span>(HtmlTextWriter writer)
{
WebPartZone wpz = Control <span style="color: green; font-weight: bold;">as</span> WebPartZone;
<span style="color: green; font-weight: bold;">if</span> (wpz != <span style="color: green; font-weight: bold;">null</span>) {
SPWebPartManager swpm = (SPWebPartManager)SPWebPartManager.GetCurrentWebPartManager(wpz.Page);
<span style="color: #303090; font-weight: bold;">bool</span> inDisplayMode = !swpm.GetDisplayMode().AllowPageDesign;
<span style="color: green; font-weight: bold;">if</span> (inDisplayMode && wpz.DisplayTitle.Contains(<span style="background-color: #fff0f0;">"iGoogle"</span>)) {
<span style="color: grey;">// Render the WebPartZone </span>
writer.Indent++;
<span style="color: grey;">// Render the web parts </span>
<span style="color: green; font-weight: bold;">if</span> (wpz.WebParts.Count > <span style="color: #6000e0; font-weight: bold;">0</span>)
{
WebPartCollection wpColl = <span style="color: green; font-weight: bold;">new</span> WebPartCollection(wpz.WebParts);
<span style="color: green; font-weight: bold;">foreach</span> (WebPart wp <span style="color: green; font-weight: bold;">in</span> wpColl)
{
writer.WriteLine();
writer.Write(<span style="background-color: #fff0f0;">"<div id='"</span> + wp.ID + <span style="background-color: #fff0f0;">"' class='widget'>"</span>);
writer.Write(<span style="background-color: #fff0f0;">"<div class='widget-head'>"</span>);
writer.Write(<span style="background-color: #fff0f0;">"<a class='collapse'>collapse</a>"</span>);
writer.Write(<span style="background-color: #fff0f0;">"<h3>"</span> + wp.Title + <span style="background-color: #fff0f0;">"</h3>"</span>);
writer.Write(<span style="background-color: #fff0f0;">"<a class='remove'>remove</a>"</span>);
writer.Write(<span style="background-color: #fff0f0;">"<a class='edit'>edit</a>"</span>);
writer.Write(<span style="background-color: #fff0f0;">"</div>"</span>);
writer.Write(<span style="background-color: #fff0f0;">"<div class='widget-edit'>"</span>);
writer.Write(<span style="background-color: #fff0f0;">"<input type='text' type='text' class='iColorPicker' id='color"</span> + wp.ID + <span style="background-color: #fff0f0;">"' />"</span>);
writer.Write(<span style="background-color: #fff0f0;">"<div class='clearfix'></div>"</span>);
writer.Write(<span style="background-color: #fff0f0;">"</div>"</span>);
writer.Write(<span style="background-color: #fff0f0;">"<div class='widget-content'>"</span>);
wp.RenderControl(writer);
writer.Write(<span style="background-color: #fff0f0;">"</div>"</span>);
writer.Write(<span style="background-color: #fff0f0;">"</div>"</span>);
}
}
writer.Indent--;
writer.WriteLine();
}
<span style="color: green; font-weight: bold;">else</span> {
<span style="color: grey;">// If we are editing the page --> render the web part as usual.</span>
<span style="color: green; font-weight: bold;">base</span>.Render(writer);
}
}
} }}
</pre>
<pre style="line-height: 125%; margin: 0;">
</pre>
<pre style="line-height: 125%; margin: 0;"><h2 style="font-family: Simsun; line-height: normal; white-space: normal;">
Series Content</h2>
<ol style="font-family: Simsun; line-height: normal; white-space: normal;">
<li><h3 class="post-title entry-title" style="background-color: white; background-image: url(http://www.templatesimages.com/images/Minyx20/thdotsH.gif); background-position: 0% 100%; background-repeat: repeat no-repeat; color: #333333; font-family: 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; font-weight: normal; letter-spacing: -1px; line-height: 18px; margin: 0px; padding: 6px 0px;">
<a href="http://digsharepoint.blogspot.com/2013/02/creating-igoogle-ui-for-sharepoint.html" style="color: #6699cc; margin: 0px; outline-style: none; padding: 0px; text-decoration: initial;"><span style="font-size: small;">Creating iGoogle UI for SharePoint 2010/SharePoint 2013 - Part I : Overview, Concept, HTML Structure & Jquery Basics</span></a></h3>
</li>
<li><h3 class="post-title entry-title" style="background-color: white; background-image: url(http://www.templatesimages.com/images/Minyx20/thdotsH.gif); background-position: 0% 100%; background-repeat: repeat no-repeat; color: #333333; font-family: 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; font-weight: normal; letter-spacing: -1px; line-height: 18px; margin: 0px; padding: 6px 0px;">
<a href="http://digsharepoint.blogspot.com/2013/02/creating-igoogle-ui-for-sharepoint_19.html" style="color: #6699cc; margin: 0px; outline-style: none; padding: 0px; text-decoration: initial;"><span style="font-size: small;">Creating iGoogle UI for SharePoint 2010/SharePoint 2013 - Part II : Dragging, Dropping, Sorting and Collapsing</span></a></h3>
</li>
<li><h3 class="post-title entry-title" style="background-color: white; background-image: url(http://www.templatesimages.com/images/Minyx20/thdotsH.gif); background-position: 0% 100%; background-repeat: repeat no-repeat; color: #333333; font-family: 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; font-weight: normal; letter-spacing: -1px; line-height: 18px; margin: 0px; padding: 6px 0px;">
<a href="http://digsharepoint.blogspot.com/2013/02/creating-igoogle-ui-for-sharepoint_333.html" style="color: #ff3366; margin: 0px; outline-style: none; padding: 0px; text-decoration: initial;"><span style="font-size: small;">Creating iGoogle UI for SharePoint 2010/SharePoint 2013 - Part III : Saving WebPart states using Cookies</span></a></h3>
</li>
<li><h3 class="post-title entry-title" style="background-color: white; background-image: url(http://www.templatesimages.com/images/Minyx20/thdotsH.gif); background-position: 0% 100%; background-repeat: repeat no-repeat; color: #333333; font-family: 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; font-weight: normal; letter-spacing: -1px; line-height: 18px; margin: 0px; padding: 6px 0px;">
<a href="http://digsharepoint.blogspot.com/2013/02/creating-igoogle-ui-for-sharepoint_5146.html" style="color: #6699cc; margin: 0px; outline-style: none; padding: 0px; text-decoration: initial;"><span style="font-size: small;">Creating iGoogle UI for SharePoint 2010/SharePoint 2013 - Part IV : Control Adapters</span></a></h3>
</li>
<li><h3 class="post-title entry-title" style="background-color: white; background-image: url(http://www.templatesimages.com/images/Minyx20/thdotsH.gif); background-position: 0% 100%; background-repeat: repeat no-repeat; color: #333333; font-family: 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; font-weight: normal; letter-spacing: -1px; line-height: 18px; margin: 0px; padding: 6px 0px;">
<a href="http://digsharepoint.blogspot.com/2013/02/creating-igoogle-ui-for-sharepoint_349.html" style="color: #6699cc; margin: 0px; outline-style: none; padding: 0px; text-decoration: initial;"><span style="font-size: small;">Creating iGoogle UI for SharePoint 2010/SharePoint 2013 - Part V : SharePoint 2010 Integration</span></a></h3>
</li>
</ol>
</pre>
</div>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-3888123222103988694.post-44369231134215251672013-02-19T04:05:00.001-05:002013-02-19T05:16:13.912-05:00Creating iGoogle UI for SharePoint 2010/SharePoint 2013 - Part III : Saving WebPart states using Cookies<br />
<h2>
Series Content</h2>
<ol>
<li><h3 class="post-title entry-title" style="background-color: white; background-image: url(http://www.templatesimages.com/images/Minyx20/thdotsH.gif); background-position: 0% 100%; background-repeat: repeat no-repeat; color: #333333; font-family: 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; font-weight: normal; letter-spacing: -1px; line-height: 18px; margin: 0px; padding: 6px 0px;">
<a href="http://digsharepoint.blogspot.com/2013/02/creating-igoogle-ui-for-sharepoint.html" style="color: #6699cc; margin: 0px; outline-style: none; padding: 0px; text-decoration: initial;"><span style="font-size: small;">Creating iGoogle UI for SharePoint 2010/SharePoint 2013 - Part I : Overview, Concept, HTML Structure & Jquery Basics</span></a></h3>
</li>
<li><h3 class="post-title entry-title" style="background-color: white; background-image: url(http://www.templatesimages.com/images/Minyx20/thdotsH.gif); background-position: 0% 100%; background-repeat: repeat no-repeat; color: #333333; font-family: 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; font-weight: normal; letter-spacing: -1px; line-height: 18px; margin: 0px; padding: 6px 0px;">
<a href="http://digsharepoint.blogspot.com/2013/02/creating-igoogle-ui-for-sharepoint_19.html" style="color: #6699cc; margin: 0px; outline-style: none; padding: 0px; text-decoration: initial;"><span style="font-size: small;">Creating iGoogle UI for SharePoint 2010/SharePoint 2013 - Part II : Dragging, Dropping, Sorting and Collapsing</span></a></h3>
</li>
<li><h3 class="post-title entry-title" style="background-color: white; background-image: url(http://www.templatesimages.com/images/Minyx20/thdotsH.gif); background-position: 0% 100%; background-repeat: repeat no-repeat; color: #333333; font-family: 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; font-weight: normal; letter-spacing: -1px; line-height: 18px; margin: 0px; padding: 6px 0px;">
<a href="http://digsharepoint.blogspot.com/2013/02/creating-igoogle-ui-for-sharepoint_333.html" style="color: #ff3366; margin: 0px; outline-style: none; padding: 0px; text-decoration: initial;"><span style="font-size: small;">Creating iGoogle UI for SharePoint 2010/SharePoint 2013 - Part III : Saving WebPart states using Cookies</span></a></h3>
</li>
<li><h3 class="post-title entry-title" style="background-color: white; background-image: url(http://www.templatesimages.com/images/Minyx20/thdotsH.gif); background-position: 0% 100%; background-repeat: repeat no-repeat; color: #333333; font-family: 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; font-weight: normal; letter-spacing: -1px; line-height: 18px; margin: 0px; padding: 6px 0px;">
<a href="http://digsharepoint.blogspot.com/2013/02/creating-igoogle-ui-for-sharepoint_5146.html" style="color: #6699cc; margin: 0px; outline-style: none; padding: 0px; text-decoration: initial;"><span style="font-size: small;">Creating iGoogle UI for SharePoint 2010/SharePoint 2013 - Part IV : Control Adapters</span></a></h3>
</li>
<li><h3 class="post-title entry-title" style="background-color: white; background-image: url(http://www.templatesimages.com/images/Minyx20/thdotsH.gif); background-position: 0% 100%; background-repeat: repeat no-repeat; color: #333333; font-family: 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; font-weight: normal; letter-spacing: -1px; line-height: 18px; margin: 0px; padding: 6px 0px;">
<a href="http://digsharepoint.blogspot.com/2013/02/creating-igoogle-ui-for-sharepoint_349.html" style="color: #6699cc; margin: 0px; outline-style: none; padding: 0px; text-decoration: initial;"><span style="font-size: small;">Creating iGoogle UI for SharePoint 2010/SharePoint 2013 - Part V : SharePoint 2010 Integration</span></a></h3>
</li>
</ol>
<br />
<h2>
Overview</h2>
In Part Three we will take the code from our previous post and enable the page to remember the state of the various settings that we have applied such as the WebPart positions, the order, and minimise states and the webpart header colours.<br />
<h2>
Javascript</h2>
For this post we will require a new javascript library to help manage the Cookies stored for each user. This library has been already included at the bottom of the existing demo’s. This time however we will finally use it. This Post will contain a lot of new Javascript and I will try my best to explain all of the items.<br />
<h2>
Saving the Position</h2>
The First thing that we will do is to Save the Position of all of the widgets at different times in the page life-cycle. The first thing we need to do is dynamically set the Zones setting previously defined in previous posts. as well as add another setting into the definition to store the Cookie settings.<br />
<br />
<div class="line number1 index0 alt2">
<code class="js plain">settings : {</code></div>
<div class="line number2 index1 alt1">
<code class="js spaces"> </code><code class="js plain">columns : </code><code class="js string">'.column'</code><code class="js plain">,</code></div>
<div class="line number3 index2 alt2">
<code class="js spaces"> </code><code class="js plain">zones : </code><code class="js string">''</code><code class="js plain">,</code></div>
<div class="line number4 index3 alt1">
<code class="js spaces"> </code><code class="js plain">widgetSelector: </code><code class="js string">'.widget'</code><code class="js plain">,</code></div>
<div class="line number5 index4 alt2">
<code class="js spaces"> </code><code class="js plain">handleSelector: </code><code class="js string">'.widget-head'</code><code class="js plain">,</code></div>
<div class="line number6 index5 alt1">
<code class="js spaces"> </code><code class="js plain">contentSelector: </code><code class="js string">'.widget-content'</code><code class="js plain">,</code></div>
<div class="line number7 index6 alt2">
<code class="js spaces"> </code><code class="js plain">editSelector: </code><code class="js string">'.widget-edit'</code><code class="js plain">,</code></div>
<div class="line number8 index7 alt1">
<code class="js spaces"> </code><code class="js plain">toolboxSelector: </code><code class="js string">'#toolbox'</code><code class="js plain">,</code></div>
<div class="line number9 index8 alt2">
<code class="js spaces"> </code><code class="js plain">widgetPlaceholder: </code><code class="js string">'widget-placeholder'</code><code class="js plain">,</code></div>
<div class="line number10 index9 alt1">
<code class="js spaces"> </code><code class="js plain">badgeSelector: </code><code class="js string">'.badge'</code><code class="js plain">,</code></div>
<div class="line number11 index10 alt2">
<code class="js spaces"> </code><code class="js plain">positionCookie: </code><code class="js string">'widgetPositionsCookie'</code> </div>
<div class="line number12 index11 alt1">
<code class="js spaces"> </code><code class="js plain">},</code></div>
<div class="line number12 index11 alt1">
<code class="js plain"><br /></code></div>
<div class="line number12 index11 alt1">
<code class="js plain">This parameter was left blank on purpose to give the script the maximum flexibility. So to find out where the widgets are we need to find out what “zones” that the widgets are occupying. To do this we will create a new function called “defineZones” which will be used to iterate through the DOM and create a comma separated list of zones and their ID’s. Now a Zone in this tutorial is the ID associated with each column.</code></div>
<div class="line number12 index11 alt1">
<code class="js plain"><br /></code></div>
<div class="line number12 index11 alt1">
<code class="js plain"><br /></code></div>
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: #007000;"><div</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">'column'</span> <span style="color: #0000c0;">id=</span><span style="background-color: #fff0f0;">'left'</span><span style="color: #007000;">></span>
<span style="color: grey;"><!-- Widgets Go here --></span>
<span style="color: #007000;"></div></span>
<span style="color: #007000;"><div</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">'column'</span> <span style="color: #0000c0;">id=</span><span style="background-color: #fff0f0;">'middle'</span><span style="color: #007000;">></span>
<span style="color: grey;"><!-- Widgets Go here --></span>
<span style="color: #007000;"></div></span>
<span style="color: #007000;"><div</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">'column'</span> <span style="color: #0000c0;">id=</span><span style="background-color: #fff0f0;">'right'</span><span style="color: #007000;">></span>
<span style="color: grey;"><!-- Widgets Go here --></span>
<span style="color: #007000;"></div></span>
</pre>
</div>
<br />
The full function is shown below. We will then dive into the details of the code.<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;">defineZones <span style="color: #303030;">:</span> <span style="color: green; font-weight: bold;">function</span> () {
<span style="color: green; font-weight: bold;">var</span> iSharePoint <span style="color: #303030;">=</span> <span style="color: green; font-weight: bold;">this</span>,
$j <span style="color: #303030;">=</span> jQuery.noConflict(), settings <span style="color: #303030;">=</span> <span style="color: green; font-weight: bold;">this</span>.settings;
<span style="color: green; font-weight: bold;">var</span> temp <span style="color: #303030;">=</span> <span style="background-color: #fff0f0;">""</span>;
$j(settings.columns).each(<span style="color: green; font-weight: bold;">function</span> () {
temp <span style="color: #303030;">+=</span> <span style="background-color: #fff0f0;">"#"</span> <span style="color: #303030;">+</span> $j(<span style="color: green; font-weight: bold;">this</span>).attr(<span style="background-color: #fff0f0;">'id'</span>) <span style="color: #303030;">+</span> <span style="background-color: #fff0f0;">","</span>;
});
settings.zones <span style="color: #303030;">=</span> temp.substring(<span style="color: #0000d0; font-weight: bold;">0</span>, temp.length<span style="color: #303030;">-</span><span style="color: #0000d0; font-weight: bold;">1</span>);
},
</pre>
</div>
<br />
<br />
columns property and then creates the string based on the current items ID. In line 11 i then set the dynamic string to the zones parameter only after trimming the end of the string again.<br />
Now that we have a set of defined zones we need to now set up a new function to save the state of all the widgets contained with each column.<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: green; font-weight: bold;">function</span> SaveState(){
<span style="color: grey;">//Place SharePoint in No Conflict Mode </span>
<span style="color: green; font-weight: bold;">var</span> $j <span style="color: #303030;">=</span> jQuery.noConflict();
<span style="color: grey;">//Update the Badge </span>
updateBadge();
<span style="color: grey;">// Create/write a cookie and store it for 1 day </span>
setCookie(iSharePoint.settings.positionCookie, GetPositionState(), <span style="color: #0000d0; font-weight: bold;">1</span>);
}
<span style="color: green; font-weight: bold;">function</span> GetPositionState(){
<span style="color: grey;">//Get a local array of the Zones </span>
<span style="color: green; font-weight: bold;">var</span> zones <span style="color: #303030;">=</span> iSharePoint.settings.zones.split(<span style="background-color: #fff0f0;">','</span>);
<span style="color: grey;">//Holder variable for widget Positions </span>
<span style="color: green; font-weight: bold;">var</span> widgetPositions <span style="color: #303030;">=</span> <span style="background-color: #fff0f0;">""</span>;
<span style="color: grey;">//Loop through each zone to create a pipe delimited string </span>
<span style="color: green; font-weight: bold;">for</span>(z <span style="color: green; font-weight: bold;">in</span> zones) {
<span style="color: grey;">//Get the array of the current zone as CSV </span>
widgetPositions <span style="color: #303030;">+=</span> $j(zones[z]).sortable(<span style="background-color: #fff0f0;">'toArray'</span>) <span style="color: #303030;">+</span> <span style="background-color: #fff0f0;">"|"</span>;
}
<span style="color: grey;">//Trim the end off the string</span>
widgetPositions <span style="color: #303030;">=</span> widgetPositions.substring(<span style="color: #0000d0; font-weight: bold;">0</span>, widgetPositions.length<span style="color: #303030;">-</span><span style="color: #0000d0; font-weight: bold;">1</span>);
<span style="color: green; font-weight: bold;">return</span> widgetPositions;
}
</pre>
</div>
<br />
<br />
This new function SaveState does the following actions. To this method we will add first create a new reference to our global object and then we update the Badge Details in-case something new has changed.<br />
We then create a new cookie with the setCookie() method which will use the positionCookie setting to store the cookie key and then call the GetPositionState() method which will return the positions as a comma separated & pipe separated list.<br />
The GetPositionState() method firstly gets a local array of all of the zones we found using the previous method and add it into a new zone variable. Then we create a blank string value to store our positions. Next we loop through each zone and for that we use the jQuery sortable methods with the “toArray” parameter which will get a comma seperated list of all of the zones and seperate each zone with a pipe character. Finally we will create a javascript alert of the widgetPositions found.<br />
Next we place the SaveState(); method call into the remove button event handler, as well as the stop method of the makeSortable method so that when we remove or move a widget on the page it will provide us with the new position.<br />
At this stage we now can save the position of each widget when we close and move them on the page between columns.<br />
<h2>
Retrieving the Position & Order</h2>
The next step is to now to retrieve the position of the locations when you load the page so that the widgets appear in their previous positions. To do this we need to firstly create a new method in our iSharePoint Namespace called <strong>loadStateFromCookie</strong>. This method will do two things. Firstly it will load the position state from the cookie and place it into a variable, and then it will pass this to another method <strong>ProcessWidgetPositionData </strong>which will place the widgets in the correct locations.<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;">loadStateFromCookie <span style="color: #303030;">:</span> <span style="color: green; font-weight: bold;">function</span>() {
<span style="color: green; font-weight: bold;">var</span> iSharePoint <span style="color: #303030;">=</span> <span style="color: green; font-weight: bold;">this</span>,
$j <span style="color: #303030;">=</span> jQuery.noConflict(),
settings <span style="color: #303030;">=</span> <span style="color: green; font-weight: bold;">this</span>.settings;
<span style="color: green; font-weight: bold;">var</span> PositionStates <span style="color: #303030;">=</span> getCookie(settings.positionCookie);
<span style="color: green; font-weight: bold;">this</span>.ProcessWidgetPositionData(PositionStates);
updateBadge();
},
</pre>
</div>
<br />
As you can see we firstly get a reference to the settings and the local jQuery object. We then set a custom variable <strong>PositionStates</strong> to the cookie value by using the getCookie method. We then pass this into the ProcessWidgetPositionData method and then finally we update the badge method which will ensure that the number of “closed” widgets is correct. We will now dissect the processing function.<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;">ProcessWidgetPositionData <span style="color: #303030;">:</span> <span style="color: green; font-weight: bold;">function</span>(PositionStates){
<span style="color: green; font-weight: bold;">var</span> iSharePoint <span style="color: #303030;">=</span> <span style="color: green; font-weight: bold;">this</span>,
$j <span style="color: #303030;">=</span> jQuery.noConflict(), settings <span style="color: #303030;">=</span> <span style="color: green; font-weight: bold;">this</span>.settings;
<span style="color: grey;">// Configure cookie </span>
<span style="color: green; font-weight: bold;">if</span> (PositionStates) {
<span style="color: grey;">//Get the Array of Orders</span>
<span style="color: green; font-weight: bold;">var</span> order <span style="color: #303030;">=</span> PositionStates.split(<span style="background-color: #fff0f0;">'|'</span>);
<span style="color: grey;">//Get the Array of Zones </span>
<span style="color: green; font-weight: bold;">var</span> zonearray <span style="color: #303030;">=</span> settings.zones.split(<span style="background-color: #fff0f0;">','</span>);
<span style="color: green; font-weight: bold;">for</span>(o <span style="color: green; font-weight: bold;">in</span> order) {
<span style="color: grey;">//Position the boxes in the correct locations </span>
$j(settings.widgetSelector).each(<span style="color: green; font-weight: bold;">function</span> () {
<span style="color: grey;">//Loops through each PositionState in order object </span>
<span style="color: green; font-weight: bold;">if</span> (order[o].search($j(<span style="color: green; font-weight: bold;">this</span>).attr(<span style="background-color: #fff0f0;">'id'</span>)) <span style="color: #303030;">!=</span> <span style="color: #303030;">-</span><span style="color: #0000d0; font-weight: bold;">1</span>) {
$j(zonearray[o]).append($j(<span style="color: green; font-weight: bold;">this</span>));
}
});
<span style="color: grey;">//Reorder the boxes in each zone </span>
<span style="color: green; font-weight: bold;">if</span> (order[o] <span style="color: #303030;">!=</span> <span style="background-color: #fff0f0;">""</span>) {
<span style="color: green; font-weight: bold;">var</span> _workOrder <span style="color: #303030;">=</span> order[o].split(<span style="background-color: #fff0f0;">','</span>);
<span style="color: green; font-weight: bold;">for</span> (i <span style="color: #303030;">=</span> <span style="color: #0000d0; font-weight: bold;">0</span>; i <span style="color: #303030;"><</span> _workOrder.length; i<span style="color: #303030;">++</span>) {
$j(zonearray[o]).append($j(<span style="background-color: #fff0f0;">'#'</span> <span style="color: #303030;">+</span> _workOrder[i]));
}
}
}
}},
</pre>
</div>
<br />
This method is quite long but is easier than it appears. As we have done for each method so far we need to get our local references to jQuery etc, and then we need to check that we have received some data in the PositionStates variable. Next we need to split the array of values which we created in the <strong>SaveState()</strong> method back into an array so that we can loop through them. We will also need to get the array of zones defined so that we can match up each of the arrays.<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: grey;">//Get the Array of Orders </span>
<span style="color: green; font-weight: bold;">var</span> order <span style="color: #303030;">=</span> PositionStates.split(<span style="background-color: #fff0f0;">'|'</span>);
<span style="color: grey;">//Get the Array of Zones</span>
<span style="color: green; font-weight: bold;">var</span> zonearray <span style="color: #303030;">=</span> settings.zones.split(<span style="background-color: #fff0f0;">','</span>);
</pre>
</div>
<br />
Next step is to loop through each of positions in the<strong> order</strong> array and perform two important tasks. The first task is to place the correct widgets in their correct columns and then the next step is to ensure that they are in the correct order in that column. We will firstly tackle the positions:<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: green; font-weight: bold;">for</span>(o <span style="color: green; font-weight: bold;">in</span> order){
<span style="color: grey;">//Position the boxes in the correct locations </span>
$j(settings.widgetSelector).each(<span style="color: green; font-weight: bold;">function</span> () {
<span style="color: grey;">//Loops through each PositionState in order object </span>
<span style="color: green; font-weight: bold;">if</span> (order[o].search($j(<span style="color: green; font-weight: bold;">this</span>).attr(<span style="background-color: #fff0f0;">'id'</span>)) <span style="color: #303030;">!=</span> <span style="color: #303030;">-</span><span style="color: #0000d0; font-weight: bold;">1</span>) {
$j(zonearray[o]).append($j(<span style="color: green; font-weight: bold;">this</span>)); }
});
<span style="color: grey;">//More code to come...</span>
</pre>
</div>
<br />
<br />
What this first part of the function does is loops through all of the widgets on the page when it loads and search if the current widget is found in the order variable (using the .search method, if an item is not found then it will return -1) then we want to add that item to the current column (defined in the zonearray). <em>NOTE: Because we are in control of the order that values are saved into the cookie the retrieval of the items can be predictable.</em><br />
The next step is to then reorder the widgets in the current column.<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: grey;">//Reorder the boxes in each zone </span>
<span style="color: green; font-weight: bold;">if</span> (order[o] <span style="color: #303030;">!=</span> <span style="background-color: #fff0f0;">""</span>) {
<span style="color: green; font-weight: bold;">var</span> _workOrder <span style="color: #303030;">=</span> order[o].split(<span style="background-color: #fff0f0;">','</span>);
<span style="color: green; font-weight: bold;">for</span> (i <span style="color: #303030;">=</span> <span style="color: #0000d0; font-weight: bold;">0</span>; i <span style="color: #303030;"><</span> _workOrder.length; i<span style="color: #303030;">++</span>)
{
$j(zonearray[o]).append($j(<span style="background-color: #fff0f0;">'#'</span> <span style="color: #303030;">+</span> _workOrder[i]));
}
}}
</pre>
</div>
<br />
This will again ensure that there is a value in the current order value (there can be a column with no items) and then it will split the widget values into an array. We now have an array of values which are in the order that they were saved so we can now process the array by appending the widgets in the current column again but this time in the correct order. The complete code for this method is shown below:
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;">ProcessWidgetPositionData <span style="color: #303030;">:</span> <span style="color: green; font-weight: bold;">function</span>(PositionStates){
<span style="color: green; font-weight: bold;">var</span> iSharePoint <span style="color: #303030;">=</span> <span style="color: green; font-weight: bold;">this</span>,
$j <span style="color: #303030;">=</span> jQuery.noConflict(), settings <span style="color: #303030;">=</span> <span style="color: green; font-weight: bold;">this</span>.settings;
<span style="color: grey;">// Configure cookie </span>
<span style="color: green; font-weight: bold;">if</span> (PositionStates) {
<span style="color: grey;">//Get the Array of Orders var order = PositionStates.split('|'); </span>
<span style="color: grey;">//Get the Array of Zones </span>
<span style="color: green; font-weight: bold;">var</span> zonearray <span style="color: #303030;">=</span> settings.zones.split(<span style="background-color: #fff0f0;">','</span>);
<span style="color: green; font-weight: bold;">for</span>(o <span style="color: green; font-weight: bold;">in</span> order) {
<span style="color: grey;">//Position the boxes in the correct locations </span>
$j(settings.widgetSelector).each(<span style="color: green; font-weight: bold;">function</span> () {
<span style="color: grey;">//Loops through each PositionState in order object </span>
<span style="color: green; font-weight: bold;">if</span> (order[o].search($j(<span style="color: green; font-weight: bold;">this</span>).attr(<span style="background-color: #fff0f0;">'id'</span>)) <span style="color: #303030;">!=</span> <span style="color: #303030;">-</span><span style="color: #0000d0; font-weight: bold;">1</span>) {
$j(zonearray[o]).append($j(<span style="color: green; font-weight: bold;">this</span>));
}
});
<span style="color: grey;">//Reorder the boxes in each zone </span>
<span style="color: green; font-weight: bold;">if</span> (order[o] <span style="color: #303030;">!=</span> <span style="background-color: #fff0f0;">""</span>) {
<span style="color: green; font-weight: bold;">var</span> _workOrder <span style="color: #303030;">=</span> order[o].split(<span style="background-color: #fff0f0;">','</span>);
<span style="color: green; font-weight: bold;">for</span> (i <span style="color: #303030;">=</span> <span style="color: #0000d0; font-weight: bold;">0</span>; i <span style="color: #303030;"><</span> _workOrder.length; i<span style="color: #303030;">++</span>) {
$j(zonearray[o]).append($j(<span style="background-color: #fff0f0;">'#'</span> <span style="color: #303030;">+</span> _workOrder[i]));
}
}
}
}},
</pre>
</div>
<br />
<br />
<h2>
Demo</h2>
To view a demo of where we have got to thus far <a href="http://www.lifeinsharepoint.co.uk/demo/DragAndDrop/PartThreeA/">click here</a><br />
<h2>
Saving the Collapsed State</h2>
The next step is to save the collapsed state of each of the widgets on the page. The first step is to modify the <strong>SaveState(); </strong>function to include the following line at the end.<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;">setCookie(iSharePoint.settings.minimiseCookie, GetMinimisedState(), <span style="color: #0000d0; font-weight: bold;">1</span>);
</pre>
</div>
<br />
This line does what it say and sets the minimiseCookie to the value that is returned from the GetMinimisedState() method. The <strong>GetMinimisedState()</strong> is a new method which is going to be added outside of the iSharePoint namespace and will simply go through each widget which has the minimised class attached to it and add it to an array.<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: green; font-weight: bold;">function</span> GetMinimisedState(){
<span style="color: green; font-weight: bold;">var</span> $j <span style="color: #303030;">=</span> jQuery.noConflict();
<span style="color: green; font-weight: bold;">var</span> list <span style="color: #303030;">=</span> <span style="color: green; font-weight: bold;">new</span> <span style="color: #007020;">Array</span>();
$j(<span style="background-color: #fff0f0;">'.minimised'</span>).each(<span style="color: green; font-weight: bold;">function</span> () {
list.push($j(<span style="color: green; font-weight: bold;">this</span>).attr(<span style="background-color: #fff0f0;">'id'</span>));
});
<span style="color: green; font-weight: bold;">return</span> list;
}
</pre>
</div>
<br />
<br />
That’s it for saving the collapsed state ..nice and simple.<br />
<h2>
Retrieving the Collapsed State</h2>
To retrieve the collapse state is also another simple addition. To do this we will load the state from the cookie set above and then for each of the widgets defined in the array it will set them to minimised and collapse the widget.<br />
So the first step is to modify the <strong>loadStateFromCookie </strong>function to include two lines. The first line is to set a local variable “<strong>MinimisedStates</strong>” to the cookie value:<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: green; font-weight: bold;">var</span> MinimiseStates <span style="color: #303030;">=</span> getCookie(settings.minimiseCookie);
</pre>
</div>
<br />
the next step is then to process that data by passing it into a <strong>ProcessMinimiseData()</strong> method.<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: green; font-weight: bold;">this</span>.ProcessMinimiseData(MinimiseStates);
</pre>
</div>
<br />
What this processing method does is split the array of MinimiseStates and then for each item in that array it will locate the widget with that ID.<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;">ProcessMinimiseData <span style="color: #303030;">:</span> <span style="color: green; font-weight: bold;">function</span>(MinimiseStates){
<span style="color: green; font-weight: bold;">var</span> iSharePoint <span style="color: #303030;">=</span> <span style="color: green; font-weight: bold;">this</span>,
$j <span style="color: #303030;">=</span> jQuery.noConflict(), settings <span style="color: #303030;">=</span> <span style="color: green; font-weight: bold;">this</span>.settings;
<span style="color: green; font-weight: bold;">if</span> (MinimiseStates <span style="color: #303030;">!=</span> <span style="color: green; font-weight: bold;">null</span>) {
MinimiseStates <span style="color: #303030;">=</span> MinimiseStates.split(<span style="background-color: #fff0f0;">','</span>);
<span style="color: green; font-weight: bold;">for</span> (i <span style="color: #303030;">=</span> <span style="color: #0000d0; font-weight: bold;">0</span>; i <span style="color: #303030;"><</span> MinimiseStates.length; i<span style="color: #303030;">++</span>) {
<span style="color: green; font-weight: bold;">var</span> id <span style="color: #303030;">=</span> <span style="background-color: #fff0f0;">"#"</span> <span style="color: #303030;">+</span> MinimiseStates[i];
$j(id).find(settings.contentSelector).slideToggle(<span style="background-color: #fff0f0;">"slow"</span>);
$j(id).toggleClass(<span style="background-color: #fff0f0;">"minimised"</span>);
}
}},
</pre>
</div>
<br />
If there is a widget in the array it will perform a slideToggle and then add the minimised class to the current widget. The final step to this piece of the puzzle is to ensure that when you click on the button to minimise each widget is to run the save state method. To do this we just modify the <strong>buttonFunctions</strong> method with the highlighted item below.<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;">$j(<span style="background-color: #fff0f0;">'.collapse'</span>).mousedown(<span style="color: green; font-weight: bold;">function</span> (e) {
e.stopPropagation();}).click(<span style="color: green; font-weight: bold;">function</span> () {
$j(<span style="color: green; font-weight: bold;">this</span>).parents(settings.widgetSelector).find(settings.contentSelector).slideToggle(<span style="background-color: #fff0f0;">"slow"</span>);
$j(<span style="color: green; font-weight: bold;">this</span>).parents(settings.widgetSelector).toggleClass(<span style="background-color: #fff0f0;">"minimised"</span>);
<span style="color: grey;">//ADD THIS NEXT LINE IN </span>
SaveState();
<span style="color: green; font-weight: bold;">return</span> <span style="color: green; font-weight: bold;">false</span>;
})
</pre>
</div>
<br />
That’s it for this section.<br />
<br />
<h2>
Demo</h2>
To view a demo of where we have got to thus far <a href="http://www.lifeinsharepoint.co.uk/demo/DragAndDrop/PartThreeB/">click here</a><br />
<h2>
Saving the Colour</h2>
This section we will save the current colour set in the webparts colour settings panel. As we built in previous posts the colour widget can be any colour you can think of so we need to find a way to process this data on the fly. Once again like above we need to modify the <strong>SaveState(); </strong>function to include another line at the end.<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;">setCookie(iSharePoint.settings.colorCookie, GetWidgetColor(), <span style="color: #0000d0; font-weight: bold;">1</span>);
</pre>
</div>
<br />
Like before this will set the cookie to the output from the GetWidetColor method. This method simply goes through each widget and gets the value that is stored in the text box with the class <strong>iColorPicker</strong>.<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: green; font-weight: bold;">function</span> GetWidgetColor() {
<span style="color: green; font-weight: bold;">var</span> $j <span style="color: #303030;">=</span> jQuery.noConflict();
<span style="color: green; font-weight: bold;">var</span> list <span style="color: #303030;">=</span> <span style="color: green; font-weight: bold;">new</span> <span style="color: #007020;">Array</span>();
$j(iSharePoint.settings.widgetSelector).each(<span style="color: green; font-weight: bold;">function</span> () {
list.push($j(<span style="color: green; font-weight: bold;">this</span>).attr(<span style="background-color: #fff0f0;">'id'</span>) <span style="color: #303030;">+</span> <span style="background-color: #fff0f0;">"|"</span> <span style="color: #303030;">+</span> $j(<span style="color: green; font-weight: bold;">this</span>).find(<span style="background-color: #fff0f0;">'.iColorPicker'</span>).val()); });
<span style="color: green; font-weight: bold;">return</span> list;
}
</pre>
</div>
<br />
<br />
When the method loops through each text box it will also pipe delimit the widget id along with the colour so we are able to match them up on retrieval. Next step..getting the colour back on load.<br />
<h2>
Retrieving the Colour</h2>
To retrieve the colour of the widget is very similar to the previous “retrieve” methods. To do this we will load the state from the cookie set above and then for each of the widgets defined in the array it will set them to colour defined and then re-color the widget.<br />
So the first step is to modify the <strong>loadStateFromCookie </strong>function to include two lines. The first line is to set a local variable “ColorStates” to the cookie value:<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: green; font-weight: bold;">var</span> ColorStates <span style="color: #303030;">=</span> getCookie(settings.colorCookie);
</pre>
</div>
<br />
the next step is then to process that data by passing it into a ProcessWidgetColorData() method.<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: green; font-weight: bold;">this</span>.ProcessWidgetColorData(ColorStates);
</pre>
</div>
<br />
What this processing method does is split the array of ColorStats and then for each item in that array it will find the widget with that ID using jQuery.Find() and set the Text Box Value, CSS and Handle Selector CSS. The first couple of lines should be all too familiar by this point. Below is the full method:<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;">ProcessWidgetColorData <span style="color: #303030;">:</span> <span style="color: green; font-weight: bold;">function</span>(ColorStates){
<span style="color: green; font-weight: bold;">var</span> iSharePoint <span style="color: #303030;">=</span> <span style="color: green; font-weight: bold;">this</span>,
$j <span style="color: #303030;">=</span> jQuery.noConflict(), settings <span style="color: #303030;">=</span> <span style="color: green; font-weight: bold;">this</span>.settings;
<span style="color: green; font-weight: bold;">if</span> (ColorStates <span style="color: #303030;">!=</span> <span style="color: green; font-weight: bold;">null</span>) {
ColorStates <span style="color: #303030;">=</span> ColorStates.split(<span style="background-color: #fff0f0;">','</span>);
<span style="color: green; font-weight: bold;">for</span> (i <span style="color: #303030;">=</span> <span style="color: #0000d0; font-weight: bold;">0</span>; i <span style="color: #303030;"><</span> ColorStates.length; i<span style="color: #303030;">++</span>) {
<span style="color: green; font-weight: bold;">var</span> id <span style="color: #303030;">=</span> <span style="background-color: #fff0f0;">"#"</span> <span style="color: #303030;">+</span> ColorStates[i].split(<span style="background-color: #fff0f0;">'|'</span>)[<span style="color: #0000d0; font-weight: bold;">0</span>];
<span style="color: green; font-weight: bold;">var</span> color <span style="color: #303030;">=</span> ColorStates[i].split(<span style="background-color: #fff0f0;">'|'</span>)[<span style="color: #0000d0; font-weight: bold;">1</span>];
$j(id).find(<span style="background-color: #fff0f0;">'.iColorPicker'</span>).val(color);
$j(id).find(<span style="background-color: #fff0f0;">'.iColorPicker'</span>).css(<span style="background-color: #fff0f0;">"background-color"</span>,color);
$j(id).find(settings.handleSelector).css(<span style="background-color: #fff0f0;">'backgroundColor'</span>, color);
}
}},
</pre>
</div>
<br />
That is all that is required for the colour modifications..we are almost done now .<br />
<br />
<h2>
Demo</h2>
To view a demo of where we have got to thus far <a href="http://www.lifeinsharepoint.co.uk/demo/DragAndDrop/PartThreeC/">click here</a><br />
<h2>
Resetting Layout</h2>
The final step we need to implement for the base functionality is the ability for the user to “reset” his / her layout back to the predefined default. To do this we need to add 5 lines of javascript into the <strong>buttonFunctions</strong> method into the reset button click event.<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;">deleteCookie(settings.positionCookie);
deleteCookie(settings.minimiseCookie);
deleteCookie(settings.colorCookie);
$j(<span style="background-color: #fff0f0;">'.iColorPicker'</span>).each(<span style="color: green; font-weight: bold;">function</span> () {
$j(<span style="color: green; font-weight: bold;">this</span>).val(<span style="background-color: #fff0f0;">''</span>);
});
</pre>
</div>
<br />
<br />
All this does (its pretty obvious) is delete each of the user set cookies and loop through each colour picker text box and clear the values which will reset the colours.<br />
<h2>
Summary</h2>
So that’s the end of part 3 of this blog series. It has been quite a long one but i hope that you have all learned something from this and can see how easy it is to combine jQuery and HTML to create a really great interface. The full js for this post is shown below. I will be hoping to get the next posts completed faster next time. Please leave your comments..they are always appreciated.<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: green; font-weight: bold;">var</span> iSharePoint <span style="color: #303030;">=</span> {
jQuery <span style="color: #303030;">:</span> $,
settings <span style="color: #303030;">:</span> {
columns <span style="color: #303030;">:</span> <span style="background-color: #fff0f0;">'.column'</span>,
zones <span style="color: #303030;">:</span> <span style="background-color: #fff0f0;">''</span>,
widgetSelector<span style="color: #303030;">:</span> <span style="background-color: #fff0f0;">'.widget'</span>,
handleSelector<span style="color: #303030;">:</span> <span style="background-color: #fff0f0;">'.widget-head'</span>,
contentSelector<span style="color: #303030;">:</span> <span style="background-color: #fff0f0;">'.widget-content'</span>,
editSelector<span style="color: #303030;">:</span> <span style="background-color: #fff0f0;">'.widget-edit'</span>,
toolboxSelector<span style="color: #303030;">:</span> <span style="background-color: #fff0f0;">'#toolbox'</span>,
widgetPlaceholder<span style="color: #303030;">:</span> <span style="background-color: #fff0f0;">'widget-placeholder'</span>,
badgeSelector<span style="color: #303030;">:</span> <span style="background-color: #fff0f0;">'.badge'</span>,
positionCookie<span style="color: #303030;">:</span> <span style="background-color: #fff0f0;">'widgetPositionsCookie'</span>, minimiseCookie<span style="color: #303030;">:</span> <span style="background-color: #fff0f0;">'widgetMinimisedCookie'</span>, colorCookie<span style="color: #303030;">:</span> <span style="background-color: #fff0f0;">'widgetColorCookie'</span>
},
init <span style="color: #303030;">:</span> <span style="color: green; font-weight: bold;">function</span> () {
settings <span style="color: #303030;">=</span> <span style="color: green; font-weight: bold;">this</span>.settings; <span style="color: green; font-weight: bold;">this</span>.defineZones(); <span style="color: green; font-weight: bold;">this</span>.buttonFunctions(); <span style="color: green; font-weight: bold;">this</span>.makeSortable(); <span style="color: green; font-weight: bold;">this</span>.loadStateFromCookie(); <span style="color: green; font-weight: bold;">this</span>.activateColours(); }, defineZones <span style="color: #303030;">:</span> <span style="color: green; font-weight: bold;">function</span> () { <span style="color: green; font-weight: bold;">var</span> iSharePoint <span style="color: #303030;">=</span> <span style="color: green; font-weight: bold;">this</span>,
$j <span style="color: #303030;">=</span> jQuery.noConflict(), settings <span style="color: #303030;">=</span> <span style="color: green; font-weight: bold;">this</span>.settings; <span style="color: green; font-weight: bold;">var</span> temp <span style="color: #303030;">=</span> <span style="background-color: #fff0f0;">""</span>;
$j(settings.columns).each(<span style="color: green; font-weight: bold;">function</span> () {
temp <span style="color: #303030;">+=</span> <span style="background-color: #fff0f0;">"#"</span> <span style="color: #303030;">+</span> $j(<span style="color: green; font-weight: bold;">this</span>).attr(<span style="background-color: #fff0f0;">'id'</span>) <span style="color: #303030;">+</span> <span style="background-color: #fff0f0;">","</span>;
});
settings.zones <span style="color: #303030;">=</span> temp.substring(<span style="color: #0000d0; font-weight: bold;">0</span>, temp.length<span style="color: #303030;">-</span><span style="color: #0000d0; font-weight: bold;">1</span>);
},
loadStateFromCookie <span style="color: #303030;">:</span> <span style="color: green; font-weight: bold;">function</span>() {
<span style="color: green; font-weight: bold;">var</span> iSharePoint <span style="color: #303030;">=</span> <span style="color: green; font-weight: bold;">this</span>,
$j <span style="color: #303030;">=</span> jQuery.noConflict(), settings <span style="color: #303030;">=</span> <span style="color: green; font-weight: bold;">this</span>.settings;
<span style="color: green; font-weight: bold;">var</span> PositionStates <span style="color: #303030;">=</span> getCookie(settings.positionCookie);
<span style="color: green; font-weight: bold;">var</span> MinimiseStates <span style="color: #303030;">=</span> getCookie(settings.minimiseCookie);
<span style="color: green; font-weight: bold;">var</span> ColorStates <span style="color: #303030;">=</span> getCookie(settings.colorCookie);
<span style="color: green; font-weight: bold;">this</span>.ProcessWidgetPositionData(PositionStates);
<span style="color: green; font-weight: bold;">this</span>.ProcessMinimiseData(MinimiseStates);
<span style="color: green; font-weight: bold;">this</span>.ProcessWidgetColorData(ColorStates);
updateBadge();
}, ProcessWidgetPositionData <span style="color: #303030;">:</span> <span style="color: green; font-weight: bold;">function</span>(PositionStates){
<span style="color: green; font-weight: bold;">var</span> iSharePoint <span style="color: #303030;">=</span> <span style="color: green; font-weight: bold;">this</span>,
$j <span style="color: #303030;">=</span> jQuery.noConflict(), settings <span style="color: #303030;">=</span> <span style="color: green; font-weight: bold;">this</span>.settings;
<span style="color: grey;">// Configure cookie </span>
<span style="color: green; font-weight: bold;">if</span> (PositionStates) {
<span style="color: grey;">//Get the Array of Orders </span>
<span style="color: green; font-weight: bold;">var</span> order <span style="color: #303030;">=</span> PositionStates.split(<span style="background-color: #fff0f0;">'|'</span>);
<span style="color: grey;">//Get the Array of Zones var zonearray = settings.zones.split(','); </span>
<span style="color: green; font-weight: bold;">for</span>(o <span style="color: green; font-weight: bold;">in</span> order) {
<span style="color: grey;">//Position the boxes in the correct locations </span>
$j(settings.widgetSelector).each(<span style="color: green; font-weight: bold;">function</span> () {
<span style="color: grey;">//Loops through each PositionState in order object </span>
<span style="color: green; font-weight: bold;">if</span> (order[o].search($j(<span style="color: green; font-weight: bold;">this</span>).attr(<span style="background-color: #fff0f0;">'id'</span>)) <span style="color: #303030;">!=</span> <span style="color: #303030;">-</span><span style="color: #0000d0; font-weight: bold;">1</span>) {
$j(zonearray[o]).append($j(<span style="color: green; font-weight: bold;">this</span>));
}
});
<span style="color: grey;">//Reorder the boxes in each zone </span>
<span style="color: green; font-weight: bold;">if</span> (order[o] <span style="color: #303030;">!=</span> <span style="background-color: #fff0f0;">""</span>) {
<span style="color: green; font-weight: bold;">var</span> _workOrder <span style="color: #303030;">=</span> order[o].split(<span style="background-color: #fff0f0;">','</span>);
<span style="color: green; font-weight: bold;">for</span> (i <span style="color: #303030;">=</span> <span style="color: #0000d0; font-weight: bold;">0</span>; i <span style="color: #303030;"><</span> _workOrder.length; i<span style="color: #303030;">++</span>) {
$j(zonearray[o]).append($j(<span style="background-color: #fff0f0;">'#'</span> <span style="color: #303030;">+</span> _workOrder[i]));
}
}
}
}
},
ProcessMinimiseData <span style="color: #303030;">:</span> <span style="color: green; font-weight: bold;">function</span>(MinimiseStates){
<span style="color: green; font-weight: bold;">var</span> iSharePoint <span style="color: #303030;">=</span> <span style="color: green; font-weight: bold;">this</span>,
$j <span style="color: #303030;">=</span> jQuery.noConflict(), settings <span style="color: #303030;">=</span> <span style="color: green; font-weight: bold;">this</span>.settings;
<span style="color: green; font-weight: bold;">if</span> (MinimiseStates <span style="color: #303030;">!=</span> <span style="color: green; font-weight: bold;">null</span>) {
MinimiseStates <span style="color: #303030;">=</span> MinimiseStates.split(<span style="background-color: #fff0f0;">','</span>);
<span style="color: green; font-weight: bold;">for</span> (i <span style="color: #303030;">=</span> <span style="color: #0000d0; font-weight: bold;">0</span>; i <span style="color: #303030;"><</span> MinimiseStates.length; i<span style="color: #303030;">++</span>) {
<span style="color: green; font-weight: bold;">var</span> id <span style="color: #303030;">=</span> <span style="background-color: #fff0f0;">"#"</span> <span style="color: #303030;">+</span> MinimiseStates[i];
$j(id).find(settings.contentSelector).slideToggle(<span style="background-color: #fff0f0;">"slow"</span>);
$j(id).toggleClass(<span style="background-color: #fff0f0;">"minimised"</span>);
}
}
},
ProcessWidgetColorData <span style="color: #303030;">:</span> <span style="color: green; font-weight: bold;">function</span>(ColorStates){
<span style="color: green; font-weight: bold;">var</span> iSharePoint <span style="color: #303030;">=</span> <span style="color: green; font-weight: bold;">this</span>,
$j <span style="color: #303030;">=</span> jQuery.noConflict(), settings <span style="color: #303030;">=</span> <span style="color: green; font-weight: bold;">this</span>.settings;
<span style="color: green; font-weight: bold;">if</span> (ColorStates <span style="color: #303030;">!=</span> <span style="color: green; font-weight: bold;">null</span>) { ColorStates <span style="color: #303030;">=</span> ColorStates.split(<span style="background-color: #fff0f0;">','</span>);
<span style="color: green; font-weight: bold;">for</span> (i <span style="color: #303030;">=</span> <span style="color: #0000d0; font-weight: bold;">0</span>; i <span style="color: #303030;"><</span> ColorStates.length; i<span style="color: #303030;">++</span>) {
<span style="color: green; font-weight: bold;">var</span> id <span style="color: #303030;">=</span> <span style="background-color: #fff0f0;">"#"</span> <span style="color: #303030;">+</span> ColorStates[i].split(<span style="background-color: #fff0f0;">'|'</span>)[<span style="color: #0000d0; font-weight: bold;">0</span>];
<span style="color: green; font-weight: bold;">var</span> color <span style="color: #303030;">=</span> ColorStates[i].split(<span style="background-color: #fff0f0;">'|'</span>)[<span style="color: #0000d0; font-weight: bold;">1</span>];
$j(id).find(<span style="background-color: #fff0f0;">'.iColorPicker'</span>).val(color);
$j(id).find(<span style="background-color: #fff0f0;">'.iColorPicker'</span>).css(<span style="background-color: #fff0f0;">"background-color"</span>,color);
$j(id).find(settings.handleSelector).css(<span style="background-color: #fff0f0;">'backgroundColor'</span>, color);
}
}
},
activateColours <span style="color: #303030;">:</span> <span style="color: green; font-weight: bold;">function</span> () {
<span style="color: green; font-weight: bold;">var</span> iSharePoint <span style="color: #303030;">=</span> <span style="color: green; font-weight: bold;">this</span>,
$j <span style="color: #303030;">=</span> jQuery.noConflict(), settings <span style="color: #303030;">=</span> <span style="color: green; font-weight: bold;">this</span>.settings;
$j(<span style="background-color: #fff0f0;">".pickerTable"</span>).click(<span style="color: green; font-weight: bold;">function</span> () {
$j(<span style="background-color: #fff0f0;">'.iColorPicker'</span>).each(<span style="color: green; font-weight: bold;">function</span> () {
<span style="color: green; font-weight: bold;">var</span> str <span style="color: #303030;">=</span> <span style="background-color: #fff0f0;">""</span>;
str <span style="color: #303030;">+=</span> $j(<span style="color: green; font-weight: bold;">this</span>).val();
$j(<span style="color: green; font-weight: bold;">this</span>).parents(settings.widgetSelector).find(settings.handleSelector).css(<span style="background-color: #fff0f0;">'backgroundColor'</span>, str);
});
SaveState();
});
},
makeSortable <span style="color: #303030;">:</span> <span style="color: green; font-weight: bold;">function</span> () { <span style="color: green; font-weight: bold;">var</span> iSharePoint <span style="color: #303030;">=</span> <span style="color: green; font-weight: bold;">this</span>,
$j <span style="color: #303030;">=</span> jQuery.noConflict(), settings <span style="color: #303030;">=</span> <span style="color: green; font-weight: bold;">this</span>.settings;
$j(settings.columns).sortable({ connectWith<span style="color: #303030;">:</span>
$j(settings.columns), handle<span style="color: #303030;">:</span> settings.handleSelector, cursor<span style="color: #303030;">:</span> <span style="background-color: #fff0f0;">'move'</span>,
revert<span style="color: #303030;">:</span> <span style="color: green; font-weight: bold;">true</span>, placeholder<span style="color: #303030;">:</span> settings.widgetPlaceholder, forcePlaceholderSize<span style="color: #303030;">:</span> <span style="color: green; font-weight: bold;">true</span>, revert<span style="color: #303030;">:</span> <span style="color: #0000d0; font-weight: bold;">300</span>, delay<span style="color: #303030;">:</span> <span style="color: #0000d0; font-weight: bold;">100</span>, opacity<span style="color: #303030;">:</span> <span style="color: #6000e0; font-weight: bold;">0.8</span>, start<span style="color: #303030;">:</span> <span style="color: green; font-weight: bold;">function</span> (event, ui) {
$j(settings.columns).css(<span style="background-color: #fff0f0;">"background-color"</span>,<span style="background-color: #fff0f0;">"#e7e5e5"</span>);
},
stop<span style="color: #303030;">:</span> <span style="color: green; font-weight: bold;">function</span> (event, ui) {
$j(settings.columns).css(<span style="background-color: #fff0f0;">"background-color"</span>,<span style="background-color: #fff0f0;">"transparent"</span>);
$j(settings.toolboxSelector).css(<span style="background-color: #fff0f0;">"background-color"</span>,<span style="background-color: #fff0f0;">"#fff"</span>);
SaveState();
}
})
},
buttonFunctions <span style="color: #303030;">:</span> <span style="color: green; font-weight: bold;">function</span>() {
<span style="color: green; font-weight: bold;">var</span> iSharePoint <span style="color: #303030;">=</span> <span style="color: green; font-weight: bold;">this</span>,
$j <span style="color: #303030;">=</span> jQuery.noConflict(), settings <span style="color: #303030;">=</span> <span style="color: green; font-weight: bold;">this</span>.settings;
$j(<span style="background-color: #fff0f0;">'.slide'</span>).mousedown(<span style="color: green; font-weight: bold;">function</span> (e) {
<span style="color: grey;">// Stop event bubbling: e.stopPropagation(); </span>
}).click(<span style="color: green; font-weight: bold;">function</span> () {
<span style="color: grey;">//To Do - Slide toolbox down </span>
$j(settings.toolboxSelector).slideToggle(<span style="background-color: #fff0f0;">"slow"</span>);
<span style="color: grey;">// Return false, prevent default action: </span>
<span style="color: green; font-weight: bold;">return</span> <span style="color: green; font-weight: bold;">false</span>;
})
$j(<span style="background-color: #fff0f0;">'.reset'</span>).mousedown(<span style="color: green; font-weight: bold;">function</span> (e) {
<span style="color: grey;">// Stop event bubbling: e.stopPropagation(); </span>
}).click(<span style="color: green; font-weight: bold;">function</span> () {
<span style="color: green; font-weight: bold;">if</span>(confirm(<span style="background-color: #fff0f0;">'Are you sure you want to reset your layout?'</span>)) { deleteCookie(settings.positionCookie);
deleteCookie(settings.minimiseCookie);
deleteCookie(settings.colorCookie);
$j(<span style="background-color: #fff0f0;">'.iColorPicker'</span>).each(<span style="color: green; font-weight: bold;">function</span> () {
$j(<span style="color: green; font-weight: bold;">this</span>).val(<span style="background-color: #fff0f0;">''</span>);
});
location.reload();
}
<span style="color: grey;">// Return false, prevent default action: </span>
<span style="color: green; font-weight: bold;">return</span> <span style="color: green; font-weight: bold;">false</span>;
})
$j(<span style="background-color: #fff0f0;">'.edit'</span>).mousedown(<span style="color: green; font-weight: bold;">function</span> (e) {
e.stopPropagation();
}).click(<span style="color: green; font-weight: bold;">function</span> () {
<span style="color: grey;">//To Do - What to do when clicked first time </span>
$j(<span style="color: green; font-weight: bold;">this</span>).parents(settings.widgetSelector).find(settings.editSelector).slideToggle(<span style="background-color: #fff0f0;">"slow"</span>);
<span style="color: green; font-weight: bold;">return</span> <span style="color: green; font-weight: bold;">false</span>;
})
<span style="color: grey;">// Create new anchor element with class of 'remove': </span>
$j(<span style="background-color: #fff0f0;">'.remove'</span>).mousedown(<span style="color: green; font-weight: bold;">function</span> (e) {
<span style="color: grey;">// Stop event bubbling: e.stopPropagation(); </span>
}).click(<span style="color: green; font-weight: bold;">function</span> () {
<span style="color: grey;">// Confirm action - make sure that the user is sure: </span>
<span style="color: green; font-weight: bold;">if</span>(confirm(<span style="background-color: #fff0f0;">'Please confirm the removal of the widget. This can be restored from the widget toolbox at the bottom of the screen.'</span>)) { $j(<span style="color: green; font-weight: bold;">this</span>).parents(settings.widgetSelector).appendTo(settings.toolboxSelector);
SaveState();
}
});
$j(<span style="background-color: #fff0f0;">'.collapse'</span>).mousedown(<span style="color: green; font-weight: bold;">function</span> (e) {
e.stopPropagation();
}).click(<span style="color: green; font-weight: bold;">function</span> () {
$j(<span style="color: green; font-weight: bold;">this</span>).parents(settings.widgetSelector).find(settings.contentSelector).slideToggle(<span style="background-color: #fff0f0;">"slow"</span>);
$j(<span style="color: green; font-weight: bold;">this</span>).parents(settings.widgetSelector).toggleClass(<span style="background-color: #fff0f0;">"minimised"</span>);
SaveState();
<span style="color: green; font-weight: bold;">return</span> <span style="color: green; font-weight: bold;">false</span>;
}) },};
<span style="color: green; font-weight: bold;">function</span> updateBadge(){
$j <span style="color: #303030;">=</span> jQuery.noConflict(),
$j(iSharePoint.settings.badgeSelector).text($j(iSharePoint.settings.toolboxSelector <span style="color: #303030;">+</span> <span style="background-color: #fff0f0;">" > "</span> <span style="color: #303030;">+</span> iSharePoint.settings.widgetSelector).size());}
<span style="color: green; font-weight: bold;">function</span> SaveState(){
<span style="color: grey;">//Place SharePoint in No Conflict Mode </span>
<span style="color: green; font-weight: bold;">var</span> $j <span style="color: #303030;">=</span> jQuery.noConflict();
<span style="color: grey;">//Update the Badge </span>
updateBadge();
<span style="color: grey;">// Create/write a cookie and store it for 1 day </span>
setCookie(iSharePoint.settings.positionCookie, GetPositionState(), <span style="color: #0000d0; font-weight: bold;">1</span>);
setCookie(iSharePoint.settings.minimiseCookie, GetMinimisedState(), <span style="color: #0000d0; font-weight: bold;">1</span>);
setCookie(iSharePoint.settings.colorCookie, GetWidgetColor(), <span style="color: #0000d0; font-weight: bold;">1</span>);}
<span style="color: green; font-weight: bold;">function</span> GetPositionState(){
<span style="color: grey;">//Get a local array of the Zones </span>
<span style="color: green; font-weight: bold;">var</span> zones <span style="color: #303030;">=</span> iSharePoint.settings.zones.split(<span style="background-color: #fff0f0;">','</span>);
<span style="color: grey;">//Holder variable for widget Positions </span>
<span style="color: green; font-weight: bold;">var</span> widgetPositions <span style="color: #303030;">=</span> <span style="background-color: #fff0f0;">""</span>;
<span style="color: grey;">//Loop through each zone to create a pipe delimited string </span>
<span style="color: green; font-weight: bold;">for</span>(z <span style="color: green; font-weight: bold;">in</span> zones) {
<span style="color: grey;">//Get the array of the current zone as CSV </span>
widgetPositions <span style="color: #303030;">+=</span> $j(zones[z]).sortable(<span style="background-color: #fff0f0;">'toArray'</span>) <span style="color: #303030;">+</span> <span style="background-color: #fff0f0;">"|"</span>; }
<span style="color: grey;">//Trim the end off the string widgetPositions = widgetPositions.substring(0, widgetPositions.length-1); </span>
<span style="color: green; font-weight: bold;">return</span> widgetPositions;}
<span style="color: green; font-weight: bold;">function</span> GetMinimisedState(){
<span style="color: green; font-weight: bold;">var</span> $j <span style="color: #303030;">=</span> jQuery.noConflict();
<span style="color: green; font-weight: bold;">var</span> list <span style="color: #303030;">=</span> <span style="color: green; font-weight: bold;">new</span> <span style="color: #007020;">Array</span>();
$j(<span style="background-color: #fff0f0;">'.minimised'</span>).each(<span style="color: green; font-weight: bold;">function</span> () {
list.push($j(<span style="color: green; font-weight: bold;">this</span>).attr(<span style="background-color: #fff0f0;">'id'</span>)); });
<span style="color: green; font-weight: bold;">return</span> list; }
<span style="color: green; font-weight: bold;">function</span> GetWidgetColor() {
<span style="color: green; font-weight: bold;">var</span> $j <span style="color: #303030;">=</span> jQuery.noConflict();
<span style="color: green; font-weight: bold;">var</span> list <span style="color: #303030;">=</span> <span style="color: green; font-weight: bold;">new</span> <span style="color: #007020;">Array</span>();
$j(iSharePoint.settings.widgetSelector).each(<span style="color: green; font-weight: bold;">function</span> () {
list.push($j(<span style="color: green; font-weight: bold;">this</span>).attr(<span style="background-color: #fff0f0;">'id'</span>) <span style="color: #303030;">+</span> <span style="background-color: #fff0f0;">"|"</span> <span style="color: #303030;">+</span> $j(<span style="color: green; font-weight: bold;">this</span>).find(<span style="background-color: #fff0f0;">'.iColorPicker'</span>).val()); });
<span style="color: green; font-weight: bold;">return</span> list;
}
jQuery(<span style="color: #007020;">document</span>).ready(<span style="color: green; font-weight: bold;">function</span>(){
<span style="color: green; font-weight: bold;">var</span> $j <span style="color: #303030;">=</span> jQuery.noConflict();
$j(iSharePoint.settings.widgetSelector).corner();
updateBadge();
iSharePoint.init();
});
</pre>
</div>
<br />
<br />
<h2>
Series Content</h2>
<ol>
<li><h3 class="post-title entry-title" style="background-color: white; background-image: url(http://www.templatesimages.com/images/Minyx20/thdotsH.gif); background-position: 0% 100%; background-repeat: repeat no-repeat; color: #333333; font-family: 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; font-weight: normal; letter-spacing: -1px; line-height: 18px; margin: 0px; padding: 6px 0px;">
<a href="http://digsharepoint.blogspot.com/2013/02/creating-igoogle-ui-for-sharepoint.html" style="color: #6699cc; margin: 0px; outline-style: none; padding: 0px; text-decoration: initial;"><span style="font-size: small;">Creating iGoogle UI for SharePoint 2010/SharePoint 2013 - Part I : Overview, Concept, HTML Structure & Jquery Basics</span></a></h3>
</li>
<li><h3 class="post-title entry-title" style="background-color: white; background-image: url(http://www.templatesimages.com/images/Minyx20/thdotsH.gif); background-position: 0% 100%; background-repeat: repeat no-repeat; color: #333333; font-family: 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; font-weight: normal; letter-spacing: -1px; line-height: 18px; margin: 0px; padding: 6px 0px;">
<a href="http://digsharepoint.blogspot.com/2013/02/creating-igoogle-ui-for-sharepoint_19.html" style="color: #6699cc; margin: 0px; outline-style: none; padding: 0px; text-decoration: initial;"><span style="font-size: small;">Creating iGoogle UI for SharePoint 2010/SharePoint 2013 - Part II : Dragging, Dropping, Sorting and Collapsing</span></a></h3>
</li>
<li><h3 class="post-title entry-title" style="background-color: white; background-image: url(http://www.templatesimages.com/images/Minyx20/thdotsH.gif); background-position: 0% 100%; background-repeat: repeat no-repeat; color: #333333; font-family: 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; font-weight: normal; letter-spacing: -1px; line-height: 18px; margin: 0px; padding: 6px 0px;">
<a href="http://digsharepoint.blogspot.com/2013/02/creating-igoogle-ui-for-sharepoint_333.html" style="color: #ff3366; margin: 0px; outline-style: none; padding: 0px; text-decoration: initial;"><span style="font-size: small;">Creating iGoogle UI for SharePoint 2010/SharePoint 2013 - Part III : Saving WebPart states using Cookies</span></a></h3>
</li>
<li><h3 class="post-title entry-title" style="background-color: white; background-image: url(http://www.templatesimages.com/images/Minyx20/thdotsH.gif); background-position: 0% 100%; background-repeat: repeat no-repeat; color: #333333; font-family: 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; font-weight: normal; letter-spacing: -1px; line-height: 18px; margin: 0px; padding: 6px 0px;">
<a href="http://digsharepoint.blogspot.com/2013/02/creating-igoogle-ui-for-sharepoint_5146.html" style="color: #6699cc; margin: 0px; outline-style: none; padding: 0px; text-decoration: initial;"><span style="font-size: small;">Creating iGoogle UI for SharePoint 2010/SharePoint 2013 - Part IV : Control Adapters</span></a></h3>
</li>
<li><h3 class="post-title entry-title" style="background-color: white; background-image: url(http://www.templatesimages.com/images/Minyx20/thdotsH.gif); background-position: 0% 100%; background-repeat: repeat no-repeat; color: #333333; font-family: 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; font-weight: normal; letter-spacing: -1px; line-height: 18px; margin: 0px; padding: 6px 0px;">
<a href="http://digsharepoint.blogspot.com/2013/02/creating-igoogle-ui-for-sharepoint_349.html" style="color: #6699cc; margin: 0px; outline-style: none; padding: 0px; text-decoration: initial;"><span style="font-size: small;">Creating iGoogle UI for SharePoint 2010/SharePoint 2013 - Part V : SharePoint 2010 Integration</span></a></h3>
</li>
</ol>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-3888123222103988694.post-23368565651270886792013-02-19T03:23:00.000-05:002013-02-19T05:15:54.202-05:00Creating iGoogle UI for SharePoint 2010/SharePoint 2013 - Part II : Dragging, Dropping, Sorting and Collapsing<br />
<h2>
Series Content</h2>
<ol>
<li><h3 class="post-title entry-title" style="background-color: white; background-image: url(http://www.templatesimages.com/images/Minyx20/thdotsH.gif); background-position: 0% 100%; background-repeat: repeat no-repeat; color: #333333; font-family: 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; font-weight: normal; letter-spacing: -1px; line-height: 18px; margin: 0px; padding: 6px 0px;">
<a href="http://digsharepoint.blogspot.com/2013/02/creating-igoogle-ui-for-sharepoint.html" style="color: #6699cc; margin: 0px; outline-style: none; padding: 0px; text-decoration: initial;"><span style="font-size: small;">Creating iGoogle UI for SharePoint 2010/SharePoint 2013 - Part I : Overview, Concept, HTML Structure & Jquery Basics</span></a></h3>
</li>
<li><h3 class="post-title entry-title" style="background-color: white; background-image: url(http://www.templatesimages.com/images/Minyx20/thdotsH.gif); background-position: 0% 100%; background-repeat: repeat no-repeat; color: #333333; font-family: 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; font-weight: normal; letter-spacing: -1px; line-height: 18px; margin: 0px; padding: 6px 0px;">
<a href="http://digsharepoint.blogspot.com/2013/02/creating-igoogle-ui-for-sharepoint_19.html" style="color: #6699cc; margin: 0px; outline-style: none; padding: 0px; text-decoration: initial;"><span style="font-size: small;">Creating iGoogle UI for SharePoint 2010/SharePoint 2013 - Part II : Dragging, Dropping, Sorting and Collapsing</span></a></h3>
</li>
<li><h3 class="post-title entry-title" style="background-color: white; background-image: url(http://www.templatesimages.com/images/Minyx20/thdotsH.gif); background-position: 0% 100%; background-repeat: repeat no-repeat; color: #333333; font-family: 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; font-weight: normal; letter-spacing: -1px; line-height: 18px; margin: 0px; padding: 6px 0px;">
<a href="http://digsharepoint.blogspot.com/2013/02/creating-igoogle-ui-for-sharepoint_333.html" style="color: #ff3366; margin: 0px; outline-style: none; padding: 0px; text-decoration: initial;"><span style="font-size: small;">Creating iGoogle UI for SharePoint 2010/SharePoint 2013 - Part III : Saving WebPart states using Cookies</span></a></h3>
</li>
<li><h3 class="post-title entry-title" style="background-color: white; background-image: url(http://www.templatesimages.com/images/Minyx20/thdotsH.gif); background-position: 0% 100%; background-repeat: repeat no-repeat; color: #333333; font-family: 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; font-weight: normal; letter-spacing: -1px; line-height: 18px; margin: 0px; padding: 6px 0px;">
<a href="http://digsharepoint.blogspot.com/2013/02/creating-igoogle-ui-for-sharepoint_5146.html" style="color: #6699cc; margin: 0px; outline-style: none; padding: 0px; text-decoration: initial;"><span style="font-size: small;">Creating iGoogle UI for SharePoint 2010/SharePoint 2013 - Part IV : Control Adapters</span></a></h3>
</li>
<li><h3 class="post-title entry-title" style="background-color: white; background-image: url(http://www.templatesimages.com/images/Minyx20/thdotsH.gif); background-position: 0% 100%; background-repeat: repeat no-repeat; color: #333333; font-family: 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; font-weight: normal; letter-spacing: -1px; line-height: 18px; margin: 0px; padding: 6px 0px;">
<a href="http://digsharepoint.blogspot.com/2013/02/creating-igoogle-ui-for-sharepoint_349.html" style="color: #6699cc; margin: 0px; outline-style: none; padding: 0px; text-decoration: initial;"><span style="font-size: small;">Creating iGoogle UI for SharePoint 2010/SharePoint 2013 - Part V : SharePoint 2010 Integration</span></a></h3>
</li>
</ol>
<br />
<h2>
Overview</h2>
In Part Two we will take the basic html from part one and using some Javascript magic make it into a more compelling and interactive page. Firstly we will identify the various techniques individually and then put them all together at the end of this post.<br />
<h2>
Javascript</h2>
As mentioned in the previous post, a decision was made to use the <a href="http://jquery.com/" target="_blank" title="jQuery Library">jQuery Library</a> with the <a href="http://jqueryui.com/" target="_blank">jQuery UI</a> abstraction layer to provide the functionality for our “iGoogle” interface. It is using this library that will speed up development and keep everything cross-browser capable. In our solution we will be using the following effects / methods from the jQuery & jQuery UI library.<br />
<ul>
<li><a href="http://jqueryui.com/demos/sortable/" target="_blank">Sortable</a></li>
<li><a href="http://jqueryui.com/demos/toggle/" target="_blank">Toggle</a></li>
<li><a href="http://api.jquery.com/slideToggle/" target="_blank">slideToggle</a></li>
<li><a href="http://api.jquery.com/click/" target="_blank">Click</a></li>
<li><a href="http://api.jquery.com/css/" target="_blank">CSS</a></li>
<li><a href="http://api.jquery.com/mousedown/" target="_blank">MouseDown</a></li>
<li><a href="http://api.jquery.com/find/" target="_blank">Find</a></li>
</ul>
We will begin by modifying our script.js file to include a new global object called “<strong>iSharePoint</strong>“. This will be our namespace that we will use to contain all of the functionality for our interface. Within this object we will create a set of functionality that uses the libraries and methods described above.<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: green; font-weight: bold;">var</span> iSharePoint <span style="color: #303030;">=</span> { settings <span style="color: #303030;">:</span> { <span style="color: grey;">// All settings will be defined here }, init : function(){ // This init function kicks off the whole thing }};</span>
</pre>
</div>
<br />
This method will be called from the jQuery Document Ready function which will ensure all the items are ready to be manipulated before we do anything.<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;">jQuery(<span style="color: #007020;">document</span>).ready(<span style="color: green; font-weight: bold;">function</span>(){ iSharePoint.init();});
</pre>
</div>
<br />
<br />
<h3>
iSharePoint Settings</h3>
The settings object we have defined will contain all of the global settings we require to make this item as functional as possible.<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;">settings : { columns : '.column',zones : '', widgetSelector: '.widget', handleSelector: '.widget-head', contentSelector: '.widget-content',editSelector: '.widget-edit',toolboxSelector: '#toolbox',widgetPlaceholder: 'widget-placeholder'}
</pre>
</div>
<br />
<br />
There are quite a few settings which I will now explain each in detail:<br />
<ul>
<li>columns – this is the class selector for each of the columns that we would like to be sortable and drag and drop between.</li>
<li>zones – these are the unique ID’s of each of the columns. (This is blank because we are going to dynamically populate this based on the DOM contents)</li>
<li>widgetSelector – this is the wrapper div of each of our draggable widgets.</li>
<li>handleSelector – this is the grab handle class for the div we will use to drag the widget around the page</li>
<li>contentSelector – this defines the class of the widget content wrapper which is used for the collapsing and expanding functionality.</li>
<li>editSelector – this defines the class of the edit panel wrapper which is used to contain the edit functions.</li>
<li>toolboxSelector – this defines the footer toolbox where unwanted or unused widgets can sit out of the way.</li>
<li>widgetPlaceholder – this is the name of the class that is assigned to the drag target div so you know where your div will end up.</li>
</ul>
<h3>
Bring the Widgets to life</h3>
The next part is a little more complicated but we will take each part individually. We now need to add another method to our global object that we will call “<strong>buttonFunctions</strong>”<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;">buttonFunctions <span style="color: #303030;">:</span> <span style="color: green; font-weight: bold;">function</span>() { <span style="color: grey;">//All functions for the buttons will belong in this method });</span>
</pre>
</div>
<br />
To this method we will add first create a new reference to our global object. This is useful if multiple instances are required as well as if you ever need to rename the global object. We will then need to create a new variable so we can reference jQuery without using the “$” symbol in noConflict() mode as that symbol it is used by SharePoint’s internal js files and can cause clashes. (Thanks to Chris O’Brien for explaining this <a href="http://www.sharepointnutsandbolts.com/2011/05/my-jquery-ajax-and-sharepoint-2010.html">here</a>) We will then create a local reference to the settings only as a shortcut so you don’t need to type “this.settings” every time.<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;">buttonFunctions <span style="color: #303030;">:</span> <span style="color: green; font-weight: bold;">function</span>() { <span style="color: green; font-weight: bold;">var</span> iSharePoint <span style="color: #303030;">=</span> <span style="color: green; font-weight: bold;">this</span>, $j <span style="color: #303030;">=</span> jQuery.noConflict(), settings <span style="color: #303030;">=</span> <span style="color: green; font-weight: bold;">this</span>.settings; });
</pre>
</div>
<br />
The next step is to define our button click handlers so that each widget has independent click events that can be raised. One thing to be careful of is what is known as “<strong>Event Bubbling</strong>“. This is when, upon clicking on an element in the DOM the event will bubble upwards through to the highest level element which an event the same as the ones you have recently triggered. To prevent this from happening we need to add a line of code (e.stopPropagation();) which will prevent this from happening. Below is a skeleton framework of the button click handlers.<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;">buttonFunctions <span style="color: #303030;">:</span> <span style="color: green; font-weight: bold;">function</span>() { <span style="color: green; font-weight: bold;">var</span> iSharePoint <span style="color: #303030;">=</span> <span style="color: green; font-weight: bold;">this</span>, $j <span style="color: #303030;">=</span> jQuery.noConflict(), settings <span style="color: #303030;">=</span> <span style="color: green; font-weight: bold;">this</span>.settings; $j(<span style="background-color: #fff0f0;">'.slide'</span>).mousedown(<span style="color: green; font-weight: bold;">function</span> (e) { <span style="color: grey;">// Stop event bubbling: e.stopPropagation(); }).click(function () { //To Do - Slide toolbox down alert('Toolbox to be expanded'); // Return false, prevent default action: return false; }) $j('.reset').mousedown(function (e) { // Stop event bubbling: e.stopPropagation(); }).click(function () { //To Do - Reset layout alert('Reset Layout'); // Return false, prevent default action: return false; }) $j('.edit').mousedown(function (e) { e.stopPropagation(); }).click(function () { //To Do - What to do when clicked first time alert('Toolbox Toggle'); return false; }) // Create new anchor element with class of 'remove': $j('.remove').mousedown(function (e) { // Stop event bubbling: e.stopPropagation(); }).click(function () { //To Do - Code to remove widget and place in toolbox alert('Remove Widget from page'); // Return false, prevent default action: return false; }) $j('.collapse').mousedown(function (e) { e.stopPropagation(); }).click(function () { //To Do - What to do when clicked first time alert('Collapse Toggle'); return false; }) }</span>
</pre>
</div>
<br />
<br />
As you can see there is quite alot of framework code added to contain the button functionality.<br />
<h3>
Demo</h3>
You can see and example of where we are currently by clicking here for a <a href="http://www.lifeinsharepoint.co.uk/demo/DragAndDrop/PartTwoA/" target="_blank">demo</a><br />
<h3>
Button Functions in More Detail</h3>
We will now flesh out each of the functions in the method to provide them with some actual functionality starting with the widget toolbox slider at the bottom.<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;">$j(<span style="background-color: #fff0f0;">'.slide'</span>).mousedown(<span style="color: green; font-weight: bold;">function</span> (e) { <span style="color: grey;">// Stop event bubbling: e.stopPropagation();}).click(function () { $j(settings.toolboxSelector).slideToggle("slow");// Return false, prevent default action:return false;})</span>
</pre>
</div>
<br />
As you can see we have changed line 5 from the alert to<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;">$j(settings.toolboxSelector).slideToggle(<span style="background-color: #fff0f0;">"slow"</span>);
</pre>
</div>
<br />
<br />
This simple line will enable use to open and close the toolbox at the bottom. Nice and simple.<br />
The reset button will not be functional at this point as in future posts we will be resetting the cookies and refreshing the page. At this stage we will simply ask for confirmation of the action and then refresh the page.<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;">$j(<span style="background-color: #fff0f0;">'.reset'</span>).mousedown(<span style="color: green; font-weight: bold;">function</span> (e) { <span style="color: grey;">// Stop event bubbling: e.stopPropagation();}).click(function () { if(confirm('Are you sure you want to reset your layout?')) { location.reload(); }// Return false, prevent default action:return false;})</span>
</pre>
</div>
<br />
<br />
We have again removed the alert placeholder from the framework above and instead added three lines of code 5-7 which will ask the user to confirm that they want to reset and if they click yes then the page will reload otherwise nothing will happen. Two down, Three to go.<strong></strong><br />
Next we will add the toggle functionality to the edit toolbar. This again is another single line but with some nested functions which will be explained.<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;">$j(<span style="background-color: #fff0f0;">'.edit'</span>).mousedown(<span style="color: green; font-weight: bold;">function</span> (e) { e.stopPropagation();}).click(<span style="color: green; font-weight: bold;">function</span> () { <span style="color: grey;">//To Do - What to do when clicked first time $j(this).parents(settings.widgetSelector).find(settings.editSelector).slideToggle("slow"); return false;})</span>
</pre>
</div>
<br />
As you can see we have once again replaced the alert placeholder with the single line. If we look at the html of a widget we can explain how this works.<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: #007000;"><div</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">'widget'</span> <span style="color: #0000c0;">id=</span><span style="background-color: #fff0f0;">'6'</span><span style="color: #007000;">></span> <span style="color: #007000;"><div</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">"widget-head"</span><span style="color: #007000;">></span> <span style="color: #007000;"><a</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">'collapse'</span><span style="color: #007000;">></span>collapse<span style="color: #007000;"></a></span> <span style="color: #007000;"><h3></span>Widget title 6<span style="color: #007000;"></h3></span> <span style="color: #007000;"><a</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">'remove'</span><span style="color: #007000;">></span>remove<span style="color: #007000;"></a></span> <span style="color: #007000;"><a</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">'edit'</span><span style="color: #007000;">></span>edit<span style="color: #007000;"></a></span> <span style="color: #007000;"></div></span> <span style="color: #007000;"><div</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">"widget-edit"</span><span style="color: #007000;">></span> <span style="color: #007000;"><input</span> <span style="color: #0000c0;">type=</span><span style="background-color: #fff0f0;">'text'</span> <span style="color: #0000c0;">type=</span><span style="background-color: #fff0f0;">"text"</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">"iColorPicker"</span> <span style="color: #0000c0;">id=</span><span style="background-color: #fff0f0;">'color6'</span> <span style="color: #007000;">/></span> <span style="color: #007000;"><div</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">'clearfix'</span><span style="color: #007000;">></div></span> <span style="color: #007000;"></div></span> <span style="color: #007000;"><div</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">"widget-content"</span><span style="color: #007000;">></span> <span style="color: #007000;"><p></span>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse lorem orci, ornare at malesuada a, pulvinar lobortis neque. Integer et felis vel augue suscipit vestibulum id nec nulla.<span style="color: #007000;"></p></span> <span style="color: #007000;"></div></div></span>
</pre>
</div>
<br />
<br />
What we are trying to do is traverse the DOM to open and close the <strong>widget-edit</strong> div. Our starting location is <a class=’edit’>edit</a> which is the first part of the code <strong>$j(this)</strong>. We then want to get the reference to the current buttons parent only, with a selector of settings.widgetSelector (which in our settings is set to “.widget”). We then want to find the widget-edit div which is this part of the code <strong>find(settings.editSelector) </strong>and then we finally ask the code to perform a slideToggle(“slow”). The slow property creates a nice visible slide. Alternate values for this can be fast or to not provide a property at all.<br />
So..Whats next. The next item on the list is the remove functionality. What we want this to do is remove the widget from the current div that it sits in and place it in the toolbox div. This div has some specific CSS attached to it which will collapse the whole widget and just show the title bar with no buttons.<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;">$j(<span style="background-color: #fff0f0;">'.remove'</span>).mousedown(<span style="color: green; font-weight: bold;">function</span> (e) { <span style="color: grey;">// Stop event bubbling: e.stopPropagation();}).click(function () { // Confirm action - make sure that the user is sure: if(confirm('Please confirm the removal of the widget. This can be restored from the widget toolbox at the bottom of the screen.')) { $j(this).parents(settings.widgetSelector).appendTo(settings.toolboxSelector); }});</span>
</pre>
</div>
<br />
<br />
This time we are using a similar method to the previous function by traversing the DOM to find the current buttons parent. However this time we want to take this whole DIV and using the <strong>appendTo() </strong>method we can attach it to the toolboxSelector div defined in the settings. Simple!<br />
The final one to do is the collapse button. This once again is very similar to the edit button but with an extra line afterwards.<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;">$j(<span style="background-color: #fff0f0;">'.collapse'</span>).mousedown(<span style="color: green; font-weight: bold;">function</span> (e) { e.stopPropagation();}).click(<span style="color: green; font-weight: bold;">function</span> () { $j(<span style="color: green; font-weight: bold;">this</span>).parents(settings.widgetSelector).find(settings.contentSelector).slideToggle(<span style="background-color: #fff0f0;">"slow"</span>); $j(<span style="color: green; font-weight: bold;">this</span>).parents(settings.widgetSelector).toggleClass(<span style="background-color: #fff0f0;">"minimised"</span>); <span style="color: green; font-weight: bold;">return</span> <span style="color: green; font-weight: bold;">false</span>;})
</pre>
</div>
<br />
<br />
Once again you can see that we are getting the reference to the parent and then this time finding the contentSelector to perform the slide toggle on. Afterwards we are once again getting the parent widget wrapper but this time we are now adding a class via the toggleClass method. We need to do this so in future posts when we are saving the various states we can easily identify which widgets are minimised.<br />
Thats is it for the button configuration. We can now delete, open the edit box and toolbox, we can delete a widget from the main view and we can reset the page and force a page refresh.<br />
<h3>
Demo</h3>
To view a demo of where we are so far click <a href="http://www.lifeinsharepoint.co.uk/demo/DragAndDrop/PartTwoB/" target="_blank">here</a><br />
<h2>
Adding Drag and Drop functionality</h2>
So next up is the nicest piece which is the ability to drag and drop widgets between the columns. Firstly like we did for the buttons we are going to add another method to our global object that we will call “makeSortable”. Once again like above we will also add the iSharePoint reference, noConflict and settings references to the top.<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;">makeSortable<span style="color: #303030;">:</span> <span style="color: green; font-weight: bold;">function</span>() {
<span style="color: green; font-weight: bold;">var</span> iSharePoint <span style="color: #303030;">=</span> <span style="color: green; font-weight: bold;">this</span>,
$j <span style="color: #303030;">=</span> jQuery.noConflict(),
settings <span style="color: #303030;">=</span> <span style="color: green; font-weight: bold;">this</span>.settings;
});
</pre>
</div>
<br />
To this function we will now add a reference to the jQuery <a href="http://jqueryui.com/demos/sortable/" target="_blank"><strong>sortable</strong></a> function. This function takes a set of parameters which will be explained below the code sample.<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;">$j(settings.columns).sortable({ connectWith<span style="color: #303030;">:</span> $j(settings.columns), handle<span style="color: #303030;">:</span> settings.handleSelector, cursor<span style="color: #303030;">:</span> <span style="background-color: #fff0f0;">'move'</span>, revert<span style="color: #303030;">:</span> <span style="color: green; font-weight: bold;">true</span>, placeholder<span style="color: #303030;">:</span> settings.widgetPlaceholder, forcePlaceholderSize<span style="color: #303030;">:</span> <span style="color: green; font-weight: bold;">true</span>, delay<span style="color: #303030;">:</span> <span style="color: #0000d0; font-weight: bold;">100</span>, opacity<span style="color: #303030;">:</span> <span style="color: #6000e0; font-weight: bold;">0.8</span>, start<span style="color: #303030;">:</span> <span style="color: green; font-weight: bold;">function</span> (event, ui) { $j(settings.columns).css(<span style="background-color: #fff0f0;">"background-color"</span>,<span style="background-color: #fff0f0;">"#e7e5e5"</span>); }, stop<span style="color: #303030;">:</span> <span style="color: green; font-weight: bold;">function</span> (event, ui) { $j(settings.columns).css(<span style="background-color: #fff0f0;">"background-color"</span>,<span style="background-color: #fff0f0;">"transparent"</span>); $j(settings.toolboxSelector).css(<span style="background-color: #fff0f0;">"background-color"</span>,<span style="background-color: #fff0f0;">"#fff"</span>); }})
</pre>
</div>
<br />
<br />
<ul>
<li>Line 1 : take the reference of the columns from the settings and runs the sortable method on it.</li>
<li>Line 2 : this line enables us to connect all columns together so you are able to drag and drop between all instances</li>
<li>Line 3 : defines the element that you use to drag and drop</li>
<li>Line 4 : defines what the cursor looks like when dragging</li>
<li>Line 5 : If set to true, the item will be reverted to its new DOM position with a smooth animation.</li>
<li>Line 6 : The class that gets applied to the otherwise white space when you are dragging.</li>
<li>Line 7: Self explanitory, forces the placeholder to have a size.</li>
<li>Line 8: Time in milliseconds to define when the sorting should start.</li>
<li>Line 9: Opacity of the element currently being dragged.</li>
</ul>
The following lines 10 – 12 and 13-16 are two functions that get run at the start and end fo the dragging process. The start function is used to change the colour of the columns so that they are highlighted when you drag so you know what the boundaries are. The stop function reverses this and resets the toolbox and columns back to their previous state. In future posts we will be using the stop function to save the state of the widgets.<br />
<h2>
Notifications</h2>
You may have noticed by now that there is a div called “<strong>Badge</strong>” which is displayed in the HTML as a red circle. This does indeed have a purpose to display the number of items currently in the toolbox. To do this we once again need to add alittle piece of jQuery magic to bring it all together.<br />
Firstly we need to create a global function which is not in the iSharePoint object.<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: green; font-weight: bold;">function</span> updateBadge(){ $j <span style="color: #303030;">=</span> jQuery.noConflict(), $j(iSharePoint.settings.badgeSelector).text($j(iSharePoint.settings.toolboxSelector <span style="color: #303030;">+</span> <span style="background-color: #fff0f0;">" > "</span> <span style="color: #303030;">+</span> iSharePoint.settings.widgetSelector).size());}
</pre>
</div>
<br />
What this does is count the number of widget divs that are in the toolbox at the bottom using the <strong>.Size() </strong>method. The references to the divs are taken from the iSharePoint settings. All that is needed to do now is to add the <strong>updateBadge();</strong> to the ready function.<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;">jQuery(<span style="color: #007020;">document</span>).ready(<span style="color: green; font-weight: bold;">function</span>(){ iSharePoint.init(); updateBadge();});
</pre>
</div>
<br />
Then add it to the .<strong>remove </strong>click event.<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: grey;">// Create new anchor element with class of 'remove':$j('.remove').mousedown(function (e) { // Stop event bubbling: e.stopPropagation();}).click(function () { // Confirm action - make sure that the user is sure: if(confirm('Please confirm the removal of the widget. This can be restored from the widget toolbox at the bottom of the screen.')) { $j(this).parents(settings.widgetSelector).appendTo(settings.toolboxSelector); updateBadge(); }});</span>
</pre>
</div>
<br />
And then finally add it to the stop event from the sortable method.<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;">stop<span style="color: #303030;">:</span> <span style="color: green; font-weight: bold;">function</span> (event, ui) { $j(settings.columns).css(<span style="background-color: #fff0f0;">"background-color"</span>,<span style="background-color: #fff0f0;">"transparent"</span>); $j(settings.toolboxSelector).css(<span style="background-color: #fff0f0;">"background-color"</span>,<span style="background-color: #fff0f0;">"#fff"</span>); updateBadge();}
</pre>
</div>
<br />
<br />
<h2>
Colour Picker – Edit toolbar</h2>
The final piece of this post is to enable the colour of the header to be changed using the toolbox. To do this we need to add another function to the global iSharePoint object called <strong>activateColours</strong> which will be used to process the colours.<br />
The Markup for the edit toolbox is as follows:<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: #007000;"><div</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">"widget-edit"</span><span style="color: #007000;">></span> <span style="color: #007000;"><input</span> <span style="color: #0000c0;">type=</span><span style="background-color: #fff0f0;">'text'</span> <span style="color: #0000c0;">type=</span><span style="background-color: #fff0f0;">"text"</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">"iColorPicker"</span> <span style="color: #0000c0;">id=</span><span style="background-color: #fff0f0;">'color111'</span> <span style="color: #007000;">/></span> <span style="color: #007000;"><div</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">'clearfix'</span><span style="color: #007000;">></div></div></span>
</pre>
</div>
<br />
As you can see this is nothing different from previous code but as you can see there is an <strong>LI</strong> with a class of each of the colours that you would like to use. You are also able to put hex colours into the class names and they will work just fine. The code for the function is shown below:<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;">activateColours : function () { var iSharePoint = this, $j = jQuery.noConflict(), settings = this.settings; $j(".pickerTable").click(function () { $j('.iColorPicker').each(function () { var str = ""; str += $j(this).val(); $j(this).parents(settings.widgetSelector).find(settings.handleSelector).css('backgroundColor', str); }); });},
</pre>
</div>
<br />
<br />
The first 4 lines should be nothing new as it is the same as previous functions. The first loop goes through every unordered list on the page with a class of <strong>color</strong> and sets the background colour of the list item to what is in the class name. Once all the items have their colour all we need to do is to attach a click handler to each of the list items themselves so they can control their parents header which is what the next loop then does.<br />
Finally we need to add the function to the init function so that it will become active.<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;">init : function () { settings = this.settings; this.buttonFunctions(); this.makeSortable(); this.activateColours();},
</pre>
</div>
<br />
<br />
<h2>
Demo</h2>
So want to see the whole thing working? <a href="http://www.lifeinsharepoint.co.uk/demo/DragAndDrop/PartTwoC/" target="_blank">Click here</a> to see the final result of this quite epic blog post.<br />
<h2>
Summary</h2>
In this post we have outlined how to add the various functionality to our page using javascript and the jQuery Libraries. Next time I will explain how to save the state of the page using Cookies. I hope this post has been useful and please leave some comments about what you would like to see in future posts.<br />
<br />
<h2>
Series Content</h2>
<ol>
<li><h3 class="post-title entry-title" style="background-color: white; background-image: url(http://www.templatesimages.com/images/Minyx20/thdotsH.gif); background-position: 0% 100%; background-repeat: repeat no-repeat; color: #333333; font-family: 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; font-weight: normal; letter-spacing: -1px; line-height: 18px; margin: 0px; padding: 6px 0px;">
<a href="http://digsharepoint.blogspot.com/2013/02/creating-igoogle-ui-for-sharepoint.html" style="color: #6699cc; margin: 0px; outline-style: none; padding: 0px; text-decoration: initial;"><span style="font-size: small;">Creating iGoogle UI for SharePoint 2010/SharePoint 2013 - Part I : Overview, Concept, HTML Structure & Jquery Basics</span></a></h3>
</li>
<li><h3 class="post-title entry-title" style="background-color: white; background-image: url(http://www.templatesimages.com/images/Minyx20/thdotsH.gif); background-position: 0% 100%; background-repeat: repeat no-repeat; color: #333333; font-family: 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; font-weight: normal; letter-spacing: -1px; line-height: 18px; margin: 0px; padding: 6px 0px;">
<a href="http://digsharepoint.blogspot.com/2013/02/creating-igoogle-ui-for-sharepoint_19.html" style="color: #6699cc; margin: 0px; outline-style: none; padding: 0px; text-decoration: initial;"><span style="font-size: small;">Creating iGoogle UI for SharePoint 2010/SharePoint 2013 - Part II : Dragging, Dropping, Sorting and Collapsing</span></a></h3>
</li>
<li><h3 class="post-title entry-title" style="background-color: white; background-image: url(http://www.templatesimages.com/images/Minyx20/thdotsH.gif); background-position: 0% 100%; background-repeat: repeat no-repeat; color: #333333; font-family: 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; font-weight: normal; letter-spacing: -1px; line-height: 18px; margin: 0px; padding: 6px 0px;">
<a href="http://digsharepoint.blogspot.com/2013/02/creating-igoogle-ui-for-sharepoint_333.html" style="color: #ff3366; margin: 0px; outline-style: none; padding: 0px; text-decoration: initial;"><span style="font-size: small;">Creating iGoogle UI for SharePoint 2010/SharePoint 2013 - Part III : Saving WebPart states using Cookies</span></a></h3>
</li>
<li><h3 class="post-title entry-title" style="background-color: white; background-image: url(http://www.templatesimages.com/images/Minyx20/thdotsH.gif); background-position: 0% 100%; background-repeat: repeat no-repeat; color: #333333; font-family: 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; font-weight: normal; letter-spacing: -1px; line-height: 18px; margin: 0px; padding: 6px 0px;">
<a href="http://digsharepoint.blogspot.com/2013/02/creating-igoogle-ui-for-sharepoint_5146.html" style="color: #6699cc; margin: 0px; outline-style: none; padding: 0px; text-decoration: initial;"><span style="font-size: small;">Creating iGoogle UI for SharePoint 2010/SharePoint 2013 - Part IV : Control Adapters</span></a></h3>
</li>
<li><h3 class="post-title entry-title" style="background-color: white; background-image: url(http://www.templatesimages.com/images/Minyx20/thdotsH.gif); background-position: 0% 100%; background-repeat: repeat no-repeat; color: #333333; font-family: 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; font-weight: normal; letter-spacing: -1px; line-height: 18px; margin: 0px; padding: 6px 0px;">
<a href="http://digsharepoint.blogspot.com/2013/02/creating-igoogle-ui-for-sharepoint_349.html" style="color: #6699cc; margin: 0px; outline-style: none; padding: 0px; text-decoration: initial;"><span style="font-size: small;">Creating iGoogle UI for SharePoint 2010/SharePoint 2013 - Part V : SharePoint 2010 Integration</span></a></h3>
</li>
</ol>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-3888123222103988694.post-59565910171346864342013-02-19T03:02:00.002-05:002013-02-19T05:15:35.659-05:00Creating iGoogle UI for SharePoint 2010/SharePoint 2013 - Part I : Overview, Concept, HTML Structure & Jquery Basics<br />
<h2>
Series Content</h2>
<ol>
<li><h3 class="post-title entry-title" style="background-color: white; background-image: url(http://www.templatesimages.com/images/Minyx20/thdotsH.gif); background-position: 0% 100%; background-repeat: repeat no-repeat; color: #333333; font-family: 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; font-weight: normal; letter-spacing: -1px; line-height: 18px; margin: 0px; padding: 6px 0px;">
<a href="http://digsharepoint.blogspot.com/2013/02/creating-igoogle-ui-for-sharepoint.html" style="color: #6699cc; margin: 0px; outline-style: none; padding: 0px; text-decoration: initial;"><span style="font-size: small;">Creating iGoogle UI for SharePoint 2010/SharePoint 2013 - Part I : Overview, Concept, HTML Structure & Jquery Basics</span></a></h3>
</li>
<li><h3 class="post-title entry-title" style="background-color: white; background-image: url(http://www.templatesimages.com/images/Minyx20/thdotsH.gif); background-position: 0% 100%; background-repeat: repeat no-repeat; color: #333333; font-family: 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; font-weight: normal; letter-spacing: -1px; line-height: 18px; margin: 0px; padding: 6px 0px;">
<a href="http://digsharepoint.blogspot.com/2013/02/creating-igoogle-ui-for-sharepoint_19.html" style="color: #6699cc; margin: 0px; outline-style: none; padding: 0px; text-decoration: initial;"><span style="font-size: small;">Creating iGoogle UI for SharePoint 2010/SharePoint 2013 - Part II : Dragging, Dropping, Sorting and Collapsing</span></a></h3>
</li>
<li><h3 class="post-title entry-title" style="background-color: white; background-image: url(http://www.templatesimages.com/images/Minyx20/thdotsH.gif); background-position: 0% 100%; background-repeat: repeat no-repeat; color: #333333; font-family: 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; font-weight: normal; letter-spacing: -1px; line-height: 18px; margin: 0px; padding: 6px 0px;">
<a href="http://digsharepoint.blogspot.com/2013/02/creating-igoogle-ui-for-sharepoint_333.html" style="color: #ff3366; margin: 0px; outline-style: none; padding: 0px; text-decoration: initial;"><span style="font-size: small;">Creating iGoogle UI for SharePoint 2010/SharePoint 2013 - Part III : Saving WebPart states using Cookies</span></a></h3>
</li>
<li><h3 class="post-title entry-title" style="background-color: white; background-image: url(http://www.templatesimages.com/images/Minyx20/thdotsH.gif); background-position: 0% 100%; background-repeat: repeat no-repeat; color: #333333; font-family: 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; font-weight: normal; letter-spacing: -1px; line-height: 18px; margin: 0px; padding: 6px 0px;">
<a href="http://digsharepoint.blogspot.com/2013/02/creating-igoogle-ui-for-sharepoint_5146.html" style="color: #6699cc; margin: 0px; outline-style: none; padding: 0px; text-decoration: initial;"><span style="font-size: small;">Creating iGoogle UI for SharePoint 2010/SharePoint 2013 - Part IV : Control Adapters</span></a></h3>
</li>
<li><h3 class="post-title entry-title" style="background-color: white; background-image: url(http://www.templatesimages.com/images/Minyx20/thdotsH.gif); background-position: 0% 100%; background-repeat: repeat no-repeat; color: #333333; font-family: 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; font-weight: normal; letter-spacing: -1px; line-height: 18px; margin: 0px; padding: 6px 0px;">
<a href="http://digsharepoint.blogspot.com/2013/02/creating-igoogle-ui-for-sharepoint_349.html" style="color: #6699cc; margin: 0px; outline-style: none; padding: 0px; text-decoration: initial;"><span style="font-size: small;">Creating iGoogle UI for SharePoint 2010/SharePoint 2013 - Part V : SharePoint 2010 Integration</span></a></h3>
</li>
</ol>
<br />
<h2>
Overview</h2>
This is the first in a series of posts which will explain how to create an iGoogle style interface for SharePoint 2010. More and more clients are asking for an iGoogle or BBC Homepage style homepage for their intranets and out of the box in SharePoint 2010 there is no method to do this. While you can drag and drop webparts in “Edit Mode” in a WebPart page, end user however is stuck on where to place their webparts on the page. This series will aim to provide a mechanism where end users are able to take control of their page and make the SharePoint experience more personal.<br />
There are many sites on the internet which have the ability to drag and drop components around the page and save their locations for your next visit. Some of the most well known examples of this interface are:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxfBMURCByDGh_9uFeXxz4eQfsKH-azysNRDSqAP61jmmhYabgL4iLcnGymAAAPpnK2jJ-DxLzZnwE7G878QnVne7YhES0ET3Mh45CeV0rZbeYHT0el8b2oVhlHD7KMFVLadCcMadOEGY/s1600/igoogle.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="173" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxfBMURCByDGh_9uFeXxz4eQfsKH-azysNRDSqAP61jmmhYabgL4iLcnGymAAAPpnK2jJ-DxLzZnwE7G878QnVne7YhES0ET3Mh45CeV0rZbeYHT0el8b2oVhlHD7KMFVLadCcMadOEGY/s400/igoogle.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
iGoogle – <a href="http://www.google.com/ig?hl=" target="_blank" title="iGoogle ">http://www.google.com/ig?hl=</a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzlD2zVWNoX_YnnDfzPXW1ihZtpmsp6r31XKuTffyrW98QzL4bLjeUswrhyphenhypheno5PR6Kbu1Wm1oZEb18C16096cF8SVRI2mqISbH1z5oEQJu0SCwVLK-X8hMPidrxfFBvnsTUcH9dSegl0e8/s1600/bbc.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="173" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzlD2zVWNoX_YnnDfzPXW1ihZtpmsp6r31XKuTffyrW98QzL4bLjeUswrhyphenhypheno5PR6Kbu1Wm1oZEb18C16096cF8SVRI2mqISbH1z5oEQJu0SCwVLK-X8hMPidrxfFBvnsTUcH9dSegl0e8/s400/bbc.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
</div>
BBC Homepage – <a href="http://www.bbc.co.uk/" target="_blank" title="BBC Homepage">http://www.bbc.co.uk/</a><br />
Both these sites give you the ability to drag and drop various widgets around the page. You can also close widgets you do not want to see and minimise others to maximise space on the page. This is the kind of interface that we are going to create for use in SharePoint using jQuery and some C# code.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: left;">
</div>
<h2>
The Plan</h2>
First, let’s list exactly what we’ll be creating here and what features it will have:<br />
<ul>
<li>The interface will contain several widgets (WebParts).</li>
<li>Each widget can be collapsed and removed via controls on the page.</li>
<li>The widgets can be sorted into an unlimited number of columns.</li>
<li>WebParts will be have their rendering controlled via a control adapter which will modify their look and feel.</li>
<li>Widgets will have their location and states saved using cookies.</li>
<li>Creating a simple Visual Studio 2010 solution to deploy an example.</li>
</ul>
This post will provide an overview of what we are planning to build as well as getting some development environments configured for your own personal demos.<br />
<h2>
Getting Started</h2>
To get started in this post we will be creating a demo environment to ensure that the Javascript, HTML and CSS are all working together for use in future posts. Initially we will not be touching SharePoint as it is not necessary at this stage. Firstly we will need to create a base HTML template that will load a specific CSS stylesheet, images and Javascript libraries.<br />
<h3>
HTML</h3>
Below is the base HTML that will be used in our initial demo. We have a wrapper div that surrounds three div columns called “Left”, “Middle” and “Right”. Within each column is the widget HTML that will be used to wrap each WebPart. Each widget has a wrapper div as well as a header and body content divs.<br />
<br />
<br />
<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: #507090;"><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"></span><span style="color: #007000;"><html</span> <span style="color: #0000c0;">xmlns=</span><span style="background-color: #fff0f0;">"http://www.w3.org/1999/xhtml"</span><span style="color: #007000;">><head></span> <span style="color: #007000;"><meta</span> <span style="color: #0000c0;">http-equiv=</span><span style="background-color: #fff0f0;">"Content-Type"</span> <span style="color: #0000c0;">content=</span><span style="background-color: #fff0f0;">"text/html; charset=utf-8"</span> <span style="color: #007000;">/></span> <span style="color: grey;"><!-- Always force latest IE rendering engine (even in intranet) & Chrome Frame. Remove this if you use the .htaccess --></span> <span style="color: #007000;"><meta</span> <span style="color: #0000c0;">http-equiv=</span><span style="background-color: #fff0f0;">"X-UA-Compatible"</span> <span style="color: #0000c0;">content=</span><span style="background-color: #fff0f0;">"IE=edge,chrome=1"</span> <span style="color: #007000;">/></span> <span style="color: #007000;"><title></span>Life In SharePoint - Drag and Drop - Part One<span style="color: #007000;"></title></span> <span style="color: #007000;"><link</span> <span style="color: #0000c0;">rel=</span><span style="background-color: #fff0f0;">"stylesheet"</span> <span style="color: #0000c0;">type=</span><span style="background-color: #fff0f0;">"text/css"</span> <span style="color: #0000c0;">media=</span><span style="background-color: #fff0f0;">"all"</span> <span style="color: #0000c0;">href=</span><span style="background-color: #fff0f0;">"css/style.css"</span> <span style="color: #007000;">/></span> <span style="color: #007000;"></head></span> <span style="color: #007000;"><body></span> <span style="color: #007000;"><div</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">'wrapper'</span><span style="color: #007000;">></span> <span style="color: #007000;"><div</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">'column'</span> <span style="color: #0000c0;">id=</span><span style="background-color: #fff0f0;">'left'</span><span style="color: #007000;">></span> <span style="color: #007000;"><div</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">'widget'</span> <span style="color: #0000c0;">id=</span><span style="background-color: #fff0f0;">'111'</span><span style="color: #007000;">></span> <span style="color: #007000;"><div</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">"widget-head"</span><span style="color: #007000;">></span> <span style="color: #007000;"><a</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">'collapse'</span><span style="color: #007000;">></span>collapse<span style="color: #007000;"></a></span> <span style="color: #007000;"><h3></span>Widget title 1<span style="color: #007000;"></h3></span> <span style="color: #007000;"><a</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">'remove'</span><span style="color: #007000;">></span>remove<span style="color: #007000;"></a></span> <span style="color: #007000;"><a</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">'edit'</span><span style="color: #007000;">></span>edit<span style="color: #007000;"></a></span> <span style="color: #007000;"></div></span> <span style="color: #007000;"><div</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">"widget-edit"</span><span style="color: #007000;">></span> <span style="color: #007000;"><input</span> <span style="color: #0000c0;">type=</span><span style="background-color: #fff0f0;">'text'</span> <span style="color: #0000c0;">type=</span><span style="background-color: #fff0f0;">"text"</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">"iColorPicker"</span> <span style="color: #0000c0;">id=</span><span style="background-color: #fff0f0;">'color111'</span> <span style="color: #007000;">/></span> <span style="color: #007000;"><div</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">'clearfix'</span><span style="color: #007000;">></div></span> <span style="color: #007000;"></div></span> <span style="color: #007000;"><div</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">"widget-content"</span><span style="color: #007000;">></span> <span style="color: #007000;"><p></span>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse lorem orci, ornare at malesuada a, pulvinar lobortis neque. Integer et felis vel augue suscipit vestibulum id nec nulla.<span style="color: #007000;"></p></span> <span style="color: #007000;"></div></span> <span style="color: #007000;"></div></span> <span style="color: #007000;"><div</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">'widget'</span> <span style="color: #0000c0;">id=</span><span style="background-color: #fff0f0;">'2'</span><span style="color: #007000;">></span> <span style="color: #007000;"><div</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">"widget-head"</span><span style="color: #007000;">></span> <span style="color: #007000;"><a</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">'collapse'</span><span style="color: #007000;">></span>collapse<span style="color: #007000;"></a></span> <span style="color: #007000;"><h3></span>Widget title 2<span style="color: #007000;"></h3></span> <span style="color: #007000;"><a</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">'remove'</span><span style="color: #007000;">></span>remove<span style="color: #007000;"></a></span> <span style="color: #007000;"><a</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">'edit'</span><span style="color: #007000;">></span>edit<span style="color: #007000;"></a></span> <span style="color: #007000;"></div></span> <span style="color: #007000;"><div</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">"widget-edit"</span><span style="color: #007000;">></span> <span style="color: #007000;"><input</span> <span style="color: #0000c0;">type=</span><span style="background-color: #fff0f0;">'text'</span> <span style="color: #0000c0;">type=</span><span style="background-color: #fff0f0;">"text"</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">"iColorPicker"</span> <span style="color: #0000c0;">id=</span><span style="background-color: #fff0f0;">'color2'</span> <span style="color: #007000;">/></span> <span style="color: #007000;"><div</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">'clearfix'</span><span style="color: #007000;">></div></span> <span style="color: #007000;"></div></span> <span style="color: #007000;"><div</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">"widget-content"</span><span style="color: #007000;">></span> <span style="color: #007000;"><p></span>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse lorem orci, ornare at malesuada a, pulvinar lobortis neque. Integer et felis vel augue suscipit vestibulum id nec nulla.<span style="color: #007000;"></p></span> <span style="color: #007000;"></div></span> <span style="color: #007000;"></div></span> <span style="color: #007000;"></div></span> <span style="color: #007000;"><div</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">'column'</span> <span style="color: #0000c0;">id=</span><span style="background-color: #fff0f0;">'middle'</span><span style="color: #007000;">></span> <span style="color: #007000;"><div</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">'widget'</span> <span style="color: #0000c0;">id=</span><span style="background-color: #fff0f0;">'3'</span><span style="color: #007000;">></span> <span style="color: #007000;"><div</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">"widget-head"</span><span style="color: #007000;">></span> <span style="color: #007000;"><a</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">'collapse'</span><span style="color: #007000;">></span>collapse<span style="color: #007000;"></a></span> <span style="color: #007000;"><h3></span>Widget title 3<span style="color: #007000;"></h3></span> <span style="color: #007000;"><a</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">'remove'</span><span style="color: #007000;">></span>remove<span style="color: #007000;"></a></span> <span style="color: #007000;"><a</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">'edit'</span><span style="color: #007000;">></span>edit<span style="color: #007000;"></a></span> <span style="color: #007000;"></div></span> <span style="color: #007000;"><div</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">"widget-edit"</span><span style="color: #007000;">></span> <span style="color: #007000;"><input</span> <span style="color: #0000c0;">type=</span><span style="background-color: #fff0f0;">'text'</span> <span style="color: #0000c0;">type=</span><span style="background-color: #fff0f0;">"text"</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">"iColorPicker"</span> <span style="color: #0000c0;">id=</span><span style="background-color: #fff0f0;">'color3'</span> <span style="color: #007000;">/></span> <span style="color: #007000;"><div</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">'clearfix'</span><span style="color: #007000;">></div></span> <span style="color: #007000;"></div></span> <span style="color: #007000;"><div</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">"widget-content"</span><span style="color: #007000;">></span> <span style="color: #007000;"><p></span>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse lorem orci, ornare at malesuada a, pulvinar lobortis neque. Integer et felis vel augue suscipit vestibulum id nec nulla.<span style="color: #007000;"></p></span> <span style="color: #007000;"></div></span> <span style="color: #007000;"></div></span> <span style="color: #007000;"><div</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">'widget'</span> <span style="color: #0000c0;">id=</span><span style="background-color: #fff0f0;">'4'</span><span style="color: #007000;">></span> <span style="color: #007000;"><div</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">"widget-head"</span><span style="color: #007000;">></span> <span style="color: #007000;"><a</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">'collapse'</span><span style="color: #007000;">></span>collapse<span style="color: #007000;"></a></span> <span style="color: #007000;"><h3></span>Widget title 4<span style="color: #007000;"></h3></span> <span style="color: #007000;"><a</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">'remove'</span><span style="color: #007000;">></span>remove<span style="color: #007000;"></a></span> <span style="color: #007000;"><a</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">'edit'</span><span style="color: #007000;">></span>edit<span style="color: #007000;"></a></span> <span style="color: #007000;"></div></span> <span style="color: #007000;"><div</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">"widget-edit"</span><span style="color: #007000;">></span> <span style="color: #007000;"><input</span> <span style="color: #0000c0;">type=</span><span style="background-color: #fff0f0;">'text'</span> <span style="color: #0000c0;">type=</span><span style="background-color: #fff0f0;">"text"</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">"iColorPicker"</span> <span style="color: #0000c0;">id=</span><span style="background-color: #fff0f0;">'color4'</span> <span style="color: #007000;">/></span> <span style="color: #007000;"><div</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">'clearfix'</span><span style="color: #007000;">></div></span> <span style="color: #007000;"></div></span> <span style="color: #007000;"><div</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">"widget-content"</span><span style="color: #007000;">></span> <span style="color: #007000;"><p></span>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse lorem orci, ornare at malesuada a, pulvinar lobortis neque. Integer et felis vel augue suscipit vestibulum id nec nulla.<span style="color: #007000;"></p></span> <span style="color: #007000;"></div></span> <span style="color: #007000;"></div></span> <span style="color: #007000;"></div></span> <span style="color: #007000;"><div</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">'column'</span> <span style="color: #0000c0;">id=</span><span style="background-color: #fff0f0;">'right'</span><span style="color: #007000;">></span> <span style="color: #007000;"><div</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">'widget'</span> <span style="color: #0000c0;">id=</span><span style="background-color: #fff0f0;">'5'</span><span style="color: #007000;">></span> <span style="color: #007000;"><div</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">"widget-head"</span><span style="color: #007000;">></span> <span style="color: #007000;"><a</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">'collapse'</span><span style="color: #007000;">></span>collapse<span style="color: #007000;"></a></span> <span style="color: #007000;"><h3></span>Widget title 5<span style="color: #007000;"></h3></span> <span style="color: #007000;"><a</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">'remove'</span><span style="color: #007000;">></span>remove<span style="color: #007000;"></a></span> <span style="color: #007000;"><a</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">'edit'</span><span style="color: #007000;">></span>edit<span style="color: #007000;"></a></span> <span style="color: #007000;"></div></span> <span style="color: #007000;"><div</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">"widget-edit"</span><span style="color: #007000;">></span> <span style="color: #007000;"><input</span> <span style="color: #0000c0;">type=</span><span style="background-color: #fff0f0;">'text'</span> <span style="color: #0000c0;">type=</span><span style="background-color: #fff0f0;">"text"</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">"iColorPicker"</span> <span style="color: #0000c0;">id=</span><span style="background-color: #fff0f0;">'color5'</span> <span style="color: #007000;">/></span> <span style="color: #007000;"><div</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">'clearfix'</span><span style="color: #007000;">></div></span> <span style="color: #007000;"></div></span> <span style="color: #007000;"><div</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">"widget-content"</span><span style="color: #007000;">></span> <span style="color: #007000;"><p></span>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse lorem orci, ornare at malesuada a, pulvinar lobortis neque. Integer et felis vel augue suscipit vestibulum id nec nulla.<span style="color: #007000;"></p></span> <span style="color: #007000;"></div></span> <span style="color: #007000;"></div></span> <span style="color: #007000;"><div</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">'widget'</span> <span style="color: #0000c0;">id=</span><span style="background-color: #fff0f0;">'6'</span><span style="color: #007000;">></span> <span style="color: #007000;"><div</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">"widget-head"</span><span style="color: #007000;">></span> <span style="color: #007000;"><a</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">'collapse'</span><span style="color: #007000;">></span>collapse<span style="color: #007000;"></a></span> <span style="color: #007000;"><h3></span>Widget title 6<span style="color: #007000;"></h3></span> <span style="color: #007000;"><a</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">'remove'</span><span style="color: #007000;">></span>remove<span style="color: #007000;"></a></span> <span style="color: #007000;"><a</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">'edit'</span><span style="color: #007000;">></span>edit<span style="color: #007000;"></a></span> <span style="color: #007000;"></div></span> <span style="color: #007000;"><div</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">"widget-edit"</span><span style="color: #007000;">></span> <span style="color: #007000;"><input</span> <span style="color: #0000c0;">type=</span><span style="background-color: #fff0f0;">'text'</span> <span style="color: #0000c0;">type=</span><span style="background-color: #fff0f0;">"text"</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">"iColorPicker"</span> <span style="color: #0000c0;">id=</span><span style="background-color: #fff0f0;">'color6'</span> <span style="color: #007000;">/></span> <span style="color: #007000;"><div</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">'clearfix'</span><span style="color: #007000;">></div></span> <span style="color: #007000;"></div></span> <span style="color: #007000;"><div</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">"widget-content"</span><span style="color: #007000;">></span> <span style="color: #007000;"><p></span>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse lorem orci, ornare at malesuada a, pulvinar lobortis neque. Integer et felis vel augue suscipit vestibulum id nec nulla.<span style="color: #007000;"></p></span> <span style="color: #007000;"></div></span> <span style="color: #007000;"></div></span> <span style="color: #007000;"></div></span> <span style="color: #007000;"></div></span> <span style="color: #007000;"><div</span> <span style="color: #0000c0;">id=</span><span style="background-color: #fff0f0;">'toolbox-wrapper'</span><span style="color: #007000;">></span> <span style="color: #007000;"><div</span> <span style="color: #0000c0;">id=</span><span style="background-color: #fff0f0;">'toolbox-controls'</span><span style="color: #007000;">></span> <span style="color: #007000;"><div</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">'badge'</span><span style="color: #007000;">></div></span> <span style="color: #007000;"><p</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">"slide"</span><span style="color: #007000;">><a</span> <span style="color: #0000c0;">href=</span><span style="background-color: #fff0f0;">"#"</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">"btn-slide"</span><span style="color: #007000;">></span>Toolbox<span style="color: #007000;"></a></p></span> <span style="color: #007000;"><p</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">"reset"</span><span style="color: #007000;">><a</span> <span style="color: #0000c0;">href=</span><span style="background-color: #fff0f0;">"#"</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">"btn-reset"</span><span style="color: #007000;">></span>Reset Widgets<span style="color: #007000;"></a></p></span> <span style="color: #007000;"></div></span> <span style="color: #007000;"><div</span> <span style="color: #0000c0;">class=</span><span style="background-color: #fff0f0;">'column'</span> <span style="color: #0000c0;">id=</span><span style="background-color: #fff0f0;">'toolbox'</span><span style="color: #007000;">></span> <span style="color: #007000;"></div></span> <span style="color: #007000;"><div</span> <span style="color: #0000c0;">style=</span><span style="background-color: #fff0f0;">'clear:both;'</span><span style="color: #007000;">></div></span> <span style="color: #007000;"></div></span> <span style="color: grey;"><!-- Load the jQuery Libraries --></span> <span style="color: #007000;"><script </span><span style="color: #0000c0;">src=</span><span style="background-color: #fff0f0;">"js/jquery-1.6.2.min.js"</span> <span style="color: #0000c0;">type=</span><span style="background-color: #fff0f0;">"text/javascript"</span><span style="color: #007000;">></script></span> <span style="color: #007000;"><script </span><span style="color: #0000c0;">src=</span><span style="background-color: #fff0f0;">"js/jquery-ui-1.8.16.custom.min.js"</span> <span style="color: #0000c0;">type=</span><span style="background-color: #fff0f0;">"text/javascript"</span><span style="color: #007000;">></script></span> <span style="color: #007000;"><script </span><span style="color: #0000c0;">type=</span><span style="background-color: #fff0f0;">"text/javascript"</span> <span style="color: #0000c0;">src=</span><span style="background-color: #fff0f0;">"js/iColorPicker.js"</span><span style="color: #007000;">></script></span> <span style="color: #007000;"><script </span><span style="color: #0000c0;">type=</span><span style="background-color: #fff0f0;">"text/javascript"</span> <span style="color: #0000c0;">src=</span><span style="background-color: #fff0f0;">"js/jquery.cookie.js"</span><span style="color: #007000;">></script></span> <span style="color: #007000;"><script </span><span style="color: #0000c0;">type=</span><span style="background-color: #fff0f0;">"text/javascript"</span> <span style="color: #0000c0;">src=</span><span style="background-color: #fff0f0;">"js/jquery.corner.js"</span><span style="color: #007000;">></script></span> <span style="color: grey;"><!-- script file to add your own JavaScript --></span> <span style="color: #007000;"><script </span><span style="color: #0000c0;">type=</span><span style="background-color: #fff0f0;">"text/javascript"</span> <span style="color: #0000c0;">src=</span><span style="background-color: #fff0f0;">"js/script.js"</span><span style="color: #007000;">></script></span> <span style="color: #007000;"></body></html></span>
</pre>
</div>
<br />
<br />
As you can see the HTML is very simple but at the moment it will not look very attractive. We have each of the widgets in their own Div and in the header we have three images which will be our “buttons” to control each widget. On the left we have the collapse icon, next we have the edit icon and finally we have the remove icon. Underneath the header we have an edit panel which will contain in this example some colour selections for the header bar which will be hidden in the css shown below. So the next task is to now style the page and make it look neater.<br />
<h3>
CSS</h3>
The CSS is fairly simple and will be used for the SharePoint implementation. We start with a global reset of the page to ensure that all DOM elements are reset.<br />
<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;"><span style="color: #007000;">html</span><span style="color: #303030;">,</span> <span style="color: #007000;">body</span><span style="color: #303030;">,</span> <span style="color: #007000;">div</span><span style="color: #303030;">,</span> <span style="color: #007000;">span</span><span style="color: #303030;">,</span> <span style="color: #007000;">applet</span><span style="color: #303030;">,</span> <span style="color: #007000;">object</span><span style="color: #303030;">,</span> <span style="color: #007000;">iframe</span><span style="color: #303030;">,</span> <span style="color: #007000;">h1</span><span style="color: #303030;">,</span> <span style="color: #007000;">h2</span><span style="color: #303030;">,</span> <span style="color: #007000;">h3</span><span style="color: #303030;">,</span> <span style="color: #007000;">h4</span><span style="color: #303030;">,</span> <span style="color: #007000;">h5</span><span style="color: #303030;">,</span> <span style="color: #007000;">h6</span><span style="color: #303030;">,</span> <span style="color: #007000;">p</span><span style="color: #303030;">,</span> <span style="color: #007000;">blockquote</span><span style="color: #303030;">,</span> <span style="color: #007000;">pre</span><span style="color: #303030;">,</span> <span style="color: #007000;">a</span><span style="color: #303030;">,</span> <span style="color: #007000;">abbr</span><span style="color: #303030;">,</span> <span style="color: #007000;">acronym</span><span style="color: #303030;">,</span> <span style="color: #007000;">address</span><span style="color: #303030;">,</span> <span style="color: #007000;">big</span><span style="color: #303030;">,</span> <span style="color: #007000;">cite</span><span style="color: #303030;">,</span> <span style="color: #007000;">code</span><span style="color: #303030;">,</span> <span style="color: #007000;">del</span><span style="color: #303030;">,</span> <span style="color: #007000;">dfn</span><span style="color: #303030;">,</span> <span style="color: #007000;">em</span><span style="color: #303030;">,</span> <span style="color: #007000;">img</span><span style="color: #303030;">,</span> <span style="color: #007000;">ins</span><span style="color: #303030;">,</span> <span style="color: #007000;">kbd</span><span style="color: #303030;">,</span> <span style="color: #007000;">q</span><span style="color: #303030;">,</span> <span style="color: #007000;">s</span><span style="color: #303030;">,</span> <span style="color: #007000;">samp</span><span style="color: #303030;">,</span> <span style="color: #007000;">small</span><span style="color: #303030;">,</span> <span style="color: #007000;">strike</span><span style="color: #303030;">,</span> <span style="color: #007000;">strong</span><span style="color: #303030;">,</span> <span style="color: #007000;">sub</span><span style="color: #303030;">,</span> <span style="color: #007000;">sup</span><span style="color: #303030;">,</span> <span style="color: #007000;">tt</span><span style="color: #303030;">,</span> <span style="color: #007000;">var</span><span style="color: #303030;">,</span> <span style="color: #007000;">b</span><span style="color: #303030;">,</span> <span style="color: #007000;">u</span><span style="color: #303030;">,</span> <span style="color: #007000;">i</span><span style="color: #303030;">,</span> <span style="color: #007000;">center</span><span style="color: #303030;">,</span><span style="color: #007000;">dl</span><span style="color: #303030;">,</span> <span style="color: #007000;">dt</span><span style="color: #303030;">,</span> <span style="color: #007000;">dd</span><span style="color: #303030;">,</span> <span style="color: #007000;">ol</span><span style="color: #303030;">,</span> <span style="color: #007000;">ul</span><span style="color: #303030;">,</span> <span style="color: #007000;">li</span><span style="color: #303030;">,</span> <span style="color: #007000;">fieldset</span><span style="color: #303030;">,</span> <span style="color: #007000;">form</span><span style="color: #303030;">,</span> <span style="color: #007000;">label</span><span style="color: #303030;">,</span> <span style="color: #007000;">legend</span><span style="color: #303030;">,</span> <span style="color: #007000;">table</span><span style="color: #303030;">,</span> <span style="color: #007000;">caption</span><span style="color: #303030;">,</span> <span style="color: #007000;">tbody</span><span style="color: #303030;">,</span> <span style="color: #007000;">tfoot</span><span style="color: #303030;">,</span> <span style="color: #007000;">thead</span><span style="color: #303030;">,</span> <span style="color: #007000;">tr</span><span style="color: #303030;">,</span> <span style="color: #007000;">th</span><span style="color: #303030;">,</span> <span style="color: #007000;">td</span><span style="color: #303030;">,</span> <span style="color: #007000;">article</span><span style="color: #303030;">,</span> <span style="color: #007000;">aside</span><span style="color: #303030;">,</span> <span style="color: #007000;">canvas</span><span style="color: #303030;">,</span> <span style="color: #007000;">details</span><span style="color: #303030;">,</span> <span style="color: #007000;">embed</span><span style="color: #303030;">,</span> <span style="color: #007000;">figure</span><span style="color: #303030;">,</span> <span style="color: #007000;">figcaption</span><span style="color: #303030;">,</span> <span style="color: #007000;">footer</span><span style="color: #303030;">,</span> <span style="color: #007000;">header</span><span style="color: #303030;">,</span> <span style="color: #007000;">hgroup</span><span style="color: #303030;">,</span> <span style="color: #007000;">menu</span><span style="color: #303030;">,</span> <span style="color: #007000;">nav</span><span style="color: #303030;">,</span> <span style="color: #007000;">output</span><span style="color: #303030;">,</span> <span style="color: #007000;">ruby</span><span style="color: #303030;">,</span> <span style="color: #007000;">section</span><span style="color: #303030;">,</span> <span style="color: #007000;">summary</span><span style="color: #303030;">,</span> <span style="color: #007000;">time</span><span style="color: #303030;">,</span> <span style="color: #007000;">mark</span><span style="color: #303030;">,</span> <span style="color: #007000;">audio</span><span style="color: #303030;">,</span> <span style="color: #007000;">video</span> { <span style="color: green; font-weight: bold;">margin</span><span style="color: #303030;">:</span> <span style="color: #6000e0; font-weight: bold;">0</span>; <span style="color: green; font-weight: bold;">padding</span><span style="color: #303030;">:</span> <span style="color: #6000e0; font-weight: bold;">0</span>; <span style="color: green; font-weight: bold;">border</span><span style="color: #303030;">:</span> <span style="color: #6000e0; font-weight: bold;">0</span>; <span style="color: green; font-weight: bold;">font-size</span><span style="color: #303030;">:</span> <span style="color: #6000e0; font-weight: bold;">100</span><span style="color: #303030;">%</span>; <span style="color: green; font-weight: bold;">font</span><span style="color: #303030;">:</span> <span style="color: green; font-weight: bold;">inherit</span>; <span style="color: green; font-weight: bold;">vertical-align</span><span style="color: #303030;">:</span> <span style="color: green; font-weight: bold;">baseline</span>; } <span style="color: #007000;">article</span><span style="color: #303030;">,</span> <span style="color: #007000;">aside</span><span style="color: #303030;">,</span> <span style="color: #007000;">details</span><span style="color: #303030;">,</span> <span style="color: #007000;">figcaption</span><span style="color: #303030;">,</span> <span style="color: #007000;">figure</span><span style="color: #303030;">,</span> <span style="color: #007000;">footer</span><span style="color: #303030;">,</span> <span style="color: #007000;">header</span><span style="color: #303030;">,</span> <span style="color: #007000;">hgroup</span><span style="color: #303030;">,</span> <span style="color: #007000;">menu</span><span style="color: #303030;">,</span> <span style="color: #007000;">nav</span><span style="color: #303030;">,</span> <span style="color: #007000;">section</span> { <span style="color: green; font-weight: bold;">display</span><span style="color: #303030;">:</span> <span style="color: green; font-weight: bold;">block</span>;} <span style="color: #007000;">body</span> { <span style="color: green; font-weight: bold;">line-height</span><span style="color: #303030;">:</span> <span style="color: #6000e0; font-weight: bold;">1</span>; } <span style="color: #007000;">ol</span><span style="color: #303030;">,</span> <span style="color: #007000;">ul</span> { <span style="color: green; font-weight: bold;">list-style</span><span style="color: #303030;">:</span> <span style="color: green; font-weight: bold;">none</span>; } <span style="color: #007000;">blockquote</span><span style="color: #303030;">,</span> <span style="color: #007000;">q</span> { <span style="color: green; font-weight: bold;">quotes</span><span style="color: #303030;">:</span> <span style="color: green; font-weight: bold;">none</span>; } <span style="color: #007000;">blockquote</span><span style="color: #505050; font-weight: bold;">:before</span><span style="color: #303030;">,</span> <span style="color: #007000;">blockquote</span><span style="color: #505050; font-weight: bold;">:after</span><span style="color: #303030;">,</span> <span style="color: #007000;">q</span><span style="color: #505050; font-weight: bold;">:before</span><span style="color: #303030;">,</span> <span style="color: #007000;">q</span><span style="color: #505050; font-weight: bold;">:after</span> { <span style="color: green; font-weight: bold;">content</span><span style="color: #303030;">:</span> <span style="background-color: #fff0f0;">''</span>; <span style="color: green; font-weight: bold;">content</span><span style="color: #303030;">:</span> <span style="color: green; font-weight: bold;">none</span>; } <span style="color: #007000;">table</span> { <span style="color: green; font-weight: bold;">border-collapse</span><span style="color: #303030;">:</span> <span style="color: green; font-weight: bold;">collapse</span>; <span style="color: green; font-weight: bold;">border-spacing</span><span style="color: #303030;">:</span> <span style="color: #6000e0; font-weight: bold;">0</span>; } <span style="color: grey;">/** Base Body Styles **/</span><span style="color: #007000;">body</span>{ <span style="color: green; font-weight: bold;">background</span><span style="color: #303030;">:</span><span style="color: #6000e0; font-weight: bold;">#ddd</span>; <span style="color: green; font-weight: bold;">color</span><span style="color: #303030;">:</span><span style="color: #6000e0; font-weight: bold;">#000</span>; <span style="color: green; font-weight: bold;">font</span><span style="color: #303030;">:</span><span style="color: #6000e0; font-weight: bold;">14px</span> Arial<span style="color: #303030;">,</span> Helvetica<span style="color: #303030;">,</span> <span style="background-color: #fff0f0;">"Trebuchet MS"</span><span style="color: #303030;">,</span> <span style="color: green; font-weight: bold;">sans-serif</span>;} <span style="color: #007000;">h1</span><span style="color: #303030;">,</span><span style="color: #007000;">h2</span><span style="color: #303030;">,</span><span style="color: #007000;">h3</span><span style="color: #303030;">,</span><span style="color: #007000;">h4</span><span style="color: #303030;">,</span><span style="color: #007000;">h5</span><span style="color: #303030;">,</span><span style="color: #007000;">h6</span>{ <span style="color: green; font-weight: bold;">font-weight</span><span style="color: #303030;">:</span><span style="color: green; font-weight: bold;">bold</span>; }<span style="color: #007000;">h1</span>{ <span style="color: green; font-weight: bold;">font-size</span><span style="color: #303030;">:</span><span style="color: #6000e0; font-weight: bold;">30px</span>;}<span style="color: #007000;">h2</span>{ <span style="color: green; font-weight: bold;">font-size</span><span style="color: #303030;">:</span><span style="color: #6000e0; font-weight: bold;">24px</span>;}<span style="color: #007000;">h3</span>{ <span style="color: green; font-weight: bold;">font-size</span><span style="color: #303030;">:</span><span style="color: #6000e0; font-weight: bold;">18px</span>;}<span style="color: #007000;">h4</span>{ <span style="color: green; font-weight: bold;">font-size</span><span style="color: #303030;">:</span><span style="color: #6000e0; font-weight: bold;">14px</span>;}<span style="color: #007000;">h5</span>{ <span style="color: green; font-weight: bold;">font-size</span><span style="color: #303030;">:</span><span style="color: #6000e0; font-weight: bold;">12px</span>;}<span style="color: #007000;">h6</span>{ <span style="color: green; font-weight: bold;">font-size</span><span style="color: #303030;">:</span><span style="color: #6000e0; font-weight: bold;">10px</span>;} <span style="color: #007000;">a</span>{ <span style="color: green; font-weight: bold;">text-decoration</span><span style="color: #303030;">:</span><span style="color: green; font-weight: bold;">none</span>; }<span style="color: #007000;">a</span><span style="color: #505050; font-weight: bold;">:active</span><span style="color: #303030;">,</span> <span style="color: #007000;">a</span><span style="color: #505050; font-weight: bold;">:visited</span> { <span style="color: green; font-weight: bold;">color</span><span style="color: #303030;">:</span> <span style="color: #6000e0; font-weight: bold;">#607890</span>; }<span style="color: #007000;">a</span><span style="color: #505050; font-weight: bold;">:hover</span> { <span style="color: green; font-weight: bold;">color</span><span style="color: #303030;">:</span> <span style="color: #6000e0; font-weight: bold;">#036</span>; } <span style="color: #b00060; font-weight: bold;">.wrapper</span>{ <span style="color: green; font-weight: bold;">clear</span><span style="color: #303030;">:</span><span style="color: green; font-weight: bold;">both</span>;} <span style="color: #b00060; font-weight: bold;">.column</span>{ <span style="color: green; font-weight: bold;">float</span><span style="color: #303030;">:</span><span style="color: green; font-weight: bold;">left</span>; <span style="color: green; font-weight: bold;">width</span><span style="color: #303030;">:</span><span style="color: #6000e0; font-weight: bold;">300px</span>; <span style="color: green; font-weight: bold;">margin</span><span style="color: #303030;">:</span><span style="color: #6000e0; font-weight: bold;">10px</span>; <span style="color: green; font-weight: bold;">min-height</span><span style="color: #303030;">:</span><span style="color: #6000e0; font-weight: bold;">100px</span>;} <span style="color: #b00060; font-weight: bold;">.column</span> <span style="color: #b00060; font-weight: bold;">.widget</span> { <span style="color: green; font-weight: bold;">border</span><span style="color: #303030;">:</span><span style="color: #6000e0; font-weight: bold;">1px</span> <span style="color: green; font-weight: bold;">solid</span> <span style="color: #6000e0; font-weight: bold;">#ddd</span>; <span style="color: green; font-weight: bold;">margin</span><span style="color: #303030;">:</span><span style="color: #6000e0; font-weight: bold;">5px</span>; <span style="color: green; font-weight: bold;">width</span><span style="color: #303030;">:</span><span style="color: #6000e0; font-weight: bold;">288px</span>; <span style="color: green; font-weight: bold;">float</span><span style="color: #303030;">:</span><span style="color: green; font-weight: bold;">left</span>; <span style="color: green; font-weight: bold;">background-color</span><span style="color: #303030;">:</span><span style="color: #6000e0; font-weight: bold;">#fff</span>;} <span style="color: #b00060; font-weight: bold;">.widget-head</span>{ <span style="color: green; font-weight: bold;">background-color</span><span style="color: #303030;">:</span><span style="color: #6000e0; font-weight: bold;">#60b51c</span>; <span style="color: green; font-weight: bold;">padding</span><span style="color: #303030;">:</span><span style="color: #6000e0; font-weight: bold;">5px</span>; <span style="color: green; font-weight: bold;">margin</span><span style="color: #303030;">:</span><span style="color: #6000e0; font-weight: bold;">5px</span> <span style="color: #6000e0; font-weight: bold;">5px</span> <span style="color: #6000e0; font-weight: bold;">5px</span> <span style="color: #6000e0; font-weight: bold;">5px</span>; <span style="color: green; font-weight: bold;">height</span><span style="color: #303030;">:</span><span style="color: #6000e0; font-weight: bold;">20px</span>;} <span style="color: #b00060; font-weight: bold;">.widget-head</span> <span style="color: #007000;">h3</span>{ <span style="color: green; font-weight: bold;">float</span><span style="color: #303030;">:</span><span style="color: green; font-weight: bold;">left</span>; <span style="color: green; font-weight: bold;">padding</span><span style="color: #303030;">:</span> <span style="color: #6000e0; font-weight: bold;">0</span> <span style="color: #6000e0; font-weight: bold;">5px</span>; <span style="color: green; font-weight: bold;">color</span><span style="color: #303030;">:</span><span style="color: #6000e0; font-weight: bold;">#fff</span>; <span style="color: green; font-weight: bold;">font-family</span><span style="color: #303030;">:</span> verdana<span style="color: #303030;">,</span> arial; <span style="color: green; font-weight: bold;">font-weight</span><span style="color: #303030;">:</span><span style="color: green; font-weight: bold;">normal</span>; <span style="color: green; font-weight: bold;">font-size</span><span style="color: #303030;">:</span><span style="color: #6000e0; font-weight: bold;">1em</span>;} <span style="color: #b00060; font-weight: bold;">.widget-head</span> <span style="color: #007000;">a</span><span style="color: #b00060; font-weight: bold;">.remove</span> { <span style="color: green; font-weight: bold;">float</span><span style="color: #303030;">:</span> <span style="color: green; font-weight: bold;">right</span>; <span style="color: green; font-weight: bold;">display</span><span style="color: #303030;">:</span> <span style="color: green; font-weight: bold;">inline</span>; <span style="color: green; font-weight: bold;">background</span><span style="color: #303030;">:</span> <span style="background-color: #fff0f0; color: #d02000;">url(../images/controls.png)</span> <span style="color: green; font-weight: bold;">no-repeat</span> <span style="color: #6000e0; font-weight: bold;">-14px</span> <span style="color: #6000e0; font-weight: bold;">0</span>; <span style="color: green; font-weight: bold;">width</span><span style="color: #303030;">:</span> <span style="color: #6000e0; font-weight: bold;">14px</span>; <span style="color: green; font-weight: bold;">height</span><span style="color: #303030;">:</span> <span style="color: #6000e0; font-weight: bold;">14px</span>; <span style="color: green; font-weight: bold;">margin</span><span style="color: #303030;">:</span> <span style="color: #6000e0; font-weight: bold;">3px</span> <span style="color: #6000e0; font-weight: bold;">4px</span> <span style="color: #6000e0; font-weight: bold;">0px</span> <span style="color: #6000e0; font-weight: bold;">0</span>; <span style="color: green; font-weight: bold;">text-indent</span><span style="color: #303030;">:</span> <span style="color: #6000e0; font-weight: bold;">-9999em</span>; <span style="color: green; font-weight: bold;">outline</span><span style="color: #303030;">:</span> <span style="color: green; font-weight: bold;">none</span>;} <span style="color: #b00060; font-weight: bold;">.widget-head</span> <span style="color: #007000;">a</span><span style="color: #b00060; font-weight: bold;">.edit</span> { <span style="color: green; font-weight: bold;">float</span><span style="color: #303030;">:</span> <span style="color: green; font-weight: bold;">right</span>; <span style="color: green; font-weight: bold;">display</span><span style="color: #303030;">:</span> <span style="color: green; font-weight: bold;">inline</span>; <span style="color: green; font-weight: bold;">background</span><span style="color: #303030;">:</span> <span style="background-color: #fff0f0; color: #d02000;">url(../images/controls.png)</span> <span style="color: green; font-weight: bold;">no-repeat</span> <span style="color: #6000e0; font-weight: bold;">-28px</span> <span style="color: #6000e0; font-weight: bold;">0</span>; <span style="color: green; font-weight: bold;">width</span><span style="color: #303030;">:</span> <span style="color: #6000e0; font-weight: bold;">14px</span>; <span style="color: green; font-weight: bold;">height</span><span style="color: #303030;">:</span> <span style="color: #6000e0; font-weight: bold;">14px</span>; <span style="color: green; font-weight: bold;">margin</span><span style="color: #303030;">:</span> <span style="color: #6000e0; font-weight: bold;">3px</span> <span style="color: #6000e0; font-weight: bold;">4px</span> <span style="color: #6000e0; font-weight: bold;">0px</span> <span style="color: #6000e0; font-weight: bold;">0</span>; <span style="color: green; font-weight: bold;">text-indent</span><span style="color: #303030;">:</span> <span style="color: #6000e0; font-weight: bold;">-9999em</span>; <span style="color: green; font-weight: bold;">outline</span><span style="color: #303030;">:</span> <span style="color: green; font-weight: bold;">none</span>;} <span style="color: #b00060; font-weight: bold;">.widget-head</span> <span style="color: #007000;">a</span><span style="color: #b00060; font-weight: bold;">.collapse</span> { <span style="color: green; font-weight: bold;">float</span><span style="color: #303030;">:</span> <span style="color: green; font-weight: bold;">left</span>; <span style="color: green; font-weight: bold;">display</span><span style="color: #303030;">:</span> <span style="color: green; font-weight: bold;">inline</span>; <span style="color: green; font-weight: bold;">background</span><span style="color: #303030;">:</span> <span style="background-color: #fff0f0; color: #d02000;">url(../images/controls.png)</span> <span style="color: green; font-weight: bold;">no-repeat</span> <span style="color: #6000e0; font-weight: bold;">0</span>; <span style="color: green; font-weight: bold;">width</span><span style="color: #303030;">:</span> <span style="color: #6000e0; font-weight: bold;">14px</span>; <span style="color: green; font-weight: bold;">height</span><span style="color: #303030;">:</span> <span style="color: #6000e0; font-weight: bold;">14px</span>; <span style="color: green; font-weight: bold;">text-indent</span><span style="color: #303030;">:</span> <span style="color: #6000e0; font-weight: bold;">-9999em</span>; <span style="color: green; font-weight: bold;">margin</span><span style="color: #303030;">:</span> <span style="color: #6000e0; font-weight: bold;">3px</span> <span style="color: #6000e0; font-weight: bold;">0</span> <span style="color: #6000e0; font-weight: bold;">0px</span> <span style="color: #6000e0; font-weight: bold;">4px</span>; <span style="color: green; font-weight: bold;">outline</span><span style="color: #303030;">:</span> <span style="color: green; font-weight: bold;">none</span>;}<span style="color: #b00060; font-weight: bold;">.widget-edit</span>{ <span style="color: green; font-weight: bold;">background-color</span><span style="color: #303030;">:</span><span style="color: #6000e0; font-weight: bold;">#efefef</span>; <span style="color: green; font-weight: bold;">border</span><span style="color: #303030;">:</span><span style="color: #6000e0; font-weight: bold;">1px</span> <span style="color: green; font-weight: bold;">solid</span> <span style="color: #6000e0; font-weight: bold;">#ddd</span>; <span style="color: green; font-weight: bold;">padding</span><span style="color: #303030;">:</span><span style="color: #6000e0; font-weight: bold;">5px</span>; <span style="color: green; font-weight: bold;">margin</span><span style="color: #303030;">:</span><span style="color: #6000e0; font-weight: bold;">0px</span> <span style="color: #6000e0; font-weight: bold;">5px</span> <span style="color: #6000e0; font-weight: bold;">5px</span> <span style="color: #6000e0; font-weight: bold;">5px</span>; <span style="color: green; font-weight: bold;">display</span><span style="color: #303030;">:</span><span style="color: green; font-weight: bold;">none</span>;}<span style="color: #b00060; font-weight: bold;">.widget-edit</span> <span style="color: #007000;">ul</span>{ }<span style="color: #b00060; font-weight: bold;">.widget-edit</span> <span style="color: #007000;">ul</span><span style="color: #b00060; font-weight: bold;">.colors</span> <span style="color: #007000;">li</span> { <span style="color: green; font-weight: bold;">width</span><span style="color: #303030;">:</span> <span style="color: #6000e0; font-weight: bold;">20px</span>; <span style="color: green; font-weight: bold;">height</span><span style="color: #303030;">:</span> <span style="color: #6000e0; font-weight: bold;">20px</span>; <span style="color: green; font-weight: bold;">border</span><span style="color: #303030;">:</span> <span style="color: #6000e0; font-weight: bold;">1px</span> <span style="color: green; font-weight: bold;">solid</span> <span style="color: #6000e0; font-weight: bold;">#EEE</span>; <span style="color: green; font-weight: bold;">float</span><span style="color: #303030;">:</span> <span style="color: green; font-weight: bold;">left</span>; <span style="color: green; font-weight: bold;">display</span><span style="color: #303030;">:</span> <span style="color: green; font-weight: bold;">inline</span>; <span style="color: green; font-weight: bold;">margin</span><span style="color: #303030;">:</span> <span style="color: #6000e0; font-weight: bold;">0</span> <span style="color: #6000e0; font-weight: bold;">5px</span> <span style="color: #6000e0; font-weight: bold;">0</span> <span style="color: #6000e0; font-weight: bold;">0</span>; <span style="color: green; font-weight: bold;">cursor</span><span style="color: #303030;">:</span> <span style="color: green; font-weight: bold;">pointer</span>; <span style="color: green; font-weight: bold;">background-color</span><span style="color: #303030;">:</span><span style="color: #007020;">red</span>;} <span style="color: #b00060; font-weight: bold;">.widget-content</span>{ <span style="color: green; font-weight: bold;">padding</span><span style="color: #303030;">:</span><span style="color: #6000e0; font-weight: bold;">5px</span>;}<span style="color: #b00060; font-weight: bold;">.widget-placeholder</span>{ <span style="color: green; font-weight: bold;">border</span><span style="color: #303030;">:</span><span style="color: #6000e0; font-weight: bold;">2px</span> <span style="color: green; font-weight: bold;">dashed</span> <span style="color: #6000e0; font-weight: bold;">#999</span>; <span style="color: green; font-weight: bold;">margin</span><span style="color: #303030;">:</span><span style="color: #6000e0; font-weight: bold;">5px</span>; <span style="color: green; font-weight: bold;">width</span><span style="color: #303030;">:</span><span style="color: #6000e0; font-weight: bold;">283px</span>; <span style="color: green; font-weight: bold;">float</span><span style="color: #303030;">:</span><span style="color: green; font-weight: bold;">left</span>;} <span style="color: #0060b0; font-weight: bold;">#toolbox-wrapper</span>{ <span style="color: green; font-weight: bold;">clear</span><span style="color: #303030;">:</span><span style="color: green; font-weight: bold;">both</span>; <span style="color: green; font-weight: bold;">width</span><span style="color: #303030;">:</span><span style="color: #6000e0; font-weight: bold;">900px</span>; <span style="color: green; font-weight: bold;">margin</span><span style="color: #303030;">:</span><span style="color: #6000e0; font-weight: bold;">10px</span>;} <span style="color: #0060b0; font-weight: bold;">#toolbox-controls</span>{ <span style="color: green; font-weight: bold;">float</span><span style="color: #303030;">:</span><span style="color: green; font-weight: bold;">left</span>;} <span style="color: #0060b0; font-weight: bold;">#toolbox</span>{ <span style="color: green; font-weight: bold;">background-color</span><span style="color: #303030;">:</span><span style="color: #6000e0; font-weight: bold;">#fff</span>; <span style="color: green; font-weight: bold;">padding</span><span style="color: #303030;">:</span><span style="color: #6000e0; font-weight: bold;">5px</span>; <span style="color: green; font-weight: bold;">width</span><span style="color: #303030;">:</span><span style="color: #6000e0; font-weight: bold;">930px</span>; <span style="color: green; font-weight: bold;">min-height</span><span style="color: #303030;">:</span><span style="color: green; font-weight: bold;">auto</span>; <span style="color: green; font-weight: bold;">margin</span><span style="color: #303030;">:</span><span style="color: #6000e0; font-weight: bold;">0px</span>; <span style="color: green; font-weight: bold;">margin-top</span><span style="color: #303030;">:-</span><span style="color: #6000e0; font-weight: bold;">1px</span>; <span style="color: green; font-weight: bold;">border</span><span style="color: #303030;">:</span><span style="color: #6000e0; font-weight: bold;">1px</span> <span style="color: green; font-weight: bold;">solid</span> <span style="color: #6000e0; font-weight: bold;">#ddd</span>; <span style="color: green; font-weight: bold;">float</span><span style="color: #303030;">:</span><span style="color: green; font-weight: bold;">left</span>; <span style="color: green; font-weight: bold;">position</span><span style="color: #303030;">:</span><span style="color: green; font-weight: bold;">relative</span>;} <span style="color: #0060b0; font-weight: bold;">#toolbox</span> <span style="color: #b00060; font-weight: bold;">.widget</span>{ <span style="color: green; font-weight: bold;">float</span><span style="color: #303030;">:</span><span style="color: green; font-weight: bold;">left</span>;} <span style="color: #0060b0; font-weight: bold;">#toolbox</span> <span style="color: #b00060; font-weight: bold;">.widget-content</span><span style="color: #303030;">,</span> <span style="color: #0060b0; font-weight: bold;">#toolbox</span> <span style="color: #b00060; font-weight: bold;">.widget-head</span> <span style="color: #b00060; font-weight: bold;">.collapse</span><span style="color: #303030;">,</span> <span style="color: #0060b0; font-weight: bold;">#toolbox</span> <span style="color: #b00060; font-weight: bold;">.widget-head</span> <span style="color: #b00060; font-weight: bold;">.remove</span><span style="color: #303030;">,</span> <span style="color: #0060b0; font-weight: bold;">#toolbox</span> <span style="color: #b00060; font-weight: bold;">.widget-head</span> <span style="color: #b00060; font-weight: bold;">.edit</span>{ <span style="color: green; font-weight: bold;">display</span><span style="color: #303030;">:</span><span style="color: green; font-weight: bold;">none</span>;} <span style="color: #b00060; font-weight: bold;">.badge</span> { <span style="color: green; font-weight: bold;">background-image</span><span style="color: #303030;">:</span> <span style="background-color: #fff0f0; color: #d02000;">url('../images/badge.png')</span>; <span style="color: green; font-weight: bold;">width</span><span style="color: #303030;">:</span><span style="color: #6000e0; font-weight: bold;">20px</span>; <span style="color: green; font-weight: bold;">height</span><span style="color: #303030;">:</span><span style="color: #6000e0; font-weight: bold;">17px</span>; <span style="color: green; font-weight: bold;">float</span><span style="color: #303030;">:</span><span style="color: green; font-weight: bold;">right</span>; <span style="color: green; font-weight: bold;">color</span><span style="color: #303030;">:</span><span style="color: #6000e0; font-weight: bold;">#fff</span>; <span style="color: green; font-weight: bold;">padding-top</span><span style="color: #303030;">:</span><span style="color: #6000e0; font-weight: bold;">4px</span>; <span style="color: green; font-weight: bold;">text-align</span><span style="color: #303030;">:</span><span style="color: green; font-weight: bold;">center</span>; <span style="color: green; font-weight: bold;">font-size</span><span style="color: #303030;">:</span><span style="color: #6000e0; font-weight: bold;">10px</span>; <span style="color: green; font-weight: bold;">font-weight</span><span style="color: #303030;">:</span><span style="color: green; font-weight: bold;">bold</span>; <span style="color: green; font-weight: bold;">position</span><span style="color: #303030;">:</span><span style="color: green; font-weight: bold;">absolute</span>; <span style="color: green; font-weight: bold;">z-index</span><span style="color: #303030;">:</span><span style="color: #6000e0; font-weight: bold;">10</span>; <span style="color: green; font-weight: bold;">margin-left</span><span style="color: #303030;">:-</span><span style="color: #6000e0; font-weight: bold;">5px</span>; <span style="color: green; font-weight: bold;">font-family</span><span style="color: #303030;">:</span>verdana;} <span style="color: #b00060; font-weight: bold;">.slide</span> { <span style="color: green; font-weight: bold;">margin</span><span style="color: #303030;">:</span> <span style="color: #6000e0; font-weight: bold;">5px</span> <span style="color: #6000e0; font-weight: bold;">5px</span> <span style="color: #6000e0; font-weight: bold;">0px</span> <span style="color: #6000e0; font-weight: bold;">0px</span>; <span style="color: green; font-weight: bold;">background-color</span><span style="color: #303030;">:</span><span style="color: #6000e0; font-weight: bold;">#fff</span>; <span style="color: green; font-weight: bold;">float</span><span style="color: #303030;">:</span><span style="color: green; font-weight: bold;">left</span>; <span style="color: green; font-weight: bold;">color</span><span style="color: #303030;">:</span><span style="color: #6000e0; font-weight: bold;">#fff</span>; <span style="color: green; font-weight: bold;">border</span><span style="color: #303030;">:</span><span style="color: #6000e0; font-weight: bold;">1px</span> <span style="color: green; font-weight: bold;">solid</span> <span style="color: #6000e0; font-weight: bold;">#ddd</span>; <span style="color: green; font-weight: bold;">position</span><span style="color: #303030;">:</span><span style="color: green; font-weight: bold;">relative</span>;} <span style="color: #b00060; font-weight: bold;">.slide</span> <span style="color: #007000;">a</span><span style="color: #303030;">,</span> <span style="color: #b00060; font-weight: bold;">.slide</span> <span style="color: #007000;">a</span><span style="color: #505050; font-weight: bold;">:active</span><span style="color: #303030;">,</span> <span style="color: #b00060; font-weight: bold;">.slide</span> <span style="color: #007000;">a</span><span style="color: #505050; font-weight: bold;">:visited</span>{ <span style="color: green; font-weight: bold;">float</span><span style="color: #303030;">:</span><span style="color: green; font-weight: bold;">left</span>; <span style="color: green; font-weight: bold;">color</span><span style="color: #303030;">:</span><span style="color: #6000e0; font-weight: bold;">#fff</span>; <span style="color: green; font-weight: bold;">padding</span><span style="color: #303030;">:</span> <span style="color: #6000e0; font-weight: bold;">5px</span>; <span style="color: green; font-weight: bold;">margin</span><span style="color: #303030;">:</span><span style="color: #6000e0; font-weight: bold;">5px</span>; <span style="color: green; font-weight: bold;">background-color</span><span style="color: #303030;">:</span><span style="color: #6000e0; font-weight: bold;">#187069</span>;} <span style="color: #b00060; font-weight: bold;">.reset</span> <span style="color: #007000;">a</span><span style="color: #303030;">,</span> <span style="color: #b00060; font-weight: bold;">.reset</span> <span style="color: #007000;">a</span><span style="color: #505050; font-weight: bold;">:active</span><span style="color: #303030;">,</span> <span style="color: #b00060; font-weight: bold;">.reset</span> <span style="color: #007000;">a</span><span style="color: #505050; font-weight: bold;">:visited</span>{ <span style="color: green; font-weight: bold;">float</span><span style="color: #303030;">:</span><span style="color: green; font-weight: bold;">left</span>; <span style="color: green; font-weight: bold;">color</span><span style="color: #303030;">:</span><span style="color: #6000e0; font-weight: bold;">#fff</span>; <span style="color: green; font-weight: bold;">padding</span><span style="color: #303030;">:</span> <span style="color: #6000e0; font-weight: bold;">5px</span>; <span style="color: green; font-weight: bold;">margin</span><span style="color: #303030;">:</span><span style="color: #6000e0; font-weight: bold;">5px</span>; <span style="color: green; font-weight: bold;">background-color</span><span style="color: #303030;">:</span><span style="color: #6000e0; font-weight: bold;">#082167</span>;} <span style="color: #b00060; font-weight: bold;">.reset</span> { <span style="color: green; font-weight: bold;">margin</span><span style="color: #303030;">:</span> <span style="color: #6000e0; font-weight: bold;">5px</span> <span style="color: #6000e0; font-weight: bold;">5px</span> <span style="color: #6000e0; font-weight: bold;">0px</span> <span style="color: #6000e0; font-weight: bold;">5px</span>; <span style="color: green; font-weight: bold;">background-color</span><span style="color: #303030;">:</span><span style="color: #6000e0; font-weight: bold;">#fff</span>; <span style="color: green; font-weight: bold;">float</span><span style="color: #303030;">:</span><span style="color: green; font-weight: bold;">left</span>; <span style="color: green; font-weight: bold;">color</span><span style="color: #303030;">:</span><span style="color: #6000e0; font-weight: bold;">#fff</span>; <span style="color: green; font-weight: bold;">border</span><span style="color: #303030;">:</span><span style="color: #6000e0; font-weight: bold;">1px</span> <span style="color: green; font-weight: bold;">solid</span> <span style="color: #6000e0; font-weight: bold;">#ddd</span>; <span style="color: green; font-weight: bold;">position</span><span style="color: #303030;">:</span><span style="color: green; font-weight: bold;">relative</span>;}
</pre>
</div>
<br />
<br />
The CSS helps style the page into three even columns and each of the widgets are styled with some buttons and styled headers.<br />
<h3>
Javascript</h3>
To provide the cool functionality, we will need to get the latest jQuery libraries and jQuery plugins. We will also create our own custom javascript file which we will be used to store our script. The versions that we are using are below with links to download them.<br />
<ul>
<li><a href="http://www.lifeinsharepoint.co.uk/demo/DragAndDrop/Resources/jquery-1.6.2.min.js">jQuery 1.6.2</a></li>
<li><a href="http://www.lifeinsharepoint.co.uk/demo/DragAndDrop/Resources/jquery-ui-1.8.16.custom.min.js">jQuery UI 1.8.16</a></li>
<li><a href="http://www.lifeinsharepoint.co.uk/demo/DragAndDrop/Resources/jquery.cookie.js">jQuery Cookie</a></li>
</ul>
Our own script.js file at this stage will contain only a couple of lines of code to test that jQuery is working;<br />
<br />
<!-- HTML generated using hilite.me --><br />
<div style="background: #ffffff; background: white; border-width: .1em .1em .1em .8em; border: solid gray; color: black; overflow: auto; padding: .2em .6em; width: auto;">
<pre style="line-height: 125%; margin: 0;">jQuery(<span style="color: #007020;">document</span>).ready(<span style="color: green; font-weight: bold;">function</span>(){ alert(<span style="background-color: #fff0f0;">'Jquery is Working'</span>);});
</pre>
</div>
<br />
<br />
<h3>
Images</h3>
The images for the close and collapse buttons we will use a simple sprite which has a close, max and min symbols on it<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhE75nkCEBDA-18xrRK9-h2i_spBL1ZWEQ0fsGog9mkeumHDdU6icrd5dG4X3vtndZt_FNJOOI6RO2FTI9PErNXhU2ApP5di_vYTZPY5DD4MSmv2rqA_HiIyDOzChasKOeJVX6XVHNGeQQ/s1600/controls.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhE75nkCEBDA-18xrRK9-h2i_spBL1ZWEQ0fsGog9mkeumHDdU6icrd5dG4X3vtndZt_FNJOOI6RO2FTI9PErNXhU2ApP5di_vYTZPY5DD4MSmv2rqA_HiIyDOzChasKOeJVX6XVHNGeQQ/s1600/controls.png" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlpgugce0Cn3Ca55Aiv0StzjRyuCwCSPQVpH_3UFhkxeNghnfub_WxNedReWiVGJq5fxJo823iCyk6c484uPHZu16729Ryl_WgkZmCx-CXzE9e_uHIyGBLU36j3j9sdZjoJxCVjy_PaCk/s1600/badge.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlpgugce0Cn3Ca55Aiv0StzjRyuCwCSPQVpH_3UFhkxeNghnfub_WxNedReWiVGJq5fxJo823iCyk6c484uPHZu16729Ryl_WgkZmCx-CXzE9e_uHIyGBLU36j3j9sdZjoJxCVjy_PaCk/s1600/badge.png" /></a></div>
<br />
<h3>
Live Demo</h3>
A live demo of the base structure can be found <a href="http://www.lifeinsharepoint.co.uk/demo/DragAndDrop/PartOne/">here</a>.<br />
<h2>
Summary</h2>
In this post we have outlined what we will be covering and have managed to get a demo environment working for the next phase. We will add some jQuery functionality and make our page come alive in the next posts. I hope this post has been useful and please leave some comments about what you would like to see in future posts.<br />
<br />
<br />
<h2>
Series Content</h2>
<ol>
<li><h3 class="post-title entry-title" style="background-color: white; background-image: url(http://www.templatesimages.com/images/Minyx20/thdotsH.gif); background-position: 0% 100%; background-repeat: repeat no-repeat; color: #333333; font-family: 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; font-weight: normal; letter-spacing: -1px; line-height: 18px; margin: 0px; padding: 6px 0px;">
<a href="http://digsharepoint.blogspot.com/2013/02/creating-igoogle-ui-for-sharepoint.html" style="color: #6699cc; margin: 0px; outline-style: none; padding: 0px; text-decoration: initial;"><span style="font-size: small;">Creating iGoogle UI for SharePoint 2010/SharePoint 2013 - Part I : Overview, Concept, HTML Structure & Jquery Basics</span></a></h3>
</li>
<li><h3 class="post-title entry-title" style="background-color: white; background-image: url(http://www.templatesimages.com/images/Minyx20/thdotsH.gif); background-position: 0% 100%; background-repeat: repeat no-repeat; color: #333333; font-family: 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; font-weight: normal; letter-spacing: -1px; line-height: 18px; margin: 0px; padding: 6px 0px;">
<a href="http://digsharepoint.blogspot.com/2013/02/creating-igoogle-ui-for-sharepoint_19.html" style="color: #6699cc; margin: 0px; outline-style: none; padding: 0px; text-decoration: initial;"><span style="font-size: small;">Creating iGoogle UI for SharePoint 2010/SharePoint 2013 - Part II : Dragging, Dropping, Sorting and Collapsing</span></a></h3>
</li>
<li><h3 class="post-title entry-title" style="background-color: white; background-image: url(http://www.templatesimages.com/images/Minyx20/thdotsH.gif); background-position: 0% 100%; background-repeat: repeat no-repeat; color: #333333; font-family: 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; font-weight: normal; letter-spacing: -1px; line-height: 18px; margin: 0px; padding: 6px 0px;">
<a href="http://digsharepoint.blogspot.com/2013/02/creating-igoogle-ui-for-sharepoint_333.html" style="color: #ff3366; margin: 0px; outline-style: none; padding: 0px; text-decoration: initial;"><span style="font-size: small;">Creating iGoogle UI for SharePoint 2010/SharePoint 2013 - Part III : Saving WebPart states using Cookies</span></a></h3>
</li>
<li><h3 class="post-title entry-title" style="background-color: white; background-image: url(http://www.templatesimages.com/images/Minyx20/thdotsH.gif); background-position: 0% 100%; background-repeat: repeat no-repeat; color: #333333; font-family: 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; font-weight: normal; letter-spacing: -1px; line-height: 18px; margin: 0px; padding: 6px 0px;">
<a href="http://digsharepoint.blogspot.com/2013/02/creating-igoogle-ui-for-sharepoint_5146.html" style="color: #6699cc; margin: 0px; outline-style: none; padding: 0px; text-decoration: initial;"><span style="font-size: small;">Creating iGoogle UI for SharePoint 2010/SharePoint 2013 - Part IV : Control Adapters</span></a></h3>
</li>
<li><h3 class="post-title entry-title" style="background-color: white; background-image: url(http://www.templatesimages.com/images/Minyx20/thdotsH.gif); background-position: 0% 100%; background-repeat: repeat no-repeat; color: #333333; font-family: 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; font-weight: normal; letter-spacing: -1px; line-height: 18px; margin: 0px; padding: 6px 0px;">
<a href="http://digsharepoint.blogspot.com/2013/02/creating-igoogle-ui-for-sharepoint_349.html" style="color: #6699cc; margin: 0px; outline-style: none; padding: 0px; text-decoration: initial;"><span style="font-size: small;">Creating iGoogle UI for SharePoint 2010/SharePoint 2013 - Part V : SharePoint 2010 Integration</span></a></h3>
</li>
</ol>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-3888123222103988694.post-43364916838823592172013-02-05T04:51:00.001-05:002013-02-19T02:50:06.325-05:00Setting up People Search in SharePoint 2013<div style="line-height:1.7;color:#000000;font-size:14px;font-family:arial"><div style="color: rgb(0, 0, 0); font-family: arial; font-size: 14px;"> People Search requires you to have the User Profile Service Application up and running as well as My Sites. If you don't have either of those configured, People Search will not work and you will likely see an error like the following in your crawl log.<p><em>Error in the Microsoft SharePoint People Protocol Handler. (Invalid URI: The URI is empty.)</em></p><p><em><a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SearchCrawlLogPeopleSearchError_31B567A7.png"><img style="border: 0px currentColor; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" title="SearchCrawlLogPeopleSearchError" border="0" alt="SearchCrawlLogPeopleSearchError" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/SearchCrawlLogPeopleSearchError_thumb_463AB725.png" width="580" height="390"></a></em></p><p><strong>User Profile Synchronization Application</strong></p><p>Let's start with configuring the User Profile Service Application. We need this to retrieve user profiles from Active Directory so that search can use them. If you already have your profiles imported, you can skip this section and proceed to My Sites. The nice thing about SharePoint 2013 is that you can set it up the easy way now with the new (well old from 2007) synchronization option called <em>Use SharePoint Active Directory Import</em>. You can still using the full sync if you want, but for those of you that don't want to mess with the pain you had with UPS in the past, give this a try. You can always change it later. If you already have profile synchronization working, there is no reason to mess with this setting. To get to this setting, go to your User Profile Service Application –> Synchronization Settings. Choose the option <em>Use SharePoint Active Directory Import</em> and click ok. You'll get a warning mentioning it's limitations after that. </p><p><a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/UPSSynchornizationSettingsUseADImport_70A6E842.png"><img style="border: 0px currentColor; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" title="UPSSynchornizationSettingsUseADImport" border="0" alt="UPSSynchornizationSettingsUseADImport" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/UPSSynchornizationSettingsUseADImport_thumb_052C37C1.png" width="585" height="447"></a></p><p>Once you are done here, go to <em>Configure Synchronization Connections</em> and <em>Create New Connection</em>. Again, you don't need to do this if you already have synchronization up and running. Enter the name of your domain, provide an account that has credentials. This account does not need to be a domain admin (nor should it be). Click <em>Populate Containers</em> and select the OUs that you want to import and then save the connection. Back on the UPSA page, go to <em>Start Profile Synchronization</em> and select <em>Start Full Synchronization</em> and click OK.</p><p><strong>My Sites</strong></p><p>We now need to configure My Sites. Typically this is hosted on a new web application but it doesn't have to be. Now, you need to create a My Site Host. To do this, create a new site collection on the root path (/). Choose the <em>My Site Host</em> template and create the site collection.</p><p><a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/MySiteHostNewSiteCollection_2F9868DE.png"><img style="border: 0px currentColor; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" title="MySiteHostNewSiteCollection" border="0" alt="MySiteHostNewSiteCollection" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/MySiteHostNewSiteCollection_thumb_7D34955E.png" width="516" height="258"></a></p><p>Once you have created this web application and set up it's site collection, you will need to create some managed paths for it. To do this, select the web application that host My Sites and click <em>Managed Paths</em> in the ribbon.</p><p><a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/UPSWebApplicationsManagedPaths_67D6DFF6.png"><img style="border: 0px currentColor; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" title="UPSWebApplicationsManagedPaths" border="0" alt="UPSWebApplicationsManagedPaths" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/UPSWebApplicationsManagedPaths_thumb_1C773C32.png" width="244" height="219"></a></p><p>On this screen, remove the existing <em>Sites </em>managed path. Then add a wildcard inclusion for <em>personal</em> and a explicit inclusion for <em>my</em>. </p><p><a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/MySitesDefinedManagedPaths_6E1DB684.png"><img style="border: 0px currentColor; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" title="MySitesDefinedManagedPaths" border="0" alt="MySitesDefinedManagedPaths" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/MySitesDefinedManagedPaths_thumb_74D0C007.png" width="387" height="148"></a></p><p>Now, we need to enable Self Service Site Creation. Return to the Web Applications page and click the <em>Self-Service Site Creation</em>. From here, select <em>On</em> and click Ok.</p><p><a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/MySitesSelfServiceSiteCreation_147F99D0.png"><img style="border: 0px currentColor; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" title="MySitesSelfServiceSiteCreation" border="0" alt="MySitesSelfServiceSiteCreation" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/MySitesSelfServiceSiteCreation_thumb_342E7398.png" width="502" height="170"></a></p><p><strong>Search</strong></p><p>At this point, you may be good to go. However, there are a few settings that you should verify. First, go to the Service Applications page. Select your <em>User Profile Service Application </em>but do not click on the link. Instead click on the <em>Administrators</em> button. Typically, what you will find here is that when the Search Service Application was created, it adds the Search service account to this list. However, if you change the default content access account (as you should), it will not get updated here automatically. Therefore, you need to add your crawl account to this list and choose the <em>Retrieve People Data for Search Crawlers</em> permission.</p><p><a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/UPSPeopleSearchAdministrators_05D4EDEB.png"><img style="border: 0px currentColor; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" title="UPSPeopleSearchAdministrators" border="0" alt="UPSPeopleSearchAdministrators" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/UPSPeopleSearchAdministrators_thumb_1A5A3D69.png" width="321" height="459"></a></p><p>Now, we are probably ready to crawl, but it's worth checking the content source to be sure. Go to your Search Application –> Content Sources. Edit your default content source (typically <em>Local SharePoint sites</em>). Ensure that there is an entry with the sps3 protocol handler (i.e.: sps3://myserver) in the start addresses. You only need one sps3 entry and typically it is just the URL of the first web application you happened to create. It does not have to be the URL of the My Site Host.</p><p><a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/PeopleSearchContentSource_19EE0A74.png"><img style="border: 0px currentColor; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" title="PeopleSearchContentSource" border="0" alt="PeopleSearchContentSource" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/PeopleSearchContentSource_thumb_20A113F7.png" width="571" height="202"></a></p><p>Once you have confirmed these URLs are correct, you can start an incremental crawl. When it finishes, you can go to you will be able to go to your search center and search for people in your organization. If it doesn't work, return to your Search Service Application and view your crawl log. There usually is something there to help indicate what the problem is.<br><br><br><br><br><br></p></div><span style="display: none;" id="jy5ContentSuffix"></span></div><br><br><span title="neteasefooter"><span id="netease_mail_footer"></span></span>SharePointhttp://www.blogger.com/profile/11836813831529789606noreply@blogger.comtag:blogger.com,1999:blog-3888123222103988694.post-76395004990703930112013-02-05T04:44:00.001-05:002013-02-19T02:50:06.328-05:00Working with links in a Client Web Part with SharePoint 2013<div style="line-height:1.7;color:#000000;font-size:14px;font-family:arial"><div style="color: rgb(0, 0, 0); font-family: arial; font-size: 14px;"><p>If you've followed <a style="margin: 0px; padding: 0px; color: rgb(255, 51, 102); outline-style: none;" href="http://digsharepoint.blogspot.com/2013/02/building-sharepoint-hosted-client-web.html">Building a SharePoint-hosted Client Web Part in SharePoint 2013</a>, you have a good start on working with Client Web Parts with the new SharePoint 2013 app model. In an app part, everything you do is inside an IFRAME. You need to remember this whenever you create links inside your App Part. This provides a small level of complexity but it's not that bad when you think about it. Let's start by taking a look at what it will take to link to the default page of the app. Typically this page is called default.aspx and is hosted at a URL like the one below.</p><p><strong>http://app-4715ba34d5bfe2.apptest.local/sites/developer/HelloWorldApp/Pages/Default.aspx</strong></p><p>Effectively this url, has a prefix (app), an Id, a subdomain hosting the apps, the current site I am running it on (developer site), followed by the app name and finally the Pages folder (which matches the name I have in Visual Studio). The .aspx page hosting your Client Web Part also typically sits in this folder as well. In my case it's called <em>HelloWorldClientWebPart.aspx</em>. That means, if I want to create a link in my Client Web part to the app's default page, I should be able to do so with a relative link like this:</p><div style="background: white; color: black; font-family: consolas; font-size: 10pt;"><p style="margin: 0px;"><span style="color: blue;"><</span><span style="color: maroon;">a</span> <span style="color: red;">href</span><span style="color: blue;">="default.aspx"></span>Go to app default page<span style="color: blue;"></</span><span style="color: maroon;">a</span><span style="color: blue;">></span></p> </div><p>This will get me to the page, but unfortunately here is the result:</p><p><a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/ClientWebPartNoFramingError2_38A48019.png"><img style="border: 0px currentColor; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" title="ClientWebPartNoFramingError2" border="0" alt="ClientWebPartNoFramingError2" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/ClientWebPartNoFramingError2_thumb_3B89BEFF.png" width="470" height="365"></a></p><p>The link works but that page is designed to run in the full browser so it doesn't have the <em>AllowFraming</em> tag. Fixing this is simple though. Just add target="_top" to have the link navigate the parent frame instead of the IFRAME. The link now looks like this:</p><div style="background: white; color: black; font-family: consolas; font-size: 10pt;"><p style="margin: 0px;"><span style="color: blue;"><</span><span style="color: maroon;">a</span> <span style="color: red;">href</span><span style="color: blue;">="default.aspx"</span> <span style="color: red;">target</span><span style="color: blue;">="_top"></span>Go to app page 2<span style="color: blue;"></</span><span style="color: maroon;">a</span><span style="color: blue;">></span></p> </div><p>Now the link will work. </p><p>Another common scenario you might run into is linking to a related list. In this case, I have a list called TestList with a relative URL of Lists/TestList. We can get to this, but we need to use a relative path and go up one folder first since the page executes out of the Pages library. Here is what that link would look like.</p><div style="background: white; color: black; font-family: consolas; font-size: 10pt;"><p style="margin: 0px;"><span style="color: blue;"><</span><span style="color: maroon;">a</span> <span style="color: red;">href</span><span style="color: blue;">="../Lists/TestList"</span> <span style="color: red;">target</span><span style="color: blue;">="_top"></span>Go to list<span style="color: blue;"></</span><span style="color: maroon;">a</span><span style="color: blue;">></span></p> </div><p>Lastly, there may be a time when you want to retrieve the URL to the app web from the client web part. You can do this with some CSOM. Start by getting a reference to the app web.</p> <span style="color: blue;"><div style="background: white; color: black; font-family: consolas; font-size: 10pt;"><p style="margin: 0px;"><span style="color: blue;">var</span> context;</p><p style="margin: 0px;"><span style="color: blue;">var</span> web;</p></div> </span><div style="background: white; color: black; font-family: consolas; font-size: 10pt;"><p style="margin: 0px;">context = <span style="color: blue;">new</span> SP.ClientContext.get_current();</p><p style="margin: 0px;">web = context.get_web();</p> </div><p>You then need to load the context for the web object and then execute a query. </p><div style="background: white; color: black; font-family: consolas; font-size: 10pt;"><p style="margin: 0px;">context.load(web);</p><p style="margin: 0px;">context.executeQueryAsync(onUrlRequestSucceeded, onQueryFailed);</p> </div><p>On the success method, you can read the URL. I then get a reference to the link on the page I want to update and assign the href attribute.</p><div style="background: white; color: black; font-family: consolas; font-size: 10pt;"><p style="margin: 0px;"><span style="color: blue;">function</span> onUrlRequestSucceeded() {</p><p style="margin: 0px;"> <span style="color: blue;">var</span> appWebUrl = web.get_url();</p><p style="margin: 0px;"> $(<span style="color: rgb(163, 21, 21);">"#MyLink"</span>).attr(<span style="color: rgb(163, 21, 21);">"href"</span>, appWebUrl);</p><p style="margin: 0px;">}</p> </div><p>This gives you some options for working with links. It's not entirely complicated, but I thought it was worth a quick write-up.<br><br><br><br><br><br></p></div><span style="display: none;" id="jy5ContentSuffix"></span></div><br><br><span title="neteasefooter"><span id="netease_mail_footer"></span></span>SharePointhttp://www.blogger.com/profile/11836813831529789606noreply@blogger.comtag:blogger.com,1999:blog-3888123222103988694.post-86633335632779821022013-02-05T04:38:00.001-05:002013-02-19T02:50:06.334-05:00Building a SharePoint-hosted Client Web Part in SharePoint 2013<div style="line-height:1.7;color:#000000;font-size:14px;font-family:arial"><div style="color: rgb(0, 0, 0); font-family: arial; font-size: 14px;"><p>I am extremely interested in the new SharePoint 2013 App model so I have been doing a lot with them lately. The latest thing I was trying was building a SharePoint-hosted Client Web Part. 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. This <a href="http://msdn.microsoft.com/en-us/library/fp142379(v=office.15)">post</a> on MSDN is good to help you get started with the setup of your app. Hopefully this info will help you get started. This post assumes you have installed Visual Studio 2012 RC as well as the SharePoint development tools.</p><p>After you open Visual Studio 2012 RC, create a new SharePoint app by choosing Office / SharePoint –> Apps –> App for SharePoint 2013.</p><p><a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/VS12RCNewSharePointApp_3043355C.png"><img style="border-width: 0px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" title="VS12RCNewSharePointApp" border="0" alt="VS12RCNewSharePointApp" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/VS12RCNewSharePointApp_thumb_39BBF3D2.png" width="644" height="444"></a></p><p>You'll then be prompted for the type of app as well as a name and deployment location. For the deployment location, you need to specify the URL to a site created with the <em>Development Site </em>template. I created a new site collection for this. I am not sure if it is required or not but I am fairly certain it is.</p><p><a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/VS12RCNewAppSettings_1E36F1CF.png"><img style="border-width: 0px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" title="VS12RCNewAppSettings" border="0" alt="VS12RCNewAppSettings" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/VS12RCNewAppSettings_thumb_038A55B6.png" width="591" height="469"></a></p><p>At this point, you'll have a new SharePoint-hosted App project. Now, we just need to add the pieces that we need. However, first you need to understand a little bit about the ClientWebPart. This new type of web part is essentially two pieces: an elements.xml file and an .aspx page. The elements.xml file performs many of the same functions as a .webpart file, but it has different parameters. It's main purpose is to specify the path to a .aspx page which it then loads in an IFRAME. Since it is an IFRAME, this page can actually be hosted anywhere: locally, on a remote web server, or in Azure. However, hosting it locally inside SharePoint is by far the simplest.</p><p>We'll create the Client Web Part using the New Item menu:</p><p><a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/VS12RCClientWebPartSPI_2FC6DC9A.png"><img style="border-width: 0px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" title="VS12RCClientWebPartSPI" border="0" alt="VS12RCClientWebPartSPI" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/VS12RCClientWebPartSPI_thumb_58EE74D8.png" width="600" height="416"></a></p><p>When the Client Web Part is created, you'll get an XML file that looks like this.</p><p><a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/ClientWebPartNewXml_17078F8A.png"><img style="border-width: 0px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" title="ClientWebPartNewXml" border="0" alt="ClientWebPartNewXml" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/ClientWebPartNewXml_thumb_2AB4791E.png" width="523" height="305"></a></p><p>You can update the Client Web Part title, description, and size here. Note, that end users can't change the size of the Client Web part once it's deployed so set the value correctly here. Note the <em>Content</em> 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. To do this we make use of the <em>~appWebUrl </em>token and then just specify the relative path <em>Pages/HelloWorldClientWebPart.aspx</em>. Here is what the entire XML looks like.</p><p><span style="color: blue;"><?</span><span style="color: rgb(163, 21, 21);">xml</span><span style="color: blue;"> </span><span style="color: red;">version</span><span style="color: blue;">=</span>"<span style="color: blue;">1.0</span>"<span style="color: blue;"> </span><span style="color: red;">encoding</span><span style="color: blue;">=</span>"<span style="color: blue;">utf-8</span>"<span style="color: blue;">?></span></p><div style="background: white; color: black; font-family: consolas; font-size: 10pt;"><p style="margin: 0px;"><span style="color: blue;"><</span><span style="color: rgb(163, 21, 21);">Elements</span><span style="color: blue;"> </span><span style="color: red;">xmlns</span><span style="color: blue;">=</span>"<span style="color: blue;">http://schemas.microsoft.com/sharepoint/</span>"<span style="color: blue;">></span></p><p style="margin: 0px;"><span style="color: blue;"> <</span><span style="color: rgb(163, 21, 21);">ClientWebPart</span><span style="color: blue;"> </span><span style="color: red;">Name</span><span style="color: blue;">=</span>"<span style="color: blue;">HelloWorldClientWebPart</span>"<span style="color: blue;"> </span><span style="color: red;">Title</span><span style="color: blue;">=</span>"<span style="color: blue;">HelloWorldClientWebPart</span>"<span style="color: blue;"> </span><span style="color: red;">Description</span><span style="color: blue;">=</span>"<span style="color: blue;">This is my awesome HelloWorldClientWebPart.</span>"<span style="color: blue;"> </span><span style="color: red;">DefaultWidth</span><span style="color: blue;">=</span>"<span style="color: blue;">300</span>"<span style="color: blue;"> </span><span style="color: red;">DefaultHeight</span><span style="color: blue;">=</span>"<span style="color: blue;">200</span>"<span style="color: blue;">></span></p><p style="margin: 0px;"> </p><p style="margin: 0px;"><span style="color: blue;"> <!--</span><span style="color: green;"> Content element identifies the location of the page that will render inside the client web part</span></p><p style="margin: 0px;"><span style="color: green;"> Properties are referenced on the query string using the pattern _propertyName_</span></p><p style="margin: 0px;"><span style="color: green;"> Example: Src="~appWebUrl/Pages/ClientWebPart1.aspx?Property1=_property1_" </span><span style="color: blue;">--></span></p><p style="margin: 0px;"><span style="color: blue;"> <</span><span style="color: rgb(163, 21, 21);">Content</span><span style="color: blue;"> </span><span style="color: red;">Type</span><span style="color: blue;">=</span>"<span style="color: blue;">html</span>"<span style="color: blue;"> </span><span style="color: red;">Src</span><span style="color: blue;">=</span>"<span style="color: blue;">~appWebUrl/Pages/HelloWorldClientWebPart.aspx</span>"<span style="color: blue;"> /></span></p><p style="margin: 0px;"> </p><p style="margin: 0px;"><span style="color: blue;"> <!--</span><span style="color: green;"> Define properties in the Properties element</span></p><p style="margin: 0px;"><span style="color: green;"> Remember to put Property Name on the Src attribute of the Content element above</span></p><p style="margin: 0px;"><span style="color: green;"> <Properties></span></p><p style="margin: 0px;"><span style="color: green;"> <Property Name="property1" Type="string" WebBrowsable="true" WebDisplayName="First Property" WebDescription="Description 1" WebCategory="Custom Properties" DefaultValue="String Property" RequiresDesignerPermission="true" /></span></p><p style="margin: 0px;"><span style="color: green;"> </Properties> </span><span style="color: blue;">--></span></p><p style="margin: 0px;"> </p><p style="margin: 0px;"><span style="color: blue;"> </</span><span style="color: rgb(163, 21, 21);">ClientWebPart</span><span style="color: blue;">></span></p><p style="margin: 0px;"><span style="color: blue;"></</span><span style="color: rgb(163, 21, 21);">Elements</span><span style="color: blue;">></span></p> </div> You can pass properties from the the user enters from ClientWebPart itself to the page here, but we'll cover that in another post. <p>Now, we need to create the page that will be loaded in the IFRAME by the Client Web Part. For simplicity, I go with the same name as the Client Web part. </p><p><a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/VS12RCPageSPI_21E470D2.png"><img style="border-width: 0px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" title="VS12RCPageSPI" border="0" alt="VS12RCPageSPI" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/VS12RCPageSPI_thumb_2033A4FE.png" width="591" height="410"></a></p><p>The default page looks like this.</p><p><a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/ClientWebPartPageDefault_17639CB2.png"><img style="border-width: 0px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" title="ClientWebPartPageDefault" border="0" alt="ClientWebPartPageDefault" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/ClientWebPartPageDefault_thumb_161F03D3.png" width="512" height="188"></a></p><p>It's this part where I couldn't find any details on how to proceed. You might be wondering if you need to do something to this page before it will work in a Client Web Part. The answer is "yes". If you do try to deploy it as is, you'll get the following error when trying to use the Client Web Part.</p><p><em>This content cannot be displayed in a frame.</em></p><p><a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/ClientWebPartNoFramingError_68BD6E02.png"><img style="border-width: 0px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" title="ClientWebPartNoFramingError" border="0" alt="ClientWebPartNoFramingError" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/ClientWebPartNoFramingError_thumb_72A25F6D.png" width="244" height="184"></a></p><p>Luckily, Saurabh Bhatia came through for me in the <a href="http://social.msdn.microsoft.com/Forums/en-US/appsforsharepoint/thread/abb96582-e5b1-4fbd-9e63-2ffc01780835">forums</a> and helped me out. You need to include the <em>AllowFraming</em> tag in your page to allow it to render in an IFRAME. Everything else in the page needs to go with the exception of the reference to the <em>WebPartPages </em>tag. If you leave references to the master page or content place holders, you'll receive a heap of JavaScript errors. Here's what my complete page looks like.</p><div style="background: white; color: black; font-family: consolas; font-size: 10pt;"><p style="margin: 0px;"><span style="background: yellow;"><%</span><span style="color: blue;">@</span> <span style="color: maroon;">Register</span> <span style="color: red;">Tagprefix</span><span style="color: blue;">="WebPartPages"</span> <span style="color: red;">Namespace</span><span style="color: blue;">="Microsoft.SharePoint.WebPartPages"</span> <span style="color: red;">Assembly</span><span style="color: blue;">="Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"</span> <span style="background: yellow;">%></span></p><p style="margin: 0px;"><span style="color: blue;"><</span><span style="color: maroon;">WebPartPages</span><span style="color: blue;">:</span><span style="color: maroon;">AllowFraming</span> <span style="color: red;">ID</span><span style="color: blue;">="AllowFraming1"</span> <span style="color: red;">runat</span><span style="color: blue;">="server"</span> <span style="color: blue;">/></span></p><p style="margin: 0px;"><span style="color: blue;"><</span><span style="color: maroon;">div</span><span style="color: blue;">></span>Hello World Client Web Part!<span style="color: blue;"></</span><span style="color: maroon;">div</span><span style="color: blue;">></span></p> </div><p>At this point, we are ready to deploy. You can do so by pressing F5 or choosing Build –> Deploy. This will package your app and after a moment, you'll see your app listed.</p><p><a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/DeveloperSiteApps_6A3E8A16.png"><img style="border-width: 0px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" title="DeveloperSiteApps" border="0" alt="DeveloperSiteApps" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/DeveloperSiteApps_thumb_3DB55A30.png" width="478" height="273"></a></p><p>This is a Client Web Part so you don't need to click on your App here. Instead, go to the Home Page and then edit it. Pick a place on the page and then click on <em>Insert</em> in the ribbon. You'll notice this looks a bit different, choose <em>App Part</em> and you'll see your new Client Web Part listed.</p><p><a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/PageInsertAppPart_751B6B5E.png"><img style="border-width: 0px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" title="PageInsertAppPart" border="0" alt="PageInsertAppPart" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/PageInsertAppPart_thumb_1385AC48.png" width="486" height="261"></a></p><p>You might be wondering what the difference between this and Web Parts are. Not much really. If you click Web Part and then choose Apps and you'll see the same list.</p><p><a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/PageInserWebPartApps_0AB5A3FC.png"><img style="border-width: 0px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" title="PageInserWebPartApps" border="0" alt="PageInserWebPartApps" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/PageInserWebPartApps_thumb_102414A0.png" width="320" height="287"></a></p><p>If all goes well, your Client Web Part should now be visible on the page. You may be prompted for authentication again when it loads. You can adjust your browser security settings to avoid this.</p><p><a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/ClientWebPartOnPage_5C7BA841.png"><img style="border-width: 0px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" title="ClientWebPartOnPage" border="0" alt="ClientWebPartOnPage" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/ClientWebPartOnPage_thumb_144DEC65.png" width="321" height="339"></a></p><p>At this point, you have a working Client Web Part. You can then make use of the Client Object Model or the new REST API to interact with SharePoint. I hope this helps you get started with building some apps. Try it out and see what you can do.<br><br><br><br><br><br></p></div><span style="display: none;" id="jy5ContentSuffix"></span></div><br><br><span title="neteasefooter"><span id="netease_mail_footer"></span></span>SharePointhttp://www.blogger.com/profile/11836813831529789606noreply@blogger.comtag:blogger.com,1999:blog-3888123222103988694.post-72489407252358593672013-02-05T04:32:00.000-05:002013-02-19T02:50:06.326-05:00How to Create SharePoint Ribbon Custom Actions with Visual Studio 2012<div style="line-height:1.7;color:#000000;font-size:14px;font-family:arial"><div style="color: rgb(0, 0, 0); font-family: arial; font-size: 14px;"><p>Let's face it. In SharePoint 2010, creating ribbon custom actions was not a very pleasant experience. You had to know the inner workings of the XML and the black-magic behind selecting the right Id in the <em>CommandUIDefinition</em>. We had community tools like <a href="http://cksdev.codeplex.com/">CKSDEV</a> to help though. Now, I am happy to see that a new Ribbon Custom Action SharePoint Project Item slipped into <a href="http://blogs.msdn.com/b/officeapps/archive/2012/11/12/announcing-the-latest-release-of-office-developer-tools.aspx">Preview 2</a> of the Office Developer Tools. This new SPI provides a nice wizard interface to guide you through the process of creating an action. Let's take a look at it.</p><p>First, you'll need to create a new SharePoint App project. The downside of the tool is that it is only available for SharePoint apps. It's not in regular SharePoint 2013 projects. In my example today, I am going to attach a custom action to a list item to take the user back to the default.aspx application page. Of course, you can use traditional techniques as before to add JavaScript, pass parameters, and whatever else you need to do. I just want to show you what the wizard looks like today.</p><p>In the Add New Item menu, you'll see the new wizard here. Choose <strong>Ribbon Custom Action </strong>and give it a name.</p><p><a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/RibbonCustomActionSPI_01C1C261.png"><img style="border: 0px currentColor; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" title="RibbonCustomActionSPI" border="0" alt="RibbonCustomActionSPI" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/RibbonCustomActionSPI_thumb_13322339.png" width="684" height="475"></a></p><p>Note, that there is also a new <em>Menu Item Custom Action </em>template as well. When you click <em>Add</em>, you will be taken to the next step in the Wizard. Here you first need to choose whether you will apply this to the Host Web or the App Web. Remember that the App Web that has all of the pieces of your app and the Host Web is the site that hosts an instance of your app. One way you might use this new feature is that a user clicks on an item in the host web, uses the ribbon action and gets redirected to your app.</p><p>You have the ability to bind the custom action to a list template or a list instance. If Host Web is selected, selecting List Instance will provide you with a list of all instance on the particular host web that your app is currently configured to publish to. Otherwise, if you choose List Template, it will provide you a list of common templates. I don't think the Wizard will let you pick a custom template, so you would probably have to edit the XML manually when you are done.</p><p><a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/CustomRibbonActionWizardHostWebListTemplate_5F89B6DA.png"><img style="border: 0px currentColor; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" title="CustomRibbonActionWizardHostWebListTemplate" border="0" alt="CustomRibbonActionWizardHostWebListTemplate" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/CustomRibbonActionWizardHostWebListTemplate_thumb_384F6DA5.png" width="508" height="409"></a></p><p>In my case, I have chosen App Web and then a specific List Instance. It knows to look through the List Instances you have in your project and put them in the list.</p><p><a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/CustomRibbonActionWizardAppWebListInstance_17C82DF3.png"><img style="border: 0px currentColor; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" title="CustomRibbonActionWizardAppWebListInstance" border="0" alt="CustomRibbonActionWizardAppWebListInstance" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/CustomRibbonActionWizardAppWebListInstance_thumb_708DE4BD.png" width="517" height="414"></a></p><p>When you continue to the next step, it will allow you to specify the location of the ribbon, the text to display, and what page the user should be redirected to when clicking the link. You can select any existing ASP.NET page in the project for the action to navigate to. If you want to execute JavaScript instead, you would need to edit the XML once you complete the wizard.</p><p><a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/RibbonCustomActionWizardStep2_2FEB984E.png"><img style="border: 0px currentColor; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" title="RibbonCustomActionWizardStep2" border="0" alt="RibbonCustomActionWizardStep2" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/RibbonCustomActionWizardStep2_thumb_0B5A0ACA.png" width="525" height="421"></a></p><p>It provides you with a list of locations that the control can be located at:</p><p><a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/RibbonCustomActionWizardStep2ControlLocation_6AD2CB17.png"><img style="border: 0px currentColor; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" title="RibbonCustomActionWizardStep2ControlLocation" border="0" alt="RibbonCustomActionWizardStep2ControlLocation" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/RibbonCustomActionWizardStep2ControlLocation_thumb_355A08F2.png" width="529" height="382"></a></p><p>When you are finished, Visual Studio generates the XML that you need. You can make edits as necessary. However, at this point there is no going back to the Wizard and making changes. If you want the Wizard again, you'll have to delete the item and recreate it.</p><p><a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/RibbonCustomActionXml_14D2C940.png"><img style="border: 0px currentColor; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" title="RibbonCustomActionXml" border="0" alt="RibbonCustomActionXml" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/RibbonCustomActionXml_thumb_093D0C01.png" width="563" height="479"></a></p><p>At this point we can run the project and go to the list that we set the action on. Selecting the list item, will expose the action in the ribbon.</p><p><a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/RibbonCustomActionVisibleOnList_2160765C.png"><img style="border: 0px currentColor; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" title="RibbonCustomActionVisibleOnList" border="0" alt="RibbonCustomActionVisibleOnList" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/RibbonCustomActionVisibleOnList_thumb_7306F0AE.png" width="564" height="286"></a></p><p>Clicking on the Ribbon Action, I then get redirected to my app home page.</p><p><a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/RibbonCustomActionDefault_20881072.png"><img style="border: 0px currentColor; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" title="RibbonCustomActionDefault" border="0" alt="RibbonCustomActionDefault" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/RibbonCustomActionDefault_thumb_318C3E55.png" width="541" height="382"></a></p><p>I'm pretty excited about this feature since I have always struggled with creating custom actions. I think this will make it much easier to create actions now. This is important because this is one of the key ways to link between the host web and the app web. Unfortunately, this action is only present in Apps, but you could always cut and paste it into another project. You could also likely take the code it generates and use it in your SharePoint 2010 projects as well.<br><br><br><br><br><br></p></div><span style="display: none;" id="jy5ContentSuffix"></span></div><br><br><span title="neteasefooter"><span id="netease_mail_footer"></span></span>SharePointhttp://www.blogger.com/profile/11836813831529789606noreply@blogger.comtag:blogger.com,1999:blog-3888123222103988694.post-82618052123726148502013-02-05T04:29:00.001-05:002013-02-19T02:50:06.331-05:00Using the SharePoint 2013 Search KeywordQuery Class<div style="line-height:1.7;color:#000000;font-size:14px;font-family:arial"><div><div style="color: rgb(0, 0, 0); font-family: arial; font-size: 14px;"><p>Over the past few versions of SharePoint, I have provided a number of blog posts on how to query search. Of those, my posts on how to use the <strong>KeywordQuery</strong> class using KQL are some of the most popular (2010 and 2007). In continuing that tradition, I am proud to present the "How to" post on using the KeywordQuery class in SharePoint 2013. The good news: your old KeywordQuery code should still work. The bad news: the way you did it is marked completely obsolete. I actually had to dig through quite a bit of documentation to find the right API that wasn't obsolete. One thing that always provided confusion was that there were similar classes named KeywordQuery in both <a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.search.query.aspx">Microsoft.Search.Query</a> and <a href="http://msdn.microsoft.com/en-us/library/microsoft.office.server.search.query.aspx">Microsoft.Office.Server.Query</a>. To reduce some of that confusion, the KeywordQuery class in Microsoft.Search.Query is now marked as <a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.search.query.keywordquery.aspx">obsolete</a>. The new updated class is in <a href="http://msdn.microsoft.com/en-us/library/microsoft.office.server.search.query.keywordquery.aspx">Microsoft.Office.Search.Query</a>. Microsoft may have killed the word Office from the name of the product in 2010, but it's alive and well in the API.</p><p>Now let's talk about what we need to execute some queries with our code. The code here today will work well from farm solutions in SharePoint as well as other .NET applications hosted on the same SharePoint server. We'll be building a console application today. If you want to query remotely using the object model, then you will need to use the Search Client Object Model which I covered <a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2012/09/10/how-to-query-search-with-the-sharepoint-2013-client-object-model.aspx">previously</a>. Create a new console application, and then you will need to add a few references. These can be found in the 15 hive in the ISAPI folder. Add the following:</p><ul><li>Microsoft.Office.Server</li><li>Microsoft.Office.Server.Search</li><li>Microsoft.SharePoint</li><li>Microsoft.SharePoint.Security</li> </ul><p>The classes we need are in the search assembly but you'll get lots of errors about dependencies missing if you don't include the others. We then need the following references. This gives us what we need for search, SharePoint, and for the underlying datatable object that is available after we query.</p><div style="background: white; color: black; font-family: consolas; font-size: 10pt;"><p style="margin: 0px;"><span style="color: blue;">using</span> System.Data;</p><p style="margin: 0px;"><span style="color: blue;">using</span> Microsoft.SharePoint;</p><p style="margin: 0px;"><span style="color: blue;">using</span> Microsoft.Office.Server.Search.Query;</p> </div><p>Once we have this, we're ready to get started. There are many ways to instantiate a KeywordQuery object. For simplicity, I am just going to pass a SPSite object for one of my site collections. We'll first, get our SPSite object.</p><div style="background: white; color: black; font-family: consolas; font-size: 10pt;"><p style="margin: 0px;"><span style="color: blue;">using</span> (<span style="color: rgb(43, 145, 175);">SPSite</span> siteCollection = <span style="color: blue;">new</span> <span style="color: rgb(43, 145, 175);">SPSite</span>(<span style="color: rgb(163, 21, 21);">"http://server/sitecollection"</span>))</p> </div><p>We then create a <strong>KeywordQuery</strong> object using that site collection.</p><div style="background: white; color: black; font-family: consolas; font-size: 10pt;"><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">KeywordQuery</span> keywordQuery = <span style="color: blue;">new</span> <span style="color: rgb(43, 145, 175);">KeywordQuery</span>(siteCollection);</p> </div><p>Now, we specify our query using the QueryText field. This is where you can use your custom KQL queries. The documentation team updated the <a href="http://msdn.microsoft.com/en-us/library/ee558911.aspx">post</a> on this so there are a lot of good tips here. I am just going to search for the word <em>SharePoint</em>.</p><div style="background: white; color: black; font-family: consolas; font-size: 10pt;"><p style="margin: 0px;">keywordQuery.QueryText = <span style="color: rgb(163, 21, 21);">"SharePoint"</span>;</p> </div><p>In the past, we would then set the <em>ResultsProvider </em>and <em>ResultTypes</em> that we want, but now we don't have to. In fact, this whole process takes considerably less code. Instead we use the new <a href="http://msdn.microsoft.com/en-us/library/jj250940.aspx"><strong>SearchExecutor</strong></a><strong> </strong>class that I first mentioned in my Client OM post.</p><div style="background: white; color: black; font-family: consolas; font-size: 10pt;"><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">SearchExecutor</span> searchExecutor = <span style="color: blue;">new</span> <span style="color: rgb(43, 145, 175);">SearchExecutor</span>();</p> </div><p>We then use it's <em>ExecuteQuery</em> method passing it our <em>KeywordQuery</em> class.</p><div style="background: white; color: black; font-family: consolas; font-size: 10pt;"><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">ResultTableCollection</span> resultTableCollection = searchExecutor.ExecuteQuery(keywordQuery);</p> </div><p>Assuming it executes correctly, we can then get our search results. Before, we used to use an indexer using <em>ResultTypes.ReleventResults</em> to get the table of results we need. The indexer has been made obsolete, so now we must use the new <em>Filter </em>method. I figured out what it required from the obsolete descriptor of the indexer. For the first value, it needs a string with a value of <em>TableType</em> and since the previous enum is also obsolete, we now use <em>KnownTableTypes.RelevantResults</em>.</p><div style="background: white; color: black; font-family: consolas; font-size: 10pt;"><p style="margin: 0px;"><span style="color: blue;">var</span> resultTables = resultTableCollection.Filter(<span style="color: rgb(163, 21, 21);">"TableType"</span>, <span style="color: rgb(43, 145, 175);">KnownTableTypes</span>.RelevantResults);</p> </div><p>It returns an <strong>IEnumerable<ResultType></strong>, so we need to filter it. I just <em>FirstOrDefault()</em> to get the table we need.</p><div style="background: white; color: black; font-family: consolas; font-size: 10pt;"><p style="margin: 0px;"><span style="color: blue;">var</span> resultTable = resultTables.FirstOrDefault();</p> </div><p>Previously, we then had to load the data into a DataTable which took a few more lines of code. However, now that is not required due to the new <em>Table</em> property.</p><div style="background: white; color: black; font-family: consolas; font-size: 10pt;"><p style="margin: 0px;"><span style="color: rgb(43, 145, 175);">DataTable</span> dataTable = resultTable.Table;</p> </div><p>Now that you have a DataTable, you can bind it or query it as you see. You can also look at the results using the visualizer in Visual Studio.</p><p><a href="http://www.dotnetmafia.com/blogs/dotnettipoftheday/KeywordQueryDataSetVisualizer_05A949EA.png"><img style="border: 0px currentColor; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" title="KeywordQueryDataSetVisualizer" border="0" alt="KeywordQueryDataSetVisualizer" src="http://www.dotnetmafia.com/blogs/dotnettipoftheday/KeywordQueryDataSetVisualizer_thumb_4C2639F2.png" width="545" height="277"></a></p><p>Here is the entire code snippet.</p><div style="background: white; color: black; font-family: consolas; font-size: 10pt;"><p style="margin: 0px;"><span style="color: blue;">using</span> System;</p><p style="margin: 0px;"><span style="color: blue;">using</span> System.Collections.Generic;</p><p style="margin: 0px;"><span style="color: blue;">using</span> System.Linq;</p><p style="margin: 0px;"><span style="color: blue;">using</span> System.Text;</p><p style="margin: 0px;"><span style="color: blue;">using</span> System.Threading.Tasks;</p><p style="margin: 0px;"> </p><p style="margin: 0px;"><span style="color: blue;">using</span> System.Data;</p><p style="margin: 0px;"><span style="color: blue;">using</span> Microsoft.SharePoint;</p><p style="margin: 0px;"><span style="color: blue;">using</span> Microsoft.Office.Server.Search.Query;</p><p style="margin: 0px;"> </p><p style="margin: 0px;"><span style="color: blue;">namespace</span> SearchConsoleApplication1</p><p style="margin: 0px;">{</p><p style="margin: 0px;"> <span style="color: blue;">class</span> <span style="color: rgb(43, 145, 175);">Program</span></p><p style="margin: 0px;"> {</p><p style="margin: 0px;"> <span style="color: blue;">static</span> <span style="color: blue;">void</span> Main(<span style="color: blue;">string</span>[] args)</p><p style="margin: 0px;"> {</p><p style="margin: 0px;"> <span style="color: blue;">using</span> (<span style="color: rgb(43, 145, 175);">SPSite</span> siteCollection = <span style="color: blue;">new</span> <span style="color: rgb(43, 145, 175);">SPSite</span>(<span style="color: rgb(163, 21, 21);">"http://server/sitecollection"</span>))</p><p style="margin: 0px;"> {</p><p style="margin: 0px;"> <span style="color: rgb(43, 145, 175);">KeywordQuery</span> keywordQuery = <span style="color: blue;">new</span> <span style="color: rgb(43, 145, 175);">KeywordQuery</span>(siteCollection);</p><p style="margin: 0px;"> keywordQuery.QueryText = <span style="color: rgb(163, 21, 21);">"SharePoint"</span>;</p><p style="margin: 0px;"> </p><p style="margin: 0px;"> <span style="color: rgb(43, 145, 175);">SearchExecutor</span> searchExecutor = <span style="color: blue;">new</span> <span style="color: rgb(43, 145, 175);">SearchExecutor</span>();</p><p style="margin: 0px;"> <span style="color: rgb(43, 145, 175);">ResultTableCollection</span> resultTableCollection = searchExecutor.ExecuteQuery(keywordQuery);</p><p style="margin: 0px;"> <span style="color: blue;">var</span> resultTables = resultTableCollection.Filter(<span style="color: rgb(163, 21, 21);">"TableType"</span>, <span style="color: rgb(43, 145, 175);">KnownTableTypes</span>.RelevantResults);</p><p style="margin: 0px;"> </p><p style="margin: 0px;"> <span style="color: blue;">var</span> resultTable = resultTables.FirstOrDefault();</p><p style="margin: 0px;"> </p><p style="margin: 0px;"> <span style="color: rgb(43, 145, 175);">DataTable</span> dataTable = resultTable.Table;</p><p style="margin: 0px;"> }</p><p style="margin: 0px;"> }</p><p style="margin: 0px;"> }</p><p style="margin: 0px;">}</p> </div><p>So if you have a lot of search based code, you may need to do some updates at some point. However, I think these are good changes and simplify the process a little bit. In an upcoming post, I'll cover some of the new things you can do with the KeywordQuery class.<br><br><br><br><br><br></p></div><span style="display: none;" id="jy5ContentSuffix"></span></div></div><br><br><span title="neteasefooter"><span id="netease_mail_footer"></span></span>SharePointhttp://www.blogger.com/profile/11836813831529789606noreply@blogger.comtag:blogger.com,1999:blog-3888123222103988694.post-7382928015189938922013-01-22T02:46:00.000-05:002013-01-22T02:47:20.380-05:00Access WCF Service with jQuery in SharePoint2010<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
<div style="background-color: #f6f6f6; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;">
In <a href="http://digsharepoint.blogspot.com/2013/01/create-custom-wcf-service-in.html" style="color: #6699cc; font-family: 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; font-size: 22px; letter-spacing: -1px; line-height: 18px; margin: 0px; outline-style: none; padding: 0px; text-decoration: initial;">Create Custom WCF Service in SharePoint2010</a></div>
I described how to develop a custom WCF service. Today I’ll cover how you can invoke the SharePoint WCF Service from jQuery. In my last post I described to develop a SOAP web service but for using WCF service from jQuery I’m going to use REST web service. For the list of service types and factories supported in SharePoint you can visit the link <a href="http://msdn.microsoft.com/en-us/library/ff521586.aspx" style="color: #de7008;" target="_blank">in MSDN</a>. You can download source code from the link given at the end of the post.<br />
<h4 style="background-color: #f6f6f6; color: #aa0033; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;">
</h4>
<h4 style="background-color: #f6f6f6; color: #aa0033; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;">
Prepare the service to call from jQuery</h4>
<div style="background-color: #f6f6f6; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;">
Consider developing a service as described in <a href="http://digsharepoint.blogspot.com/2013/01/create-custom-wcf-service-in.html" style="color: #6699cc; font-family: 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; font-size: 22px; letter-spacing: -1px; line-height: 18px; margin: 0px; outline-style: none; padding: 0px; text-decoration: initial;">Create Custom WCF Service in SharePoint2010</a> with the following changes:</div>
<ul style="background-color: #f6f6f6; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;">
<li>For using json I’ve used REST service factory ‘Microsoft.SharePoint.Client.Services.MultipleBaseAddressWebServiceHostFactory’ as shown below. You can use SOAP factory but you then need to parse data in different way.<br /><div id="codeSnippetWrapper">
<div id="codeSnippetWrapper">
<div id="codeSnippetWrapper">
<div id="codeSnippetWrapper">
<pre id="codeSnippet" style="background-color: #f4f4f4; border-style: none; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; width: 930.96875px;"><%@ ServiceHost Language=<span style="color: #006080;">"C#"</span> Debug=<span style="color: #006080;">"true"</span>
Service=<span style="color: #006080;">"AccessSPServiceFromJQuery.MyService, $SharePoint.Project.AssemblyFullName$"</span>
CodeBehind=<span style="color: #006080;">"MyService.svc.cs"</span>
<strong> Factory=</strong><span style="color: #006080;"><strong style="color: black;">"Microsoft.SharePoint.Client.Services.<span style="background-color: yellow;">MultipleBaseAddressWebServiceHostFactory</span>, </strong></span></pre>
<pre id="codeSnippet" style="background-color: #f4f4f4; border-style: none; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; width: 930.96875px;"><span style="color: #006080;"><strong style="color: black;">Microsoft.SharePoint.Client.ServerRuntime, Version=14.0.0.0, </strong> Culture=neutral, </span></pre>
<pre id="codeSnippet" style="background-color: #f4f4f4; border-style: none; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; width: 930.96875px;"><span style="color: #006080;">PublicKeyToken=71e9bce111e9429c"</span> %>
</pre>
</div>
</div>
</div>
</div>
</li>
<li>Next you need to specify the return type to json in the service interface as shown below. I’ve specified both request and response type to json in WebInvoke attribute:<br /><br /><div id="codeSnippetWrapper">
<pre id="codeSnippet" style="background-color: #f4f4f4; border-style: none; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; width: 930.96875px;">[ServiceContract]
<span style="color: blue;">public</span> <span style="color: blue;">interface</span> IMyService
{
[OperationContract]
[WebInvoke(Method = <span style="color: #006080;">"GET"</span>, BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Json, </pre>
<pre id="codeSnippet" style="background-color: #f4f4f4; border-style: none; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; width: 930.96875px;">ResponseFormat = WebMessageFormat.Json)]
List<Product> SearchProduct(<span style="color: blue;">string</span> productName);
[OperationContract]
<strong><span style="background-color: yellow;"> [WebInvoke(Method = <span style="color: #006080;">"POST"</span>, BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Json, </span></strong></pre>
<pre id="codeSnippet" style="background-color: #f4f4f4; border-style: none; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; width: 930.96875px;"><strong><span style="background-color: yellow;">ResponseFormat = WebMessageFormat.Json)]</span></strong> <span style="color: blue;">bool</span> Save(Product product);
}</pre>
</div>
</li>
</ul>
<div style="background-color: #f6f6f6; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;">
<div>
<span style="color: red;">One thing to notice here is that you can’t access the service in browser with mex endpoint</span>. For example if you service is <a href="http://myserver/myservice.svc" style="color: #de7008;">http://myserver/myservice.svc</a>, then the url <a href="http://myserver/myservice.svc/mex" style="color: #de7008;">http://myserver/myservice.svc/mex</a> will not work for service created with MultipleBaseAddressWebServiceHostFactory.</div>
<div>
</div>
</div>
<h4 style="background-color: #f6f6f6; color: #aa0033; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;">
Call Service with jQuery</h4>
<div style="background-color: #f6f6f6; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;">
The next step is to call the service with jQuery. The url of the service to be used in jQuery will be service url and method name. For example if you service url is<strong>‘/_vti_bin/AccessSPServiceFromJQuery/MyService.svc</strong>’ and the method name you want to invoke is ‘Search’ then the full url will be ‘<strong>/_vti_bin/AccessSPServiceFromJQuery/MyService.svc/Search</strong>’. As shown in the code below, you can invoke the service Search by passing the parameter in data field of ajax call of jquery</div>
<div id="codeSnippetWrapper" style="background-color: #f6f6f6; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;">
<pre id="codeSnippet" style="background-color: #f4f4f4; border-style: none; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding: 0px; width: 970.96875px;"><span style="color: blue;">function</span> getProductFromService(searchText) {
<span style="color: blue;">try</span> {
$.ajax({
type: <span style="color: #006080;">"GET"</span>,
url: <span style="color: #006080;">'/_vti_bin/AccessSPServiceFromJQuery/MyService.svc/SearchProduct'</span>,
contentType: <span style="color: #006080;">"application/json; charset=utf-8"</span>,
data: { <span style="color: #006080;">"productName"</span>: searchText },
dataType: <span style="color: #006080;">'json'</span>,
success: <span style="color: blue;">function</span> (msg) {
WCFServiceGetSucceeded(msg);
},
error: WCFServiceGetFailed
});
}
<span style="color: blue;">catch</span> (e) {
alert(<span style="color: #006080;">'error invoking service.get()'</span> + e);
}
}
<span style="color: blue;">function</span> WCFServiceGetSucceeded(result) {
alert(<span style="color: #006080;">'success'</span>);
}
<span style="color: blue;">function</span> WCFServiceGetFailed(error) {
alert(<span style="color: #006080;">'Service Failed.'</span>);
}</pre>
</div>
<h4 style="background-color: #f6f6f6; color: #aa0033; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;">
Download and use code</h4>
<div style="background-color: #f6f6f6; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;">
I’ve uploaded the code for this post in my skydrive. You can download the code from the link below. To use the code please ensure you have internet connection as I’ve used jqery from Microsoft CDN. The search functionality get all products matching name. You can try to search just by typing a single character. You can debug and test the code. In save I’ve just shown you can pass value from browser to service using POST method.</div>
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="https://skydrive.live.com/embedicon.aspx/Public/SharePoint/AccessSPServiceFromJQuery.zip?cid=04d8f6d0dd4e7214&sc=documents" style="background-color: #fcfcfc; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px; height: 115px; padding: 0px; width: 98px;" title="Preview"></iframe></div>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-3888123222103988694.post-80544003733046421682013-01-22T02:41:00.001-05:002013-01-22T02:41:21.605-05:00Create Custom WCF Service in SharePoint2010<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
<div style="background-color: #f6f6f6; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;">
In SharePoint 2007, creating a custom Web Service was not so easy. However, asp.net web services are obsolete in SharePoint 2010. Rather new and recommended approach is to develop WCF Service. So the question comes up, “How much difficult it is to create a custom WCF service in SharePoint 2010?”. I’m going to answer the question just right in this blog.</div>
<div style="background-color: #f6f6f6; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;">
<br /></div>
<h4 style="background-color: #f6f6f6; color: #aa0033; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;">
Install CKS development tools edition</h4>
<div style="background-color: #f6f6f6; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;">
For showing how easily you can develop your own Custom WCF Service in SharePoint 2010, I’m going to use a open source Visual Studio 2010 extension know as<a href="http://cksdev.codeplex.com/" style="color: #de7008;" target="_blank">Community Kit for SharePoint: Development Tools Edition</a>. This tool will make the WCF service development much easier. It’ll automate tasks that you would have to do manually. There are two version of the extensions: One for <a href="http://visualstudiogallery.msdn.microsoft.com/a346880f-2d29-47a6-84a2-f2d568dd6997/" style="color: #de7008;" target="_blank">SharePoint Foundation</a> and another one is for <a href="http://visualstudiogallery.msdn.microsoft.com/ee876627-962c-4c35-a4a6-a4d89bfb61dc/" style="color: #de7008;" target="_blank">SharePoint Server</a>. Download the appropriate version and install.</div>
<div style="background-color: #f6f6f6; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;">
<br /></div>
<h4 style="background-color: #f6f6f6; color: #aa0033; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;">
Create WCF Service</h4>
<div style="background-color: #f6f6f6; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;">
Once you installed the CKSDev Visual Studio extension, you can open a SharePoint Project. In the SharePoint Project, right click on the project and try to add a new item. In the “Add New Item” dialog, you will find some new items added by CKSDev Visual Studio extension. Please select the option “WCF Service (CKSDev)” for new item as shown below:</div>
<div style="background-color: #f6f6f6; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;">
<a href="http://lh4.ggpht.com/_o7Td6KCGNTA/TXNNrhHWH6I/AAAAAAAAAoI/Chd-29zMakI/s1600-h/image%5B3%5D.png" style="color: #de7008;"><img alt="image" border="0" height="496" src="http://lh4.ggpht.com/_o7Td6KCGNTA/TXNNtRtb74I/AAAAAAAAAoM/I_9xpogMsB4/image_thumb%5B1%5D.png?imgmax=800" style="background-image: none; border-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="672" /></a></div>
<div style="background-color: #f6f6f6; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;">
<strong>Figure 1: ‘Add New WCF Service’ option ‘add new item’ dialog</strong></div>
<div style="background-color: #f6f6f6; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;">
<br /></div>
<div style="background-color: #f6f6f6; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;">
Once you add the WCF Service, two files will be added by the dialog. One is the service interface and another is the Service itself.</div>
<div style="background-color: #f6f6f6; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;">
<br /></div>
<h4 style="background-color: #f6f6f6; color: #aa0033; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;">
Modify Service Types</h4>
<div style="background-color: #f6f6f6; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;">
As <a href="http://msdn.microsoft.com/en-us/library/ff521586.aspx" style="color: #de7008;" target="_blank">defined in MSDN</a>, there are three different service types. Most of the time you need SOAP service. But if you need REST or ADO.NET Data service you can modify the service types by modifying the service factory as sown in the figure 2. The following table shows the three service types and their service factory name.</div>
<table border="1" style="background-color: #f6f6f6; color: black; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px; width: 711px;"><tbody>
<tr><th width="150">Service Type</th><th width="340">Service Factory</th><th width="219">Description</th></tr>
<tr><td width="150">SOAP service</td><td width="340"><span class="input">MultipleBaseAddressBasicHttpBindingServiceHostFactory</span></td><td width="219">Basic HTTP binding must be used, which creates endpoints for a service based on the basic HTTP binding.</td></tr>
<tr><td width="150">REST Service</td><td width="340"><span class="input">MultipleBaseAddressWebServiceHostFactory</span></td><td width="219">The service factory creates endpoints with Web bindings.</td></tr>
<tr><td width="150">ADO.NET Data Service</td><td width="340"><span class="input">MultipleBaseAddressDataServiceHostFactory</span></td><td width="219">A data service host factory can be used.</td></tr>
</tbody></table>
<div style="background-color: #f6f6f6; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;">
When you create service with CKSDev tool, the default service generated is SOAP service. If you want to change the service type, please modify the factory in .svc file as shown below:</div>
<div style="background-color: #f6f6f6; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;">
<a href="http://lh5.ggpht.com/_o7Td6KCGNTA/TXNNup7XHgI/AAAAAAAAAoQ/oMkgbW9-EEY/s1600-h/image%5B7%5D.png" style="color: #de7008;"><img alt="image" border="0" height="105" src="http://lh3.ggpht.com/_o7Td6KCGNTA/TXNNv4zsvPI/AAAAAAAAAoU/lYQMmyDAzIc/image_thumb%5B3%5D.png?imgmax=800" style="background-image: none; border-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="717" /></a></div>
<div style="background-color: #f6f6f6; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;">
<strong>Figure 2: Service Factory defined in SVC file.</strong></div>
<div style="background-color: #f6f6f6; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;">
<br /></div>
<h4 style="background-color: #f6f6f6; color: #aa0033; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;">
Deploy the Service</h4>
<div style="background-color: #f6f6f6; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;">
Once you are done with the service development, you are ready to deploy. But where you want to deploy the service? By default SharePoint service are kept in <strong>ISAPI</strong>directory. However, CKSDev deploy the service in <strong>ISAPI\ProjectNameSpace</strong> path as shown below:</div>
<div style="background-color: #f6f6f6; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;">
<a href="http://lh4.ggpht.com/_o7Td6KCGNTA/TXNNw9RpYjI/AAAAAAAAAoY/6JaoYwabH64/s1600-h/image%5B11%5D.png" style="color: #de7008;"><img alt="image" border="0" height="483" src="http://lh5.ggpht.com/_o7Td6KCGNTA/TXNNyK_Jd0I/AAAAAAAAAoc/Od6mBxYrgIk/image_thumb%5B5%5D.png?imgmax=800" style="background-image: none; border-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="579" /></a></div>
<div style="background-color: #f6f6f6; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;">
<strong>Figure 3: Service deployment location</strong></div>
<div style="background-color: #f6f6f6; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;">
<strong></strong></div>
<div style="background-color: #f6f6f6; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;">
Once you define the service deployment location as shown in the figure 3, you can deploy the solution.</div>
<div style="background-color: #f6f6f6; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;">
<br /></div>
<h4 style="background-color: #f6f6f6; color: #aa0033; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;">
Access the Custom WCF Service</h4>
<div style="background-color: #f6f6f6; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;">
After Service deploy, you need to use the service in another projects. First try to access the service in browser. <span style="color: red;">But remember you need to access the MEX endpoint either you will not get the service accessible in browser</span>. To access the MEX endpoint, you should add “<strong>/MEX</strong>” at the end of the service name as shown below:</div>
<div style="background-color: #f6f6f6; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;">
<a href="http://lh6.ggpht.com/_o7Td6KCGNTA/TXNNy0MPNyI/AAAAAAAAAog/awclecCVFZs/s1600-h/image%5B15%5D.png" style="color: #de7008;"><img alt="image" border="0" height="167" src="http://lh4.ggpht.com/_o7Td6KCGNTA/TXNNz9r90gI/AAAAAAAAAok/dw4mAZ_xX3g/image_thumb%5B7%5D.png?imgmax=800" style="background-image: none; border-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="539" /></a></div>
<div style="background-color: #f6f6f6; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;">
<strong>Figure 4: Access WCF Service MEX endpoint.</strong></div>
<div style="background-color: #f6f6f6; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;">
<br /></div>
<div style="background-color: #f6f6f6; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;">
Finally try to add the service reference in a project using Visual Studio’s ‘Add Service Reference’ dialog as shown below:</div>
<div style="background-color: #f6f6f6; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;">
<a href="http://lh6.ggpht.com/_o7Td6KCGNTA/TXNN0ljwVFI/AAAAAAAAAoo/B_8NNM6qb2M/s1600-h/image%5B19%5D.png" style="color: #de7008;"><img alt="image" border="0" height="440" src="http://lh3.ggpht.com/_o7Td6KCGNTA/TXNN2J5TVcI/AAAAAAAAAos/rmxqKlL8Wt4/image_thumb%5B9%5D.png?imgmax=800" style="background-image: none; border-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image" width="670" /></a></div>
<div style="background-color: #f6f6f6; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;">
<strong>Figure 5: Add Service Reference</strong></div>
<div style="background-color: #f6f6f6; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;">
<br /></div>
<div style="background-color: #f6f6f6; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;">
<br /></div>
<h4 style="background-color: #f6f6f6; color: #aa0033; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;">
Conclusion</h4>
<div style="background-color: #f6f6f6; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;">
So the steps described in this post are pretty simple:</div>
<ul style="background-color: #f6f6f6; font-family: 'Trebuchet MS', Trebuchet, Verdana, sans-serif; font-size: 13px;">
<li>Make sure you have downloaded and installed CKSDev Visual Studio extension.</li>
<li>Create a WCF Service (CKSDev) in the project. And if necessary, modify the service type</li>
<li>Deploy the solution and if necessary, change the deployment path.</li>
<li>Access the service MEX endpoint.</li>
</ul>
</div>
Unknownnoreply@blogger.com