<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://weblogs.asp.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Jan Tielens' Bloggings</title><link>http://weblogs.asp.net/jan/default.aspx</link><description>Joy, frustration, excitement, madness, aha's, headaches, ... codito ergo sum!</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP1 (Build: 20510.895)</generator><item><title>SharePoint Search-as-You-Type with jQuery</title><link>http://weblogs.asp.net/jan/archive/2009/07/02/sharepoint-search-as-you-type-with-jquery.aspx</link><pubDate>Thu, 02 Jul 2009 04:18:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7138579</guid><dc:creator>Jan Tielens</dc:creator><slash:comments>15</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/jan/rsscomments.aspx?PostID=7138579</wfw:commentRss><comments>http://weblogs.asp.net/jan/archive/2009/07/02/sharepoint-search-as-you-type-with-jquery.aspx#comments</comments><description>&lt;p&gt;Already since a long time I’ve been thinking about a web part that would search-as-you-type using SharePoint’s search engine. The idea behind this concept is that while you’re typing a query in the search box, asynchronously the query is already executed and the results are being displayed. Every time the query is changed, the results will be updated dynamically. This will allow users to see the results without going to the Search Results page, and even more: they don’t have to go back to alter their query. In such a scenario you want to avoid full page postbacks of course, so AJAX-techniques have to be used to accomplish this. A while back my first approach would be to make use of &lt;a href="http://ajax.asp.net" mce_href="http://ajax.asp.net"&gt;ASP.NET AJAX&lt;/a&gt; to build the necessary functionality in a web part for example. But during the last couple of weeks I’ve become a really big fan of using &lt;a href="http://jquery.com" mce_href="http://jquery.com"&gt;jQuery&lt;/a&gt; Javascript Library in SharePoint sites, and it happens to be that the search-as-you-type functionality can be created with the help of jQuery very easily. The beauty of this solution is that everything is happening on the client (in the web browser), so there is absolutely no requirement to deploy something to the server (nowadays this seems to be called ‘Assembly Free’).&lt;/p&gt;&lt;p&gt;Before you get too excited; it’s quite obvious that when you use this sample on a production server with lots of users, the SharePoint Search component can be hammered with lots of requests (which can be bad for the performance). So use it wisely! To minimize the impact on the performance of the server, the code will only execute a search query when (by default) three characters are entered, and while the user is still typing no queries are executed at all (there’s a configurable delay).&lt;/p&gt;&lt;p&gt;So how is all of this implemented? Well the idea is to display an HTML textbox in a Content Editor Web Part. Using the jQuery library, an eventhandler is added to that textbox for every keypress. When there are more than three characters (value is configurable) entered in the textbox, jQuery will make an asynchronous call to the Search web services (/_layouts/search.asmx). The resulting found items are displayed in an HTML div element which is positioned right below the textbox, on top of all other HTML elements. The user can select a result using the arrow keys, or by hovering the mouse over a result. When a result is selected by pressing the enter key or by clicking on it, the user is redirected to the corresponding page or document. You can see the code working in a web part in the following animated screenshot.&lt;/p&gt;&lt;p&gt;&lt;img src="http://storage.tielens.name/SharePointQuickSearchWebPartDemo.gif" mce_src="http://storage.tielens.name/SharePointQuickSearchWebPartDemo.gif"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;If you want to try this out yourself, just follow these steps. Once again, there is absolutely nothing you need to tweak and/or deploy on your server. You can do all of this through the web user interface of SharePoint.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Download the &lt;a href="http://storage.tielens.name/SharePointQuickSearchWebPartCode.zip" mce_href="http://storage.tielens.name/SharePointQuickSearchWebPartCode.zip"&gt;code file here&lt;/a&gt;.&lt;br&gt;&lt;/li&gt;&lt;li&gt;Add a new &lt;b&gt;Content Editor Web Part&lt;/b&gt;, which is available in SharePoint out-of-the-box, to a page.&lt;/li&gt;&lt;li&gt;Modify the newly added web part, use the &lt;b&gt;Source Editor&lt;/b&gt; button in the properties task pane to add the downloaded code.&lt;/li&gt;&lt;li&gt;Optionally you can give the web part a meaningful &lt;b&gt;Title &lt;/b&gt;in the &lt;b&gt;Appearance &lt;/b&gt;group (e.g. &lt;b&gt;Quick Search&lt;/b&gt;).&lt;br&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;When you check out the code, notice that the first line is a reference to the jQuery library, hosted on Google’s servers. If you plan to use this in production, I’d recommend you to host the jQuery library in your own environment so you have to update the reference with your own URL.&lt;/p&gt;&lt;p&gt;[Update July 3th 2009] If you are using a &lt;b&gt;non-English &lt;/b&gt;version of SharePoint, you need to change the script because by default the &lt;b&gt;All Sites&lt;/b&gt; Search Scope is being used. On top of the script look for the &lt;b&gt;quickSearchConfig &lt;/b&gt;variable and set the &lt;b&gt;scope &lt;/b&gt;appropriately (you can look up the name of your Search Scopes in Central Admin/SSP). Also notice that currently using WSS is not supported (the MOSS Search Engine is used)!&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="courier new,courier"&gt;var quickSearchConfig = {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; delay: 500,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; minCharacters: 3,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&lt;font color="#ff0000"&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; scope: "All Sites",&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/b&gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; numberOfResults: 15,&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; resultsAnimation: 200, &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; resultAnimation: 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;}; &lt;/font&gt;&lt;br&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7138579" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/jan/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://weblogs.asp.net/jan/archive/tags/jQuery/default.aspx">jQuery</category></item><item><title>My SharePoint Sessions at the Dutch DevDays</title><link>http://weblogs.asp.net/jan/archive/2009/05/26/my-sharepoint-sessions-at-the-dutch-devdays.aspx</link><pubDate>Tue, 26 May 2009 05:02:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7097843</guid><dc:creator>Jan Tielens</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/jan/rsscomments.aspx?PostID=7097843</wfw:commentRss><comments>http://weblogs.asp.net/jan/archive/2009/05/26/my-sharepoint-sessions-at-the-dutch-devdays.aspx#comments</comments><description>&lt;p&gt;Later on this week, on Friday May 29th, I will be presenting two sessions at the &lt;a href="http://www.devdays.nl" mce_href="http://www.devdays.nl"&gt;Developer Days in The Hague&lt;/a&gt; (The Netherlands). I'm pretty excited to be there, not only because it's always lots of fun to speak at this event; but there's lots of cool SharePoint 2007 stuff (IMHO) packed in my presentations:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Getting Started with .NET 3.5 in SharePoint (&lt;a href="http://www.devdays.nl/Sessies/Detail.aspx?code=OFF03JT" mce_href="http://www.devdays.nl/Sessies/Detail.aspx?code=OFF03JT"&gt;more info&lt;/a&gt;)&lt;/b&gt;&lt;br&gt;Abstract: &lt;i&gt;Since the introduction of SharePoint 2007 lots has changed in the .NET world: version 3.0 and 3.5 of the .NET Framework have been released, which include technologies such as WCF, Silverlight and Linq. This session will focus on how you can use these new technologies in your SharePoint 2007 projects, the do's and the don'ts, and the resulting advantages.&lt;/i&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Pimp Up Your SharePoint Site (&lt;a href="http://www.devdays.nl/Sessies/Detail.aspx?code=OFF05JT" mce_href="http://www.devdays.nl/Sessies/Detail.aspx?code=OFF05JT"&gt;more info&lt;/a&gt;)&lt;/b&gt;&lt;br&gt;Abstract: &lt;i&gt;SharePoint 2007 has a nice web user interface available for its users, but this out-of-the-box user interface can look quite old fashioned compared to new Web 2.0 web sites on the internet. This session will focus how you can give your existing SharePoint sites some extra punch by using Web 2.0 technologies such as AJAX, Silverlight and jQuery. And the good news is that it's not always required to implement very intrusive solutions; even small changes can make your SharePoint sites rise and shine again.&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;Btw, the DevDays are a great way to interact with the Dutch SharePoint community; which is very well represented: &lt;a href="http://feeds2.feedburner.com/MirjamsBlog" mce_href="http://feeds2.feedburner.com/MirjamsBlog"&gt;Mirjam van Olst&lt;/a&gt;, &lt;a href="http://blogs.code-counsel.net/Wouter/default.aspx" mce_href="http://blogs.code-counsel.net/Wouter/default.aspx"&gt;Wouter van Vugt&lt;/a&gt;, &lt;a href="http://www.tonstegeman.com/Blog/default.aspx" mce_href="http://www.tonstegeman.com/Blog/default.aspx"&gt;Ton Stegman&lt;/a&gt;, &lt;a href="http://blog.mastykarz.nl/" mce_href="http://blog.mastykarz.nl/"&gt;Waldek Mastykarz&lt;/a&gt;, and many, many more. So I hope to see you there and feel free to drop by to say hi! :-)&lt;br&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7097843" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/jan/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://weblogs.asp.net/jan/archive/tags/DevDays09/default.aspx">DevDays09</category></item><item><title>"The security validation for this page is invalid" when calling the SharePoint Web Services</title><link>http://weblogs.asp.net/jan/archive/2009/05/25/quot-the-security-validation-for-this-page-is-invalid-quot-when-calling-the-sharepoint-web-services.aspx</link><pubDate>Mon, 25 May 2009 04:34:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7097156</guid><dc:creator>Jan Tielens</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/jan/rsscomments.aspx?PostID=7097156</wfw:commentRss><comments>http://weblogs.asp.net/jan/archive/2009/05/25/quot-the-security-validation-for-this-page-is-invalid-quot-when-calling-the-sharepoint-web-services.aspx#comments</comments><description>&lt;p&gt;When working with the out-of-the-box SharePoint web services, it may have happened to you that the Web Service response contained the following exception embedded in the XML:&lt;/p&gt;&lt;p&gt;&lt;b&gt;Exception of type 'Microsoft.SharePoint.SoapServer.SoapServerException' was thrown.&lt;br&gt;The security validation for this page is invalid. Click Back in your Web browser, refresh the page, and try your operation again.&lt;br&gt;Error code: 0x8102006d&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Undoubtedly this exception is quite strange in the context of a web service call; there is no Back button you can click. But in my cases the exception was just plain wrong, the issue had nothing to do with security whatsoever. It turned out that when you make a web service call to the SharePoint web services, in some cases you need to set the &lt;b&gt;SOAPAction header&amp;nbsp; &lt;/b&gt;in the HTTP Request, in other cases it’s not necessary to do this (but it won’t do any bad if you do). When you consume web services from .NET code, you probably have Visual Studio generated proxies; they pass the correct header so you don’t need to do anything special. But if you construct your own HTTP Request to make the Web Service call, for example using Javascript and jQuery, you need to think about this. Check out following Javascript code for example, which creates a new List item by using the Lists.asmx web service (&lt;a href="http://weblogs.asp.net/jan/archive/2009/04/10/creating-list-items-with-jquery-and-the-sharepoint-web-services.aspx" mce_href="http://weblogs.asp.net/jan/archive/2009/04/10/creating-list-items-with-jquery-and-the-sharepoint-web-services.aspx"&gt;discussed in more detail in my previous post&lt;/a&gt;):&lt;br&gt;&lt;br&gt;&lt;font face="courier new,courier"&gt;var soapEnv =&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "&amp;lt;?xml version=\"1.0\" encoding=\"utf-8\"?&amp;gt; \&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" \&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" \&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"&amp;gt; \&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;soap:Body&amp;gt; \&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;UpdateListItems xmlns=\"http://schemas.microsoft.com/sharepoint/soap/\"&amp;gt; \&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;listName&amp;gt;Tasks&amp;lt;/listName&amp;gt; \&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;updates&amp;gt;&lt;i&gt; ... Updates XML&lt;/i&gt; ... &amp;lt;/updates&amp;gt; \&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/UpdateListItems&amp;gt; \&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/soap:Body&amp;gt; \&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/soap:Envelope&amp;gt;";&lt;br&gt;&lt;br&gt;$.ajax({&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; url: "http://yoursite/_vti_bin/lists.asmx",&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; type: "POST",&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dataType: "xml",&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; data: soapEnv,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; complete: processResult,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; contentType: "text/xml; charset=utf-8"&lt;br&gt;});&lt;br&gt;&lt;/font&gt;&lt;br&gt;This code will cause the &lt;b&gt;Security Validation &lt;/b&gt;exception, because the &lt;b&gt;SOAPAction Header &lt;/b&gt;is not correct. How do you know what value you need to set the SOAPAction Header to? Well, that’s very easy to figure out! Just navigate the the Lists.asmx web service (or UserGroup.asmx, Webs.asmx, Sites.asmx, SiteData.asmx or any Web Service you want to call of course) in your browser, and drill down to the Web Method you want to invoke. &lt;/p&gt;&lt;p&gt;&lt;img src="http://storage.tielens.name/SOAPActionSharePointWS.jpg" mce_src="http://storage.tielens.name/SOAPActionSharePointWS.jpg"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;As you can see, the required value of the &lt;b&gt;SOAPAction &lt;/b&gt;value is displayed in the generated web page for the Web Method, so you can just copy and paste it in your code. When using the &lt;a href="http://docs.jquery.com/Ajax/jQuery.ajax#options" mce_href="http://docs.jquery.com/Ajax/jQuery.ajax#options"&gt;jQuery ajax function&lt;/a&gt;, you can use the &lt;b&gt;beforeSend &lt;/b&gt;option so set additional Headers:&lt;/p&gt;&lt;p&gt;&lt;font face="courier new,courier"&gt;$.ajax({&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; url: wsURL,&lt;br&gt;&lt;font color="#cc0000"&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; beforeSend: function(xhr) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xhr.setRequestHeader("SOAPAction",&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "http://schemas.microsoft.com/sharepoint/soap/UpdateListItems");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; },&lt;/b&gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; type: "POST",&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dataType: "xml",&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; data: soapEnv,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; complete: processResult,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; contentType: "text/xml; charset=utf-8"&lt;br&gt;});&lt;/font&gt;&lt;/p&gt;&lt;p&gt;That’s it, now the Web Service call will work without the irrelevant Security Validation exception.&lt;br&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7097156" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/jan/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://weblogs.asp.net/jan/archive/tags/jQuery/default.aspx">jQuery</category></item><item><title>Determine the URL of SharePoint Web Services using jQuery/Javascript</title><link>http://weblogs.asp.net/jan/archive/2009/05/18/determine-the-url-of-sharepoint-web-services-using-jquery-javascript.aspx</link><pubDate>Mon, 18 May 2009 05:13:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7091843</guid><dc:creator>Jan Tielens</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/jan/rsscomments.aspx?PostID=7091843</wfw:commentRss><comments>http://weblogs.asp.net/jan/archive/2009/05/18/determine-the-url-of-sharepoint-web-services-using-jquery-javascript.aspx#comments</comments><description>&lt;p&gt;If you have read some of the previous posts on this blog related to using &lt;a href="http://jquery.com" mce_href="http://jquery.com"&gt;jQuery&lt;/a&gt; in SharePoint 2007 sites, you probably know that it’s perfectly possible to make call the out-of-the-box SharePoint web services by making use of Javascript running in the client’s browser. This opens up a huge stream of possibilities from which I already covered some of them on my blog. A very important piece of information you need if you want to make a call to a web service is of course the URL of the web service. Figuring out this URL seems to be more trivial than it actually is. My first idea was to use the URL of the page in which the call to a web service actually happened; e.g. you’ve got a Site Page accessible in SharePoint using the URL http://mysite/mypage.aspx, so you strip the /mypage.suffix and add /_vti_bin/lists.asmx (if you’d like to call the Lists web service of course). The thing is, this will only work if your mypage.aspx file is setting in the &lt;b&gt;Root Folder&lt;/b&gt; of your SharePoint site. For example: when you would put the Site Page in a Document Library instead, the URL of the page would be http://mysite/&lt;b&gt;Shared Documents&lt;/b&gt;/mypage.aspx, so you’d have to strip the /&lt;b&gt;Shared Documents&lt;/b&gt;/mypage.aspx and replace it with the Web Service suffix. This can get very complicated when you don’t know upfront in what kind of location the page will be stored (a Site Page in the Root Folder or a Document Library, an Application Page in _layouts, ...). It’s possible to write a bunch of code to figure that out, or you can make use of the following technique!&lt;br&gt;&lt;br&gt;A very easy and quick way to get a reference is to make use of the &lt;b&gt;alternate link &lt;/b&gt;SharePoint will but by default in the &lt;b&gt;head &lt;/b&gt;section of every rendered page:&lt;font face="courier new,courier"&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="courier new,courier"&gt;&amp;lt;html&amp;gt;&amp;lt;head&amp;gt;&lt;br&gt;...&lt;br&gt;&lt;font color="#cc0000"&gt;&lt;b&gt;&amp;lt;link type="text/xml" rel="alternate" href="http://weblogs.asp.net/_vti_bin/spsdisco.aspx" /&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;...&lt;br&gt;&amp;lt;/head&amp;gt;...&amp;lt;/html&amp;gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;The &lt;b&gt;href &lt;/b&gt;attribute will always point to a &lt;b&gt;server relative URL&lt;/b&gt; of the spsdisco.aspx page; which is located in the same folder as the out-of-the-box SharePoint Web Services (&lt;b&gt;/_vti_bin&lt;/b&gt;). Even if you are in a sub site, another site collection, an Application Page, ... the link elemen will always be there, and point to the correct URL. So the following piece of Javascript code, will retrieve the prefix you can use to make calls to the correct URL’s of the SharePoint Web Services:&lt;br&gt;&lt;br&gt;&lt;font face="courier new,courier"&gt;var spsdiscoUrl = $("head link[rel='alternate']:eq(0)").attr("href");&lt;br&gt;spWSUrlPrefix = spsdiscoUrl.substr(0, spsdiscoUrl.length - 13);&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;i&gt;(If you haven’t already noticed: I’m using the jQuery Javascript library.)&lt;/i&gt; The first line will get the value of the alternate link in the head of the HTML page; the second line will strip spsdisco.aspx (13 characters). Once you’ve got this prefix, you can use it to construct the URL of the SharePoint Web Services as follows:&lt;br&gt;&lt;br&gt;&lt;font face="courier new,courier"&gt;$.ajax({&lt;br&gt;&lt;font color="#cc0000"&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; url: spWSUrlPrefix + "lists.asmx",&lt;/b&gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; type: "POST",&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dataType: "xml",&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; data: soapEnvTasks,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; complete: processResultTasks,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; contentType: "text/xml; charset=\"utf-8\""&lt;br&gt;});&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;UPDATE &lt;/b&gt;As Jaap pointed out in the comments, SharePoint creates a Javascript variable called L_Menu_BaseUrl that contains the value needed determine the URL of the SharePoint Web Services. I haven't been able to test it myself, or to figure out who/what is responsible to declare this variable, but it looks promising! The only downside I see related to this approach would be that you rely on the OOB Javascript to be 1) loaded in the page and 2) to have executed before your code is started.&lt;br&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7091843" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/jan/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://weblogs.asp.net/jan/archive/tags/jQuery/default.aspx">jQuery</category></item><item><title>Using jQuery in SharePoint to Display Notifications for Open Tasks</title><link>http://weblogs.asp.net/jan/archive/2009/05/07/using-jquery-in-sharepoint-to-display-notifications-for-open-tasks.aspx</link><pubDate>Thu, 07 May 2009 04:11:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7075641</guid><dc:creator>Jan Tielens</dc:creator><slash:comments>13</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/jan/rsscomments.aspx?PostID=7075641</wfw:commentRss><comments>http://weblogs.asp.net/jan/archive/2009/05/07/using-jquery-in-sharepoint-to-display-notifications-for-open-tasks.aspx#comments</comments><description>&lt;p&gt;In &lt;a href="http://weblogs.asp.net/jan/archive/2009/05/06/querying-sharepoint-list-items-using-jquery.aspx" mce_href="http://weblogs.asp.net/jan/archive/2009/05/06/querying-sharepoint-list-items-using-jquery.aspx"&gt;my previous post&lt;/a&gt; I explained how you can make use of the Lists.asmx web service of SharePoint, to load list items by using the &lt;a href="http://jquery.com" mce_href="http://jquery.com"&gt;jQuery Javascript library&lt;/a&gt;. The example discussed in that post is simple and easy to understand, but very, very boring. Let’s try to do something useful with that technique: display fancy, unobtrusive notifications for open tasks, when a user visits a SharePoint site. The screenshot below shows the result, but it’s static. In real life the user would see the yellow boxes popping up, and after a couple of seconds they would disappear again (they don’t block the user interface at all).&lt;/p&gt;&lt;p&gt;&lt;img src="http://storage.tielens.name/TaskNotificationsWithjQuery.jpg" mce_src="http://storage.tielens.name/TaskNotificationsWithjQuery.jpg" width="593" height="375"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;To display these notifications I’ll use the excellent &lt;a href="http://www.stanlemon.net/projects/jgrowl.html" mce_href="http://www.stanlemon.net/projects/jgrowl.html"&gt;jGrowl extension for jQuery&lt;/a&gt;. So to make use of this demo, you’ll need to upload both the &lt;b&gt;jquery.jgrowl_minimized.js&lt;/b&gt; and &lt;b&gt;jquery.jgrowl.css&lt;/b&gt; files to SharePoint (check the download at the end of this post to get the files). The code below assumes that those two files, &lt;b&gt;and the jQuery library itself&lt;/b&gt;, are uploaded to a document library called &lt;b&gt;Shared Documents&lt;/b&gt; (which is created by default in a Team Site).&lt;/p&gt;&lt;p&gt;&lt;font face="courier new,courier"&gt;&amp;lt;script type="text/javascript" src="Shared Documents/jquery-1.3.2.min.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br&gt;&lt;br&gt;&amp;lt;script type="text/javascript" src="Shared Documents/jquery.jgrowl_minimized.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br&gt;&lt;br&gt;&amp;lt;link href="Shared Documents/jquery.jgrowl.css" rel="Stylesheet"&amp;gt;&amp;lt;/link&amp;gt;&lt;br&gt;&lt;br&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br&gt;&lt;br&gt;$(document).ready(function() { &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var soapEnv =&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "&amp;lt;soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'&amp;gt; \&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;soapenv:Body&amp;gt; \&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;GetListItems xmlns='http://schemas.microsoft.com/sharepoint/soap/'&amp;gt; \&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;listName&amp;gt;Tasks&amp;lt;/listName&amp;gt; \&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;viewFields&amp;gt; \&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ViewFields&amp;gt; \&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;FieldRef Name='Title' /&amp;gt; \&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;FieldRef Name='Body' /&amp;gt; \&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/ViewFields&amp;gt; \&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/viewFields&amp;gt; \&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;query&amp;gt; \&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Query&amp;gt;&amp;lt;Where&amp;gt; \&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;And&amp;gt; \&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Eq&amp;gt; \&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;FieldRef Name='AssignedTo' /&amp;gt; \&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Value Type='Integer'&amp;gt;&amp;lt;UserID Type='Integer' /&amp;gt;&amp;lt;/Value&amp;gt; \&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Eq&amp;gt; \&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Neq&amp;gt; \&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;FieldRef Name='Status' /&amp;gt; \&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Value Type='Choice'&amp;gt;Completed&amp;lt;/Value&amp;gt; \&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Neq&amp;gt; \&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/And&amp;gt; \&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Where&amp;gt; \&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Query&amp;gt;\&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/query&amp;gt; \&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/GetListItems&amp;gt; \&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/soapenv:Body&amp;gt; \&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/soapenv:Envelope&amp;gt;"; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $.ajax({&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; url: "_vti_bin/lists.asmx",&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; type: "POST",&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dataType: "xml",&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data: soapEnv,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; complete: processResult,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; contentType: "text/xml; charset=\"utf-8\""&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;br&gt;});&lt;br&gt;&lt;br&gt;function processResult(xData, status) {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $.jGrowl.defaults.position = "bottom-right";&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $.jGrowl.defaults.life = 10000;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var firstMessage = true;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $(xData.responseXML).find("z\\:row").each(function() {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(firstMessage)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; firstMessage = false;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $.jGrowl("&amp;lt;div class='ms-vb'&amp;gt;&amp;lt;b&amp;gt;You have open tasks on this site.&amp;lt;/b&amp;gt;&amp;lt;div&amp;gt;",&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp; &amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; life: 5000&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var messageHtml = &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "&amp;lt;div class='ms-vb'&amp;gt;" + &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "&amp;lt;a href='Lists/Tasks/DispForm.aspx?ID=" + $(this).attr("ows_ID") &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; + "&amp;amp;Source=" + window.location + "'&amp;gt;" +&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "&amp;lt;img src='/_layouts/images/ITTASK.GIF' border='0' align='middle'&amp;gt; " + &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $(this).attr("ows_Title") + "&amp;lt;/a&amp;gt;" +&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "&amp;lt;br/&amp;gt;" + $(this).attr("ows_Body") +&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "&amp;lt;/div&amp;gt;";&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $.jGrowl(messageHtml);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;br&gt;}&lt;br&gt;&amp;lt;/script&amp;gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;Since we’d like to display those notifications when a user visits the site, we need to put a &lt;b&gt;Content Editor Web Part&lt;/b&gt; of the home page (typically /default.aspx). In this content editor web part, copy and paste the Javascript code from above. In this code once again, first the SOAP envelope message is constructed. Notice that both the &lt;b&gt;Title &lt;/b&gt;and &lt;b&gt;Description &lt;/b&gt;fields are requested (the internal name of the Description field is &lt;b&gt;Body&lt;/b&gt;). In the &lt;b&gt;query&lt;/b&gt; element two conditions are set; the &lt;b&gt;AssignedTo&lt;/b&gt; field should be equal to the currently logged on user, and the &lt;b&gt;Status&lt;/b&gt; field can’t be equal to &lt;b&gt;Completed&lt;/b&gt;. The message is POST-ed to the Lists.asmx web service by using jQuery’s &lt;b&gt;ajax&lt;/b&gt; function.&lt;/p&gt;&lt;p&gt;The response of the web service call is processed in the &lt;b&gt;processResult&lt;/b&gt; function. For every &lt;b&gt;row&lt;/b&gt; element in the result, the &lt;b&gt;jGrowl&lt;/b&gt; function is called to display a notification. The contents of such a notification are a small HTLM string containing a link to the task, and the body of the task. So that’s the story of how a small piece of Javascript code can have a pretty nice result in SharePoint! :-)&lt;/p&gt;&lt;p&gt;You can download the &lt;a href="http://storage.tielens.name/TaskNotificationsWithjQuery.zip" mce_href="http://storage.tielens.name/TaskNotificationsWithjQuery.zip"&gt;source code for this demo here&lt;/a&gt;. The zip file contains the necessary libraries and CSS files (which you have to upload to the Shared Documents document library for example) and the code you have to copy/past in a Content Editor Web Part (using the Source Editor button!). Additionally you can also find an exported web part (.dwp file) in the zip file, which you can very easily import or add to the web part gallery of a site (so you don’t have to copy/past the code yourself).&lt;br&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7075641" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/jan/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>Querying SharePoint List Items using jQuery</title><link>http://weblogs.asp.net/jan/archive/2009/05/06/querying-sharepoint-list-items-using-jquery.aspx</link><pubDate>Wed, 06 May 2009 17:35:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7074973</guid><dc:creator>Jan Tielens</dc:creator><slash:comments>18</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/jan/rsscomments.aspx?PostID=7074973</wfw:commentRss><comments>http://weblogs.asp.net/jan/archive/2009/05/06/querying-sharepoint-list-items-using-jquery.aspx#comments</comments><description>&lt;P mce_keep="true"&gt;Due to popular demand I’ve created another sample of how you can make use of the &lt;A class="" href="http://jquery.com/" mce_href="http://jquery.com"&gt;jQuery&lt;/A&gt; Javascript library in your SharePoint sites. This example uses SharePoint’s &lt;STRONG&gt;Lists.asmx &lt;/STRONG&gt;web service to retrieve all the list items of a specific list. In my previous posts I showed how you could use jQuery in SharePoint Site Pages (regular .aspx pages uploaded to a Document Library), so let’s do something different now; let’s use jQuery in a plain &lt;STRONG&gt;Content Editor Web Part&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P mce_keep="true"&gt;To try this sample navigate to the &lt;STRONG&gt;home page&amp;nbsp;&lt;/STRONG&gt;(usually /default.aspx)&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;of a SharePoint site that has a list with some list items in it, in my code I’ll use the &lt;STRONG&gt;Task &lt;/STRONG&gt;list of a plain vanilla Team Site. Switch the page to Edit mode (&lt;STRONG&gt;Site Actions&lt;/STRONG&gt;, &lt;STRONG&gt;Edit Page&lt;/STRONG&gt;), and add a new instance of the &lt;STRONG&gt;Content Editor Web Part &lt;/STRONG&gt;to the page. In the properties of that web part, copy and paste the following code using the &lt;STRONG&gt;Source Editor &lt;/STRONG&gt;button.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;FONT face="courier new,courier"&gt;&amp;lt;script type="text/javascript" src="&lt;/FONT&gt;&lt;FONT face="courier new,courier"&gt;http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js"&amp;gt;&amp;lt;/script&lt;/FONT&gt;&lt;FONT face="courier new,courier"&gt;&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;FONT face="courier new,courier"&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $(document).ready(function() {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var soapEnv =&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "&amp;lt;soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'&amp;gt; \&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;soapenv:Body&amp;gt; \&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;GetListItems xmlns='http://schemas.microsoft.com/sharepoint/soap/'&amp;gt; \&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;listName&amp;gt;Tasks&amp;lt;/listName&amp;gt; \&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;viewFields&amp;gt; \&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ViewFields&amp;gt; \&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;FieldRef Name='Title' /&amp;gt; \&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/ViewFields&amp;gt; \&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/viewFields&amp;gt; \&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/GetListItems&amp;gt; \&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/soapenv:Body&amp;gt; \&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/soapenv:Envelope&amp;gt;";&lt;/FONT&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;FONT face="courier new,courier"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $.ajax({&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; url: "_vti_bin/lists.asmx",&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; type: "POST",&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dataType: "xml",&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data: soapEnv,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; complete: processResult,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; contentType: "text/xml; charset=\"utf-8\""&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;/FONT&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;FONT face="courier new,courier"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; function processResult(xData, status) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $(xData.responseXML).find("z\\:row").each(function() {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var liHtml = "&amp;lt;li&amp;gt;" + $(this).attr("ows_Title") + "&amp;lt;/li&amp;gt;";&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $("#tasksUL").append(liHtml);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;lt;/script&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;FONT face="courier new,courier"&gt;&amp;lt;ul id="tasksUL"/&amp;gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;On the first line the jQuery library is loaded from googlecode.com. To make this your, your client browser needs to have&amp;nbsp;Internet access of course. Alternativly you can&amp;nbsp;host the jQuery library&amp;nbsp;yourself (see my previous examples) or&amp;nbsp;even load the jQuery library in every page using the &lt;A class="" href="http://codeplex.com/smarttools" mce_href="http://codeplex.com/smarttools"&gt;SmartTools.jQuery component&lt;/A&gt;. After that a function is attached to the jQuery document &lt;STRONG&gt;ready &lt;/STRONG&gt;event. In this function the SOAP envelope message is constructed (the &lt;STRONG&gt;soapEnv &lt;/STRONG&gt;variable). If you’d like to see the code getting list items from another list than the Task list, you’d have to change the &lt;STRONG&gt;listName element&lt;/STRONG&gt;. The second part POST-ing the SOAP envelope to the web service by using jQuery’s &lt;STRONG&gt;ajax &lt;/STRONG&gt;function. When the web service comes back with the result, the &lt;STRONG&gt;processResult &lt;/STRONG&gt;method is called. In this function a loop is created over every row element (in the namespace z). Notice that "&lt;STRONG&gt;z:row&lt;/STRONG&gt;"&lt;STRONG&gt; &lt;/STRONG&gt;escapes in Javascript to "&lt;STRONG&gt;z\\:row&lt;/STRONG&gt;". For every &lt;STRONG&gt;row &lt;/STRONG&gt;element a new &lt;STRONG&gt;li &lt;/STRONG&gt;HTML element is added to the &lt;STRONG&gt;ul &lt;/STRONG&gt;element with ID &lt;STRONG&gt;tasksUL&lt;/STRONG&gt;. And that’s it! You can see the result in the screenshot below.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;IMG src="http://storage.tielens.name/ShowTaskListItemsWithjQuery.jpg" mce_src="http://storage.tielens.name/ShowTaskListItemsWithjQuery.jpg"&gt;&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7074973" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/jan/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>Creating List Items with jQuery and the SharePoint Web Services</title><link>http://weblogs.asp.net/jan/archive/2009/04/10/creating-list-items-with-jquery-and-the-sharepoint-web-services.aspx</link><pubDate>Fri, 10 Apr 2009 18:48:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7040957</guid><dc:creator>Jan Tielens</dc:creator><slash:comments>10</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/jan/rsscomments.aspx?PostID=7040957</wfw:commentRss><comments>http://weblogs.asp.net/jan/archive/2009/04/10/creating-list-items-with-jquery-and-the-sharepoint-web-services.aspx#comments</comments><description>&lt;P mce_keep="true"&gt;In &lt;A class="" href="http://weblogs.asp.net/jan/archive/2009/04/09/calling-the-sharepoint-web-services-with-jquery.aspx" mce_href="http://weblogs.asp.net/jan/archive/2009/04/09/calling-the-sharepoint-web-services-with-jquery.aspx"&gt;my previous post&lt;/A&gt; I showed how to make a call to SharePoint’s Lists.asmx web service with the &lt;A class="" href="http://jquery.com/" mce_href="http://jquery.com"&gt;jQuery library &lt;/A&gt;to retrieve information about the Lists and Document Libraries that are available on a specific SharePoint Site. In the comments of that post, one of the readers asked if it would be possible to create a new item in a List using the same technique. Of course this is possible, you just need to make use of the &lt;STRONG&gt;UpdateListItems &lt;/STRONG&gt;web method (yeah, the name of that method is not very intuitive). Here is a quick example!&lt;/P&gt;
&lt;P mce_keep="true"&gt;First let’s create the UI (in this example&amp;nbsp;I'll use&amp;nbsp;a basic Site Page) to allow the user to enter a Title for the new task, and a button to do the action.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;FONT face="courier new,courier"&gt;&amp;lt;asp:Content runat="server" ContentPlaceHolderID="PlaceHolderMain"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;p&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Task Title: &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input id="newTaskTitle" type="text" /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input id="newTaskButton" type="button" value="Create Task" /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/p&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="courier new,courier"&gt;&amp;lt;/asp:Content&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Next let’s create a Javascript function that will create a new item in a Task list. In the Javascript function I’m&amp;nbsp;declaring two variables that will contain the XML which will be sent to the SharePoint Lists.asmx web service. The first variable (I called it &lt;STRONG&gt;batch&lt;/STRONG&gt;) contains the CAML to create a new item. For simplicity the CAML only provides a value for the &lt;STRONG&gt;Title &lt;/STRONG&gt;field, add more fields if you’d like. The second variable (called &lt;STRONG&gt;soapEnv&lt;/STRONG&gt;) is the SOAP Envelope XML which wraps the batch XML. Notice that in the SOAP Envelope the name of the list is mentioned in which we’re going to create a new item (in this case the &lt;STRONG&gt;Task &lt;/STRONG&gt;list). Finally the jQuery &lt;STRONG&gt;ajax &lt;/STRONG&gt;function is used to POST the data to the Lists.asmx web service. (If you test this code make sure you update the &lt;STRONG&gt;url &lt;/STRONG&gt;option with the URL of your site). &lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;FONT face="courier new,courier"&gt;function CreateNewItem(title) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var batch =&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "&amp;lt;Batch OnError=\"Continue\"&amp;gt; \&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Method ID=\"1\" Cmd=\"New\"&amp;gt; \&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Field Name=\"Title\"&amp;gt;" + title + "&amp;lt;/Field&amp;gt; \&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Method&amp;gt; \&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Batch&amp;gt;";&lt;/FONT&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;FONT face="courier new,courier"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var soapEnv =&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "&amp;lt;?xml version=\"1.0\" encoding=\"utf-8\"?&amp;gt; \&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;soap:Envelope xmlns:xsi=\"&lt;/FONT&gt;&lt;FONT face="courier new,courier"&gt;http://www.w3.org/2001/XMLSchema-instance\&lt;/FONT&gt;&lt;FONT face="courier new,courier"&gt;" \&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xmlns:xsd=\"&lt;/FONT&gt;&lt;FONT face="courier new,courier"&gt;http://www.w3.org/2001/XMLSchema\&lt;/FONT&gt;&lt;FONT face="courier new,courier"&gt;" \&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xmlns:soap=\"&lt;/FONT&gt;&lt;FONT face="courier new,courier"&gt;http://schemas.xmlsoap.org/soap/envelope/\&lt;/FONT&gt;&lt;FONT face="courier new,courier"&gt;"&amp;gt; \&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;soap:Body&amp;gt; \&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;UpdateListItems xmlns=\"&lt;/FONT&gt;&lt;FONT face="courier new,courier"&gt;http://schemas.microsoft.com/sharepoint/soap/\&lt;/FONT&gt;&lt;FONT face="courier new,courier"&gt;"&amp;gt; \&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;listName&amp;gt;Tasks&amp;lt;/listName&amp;gt; \&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;updates&amp;gt; \&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; " + batch + "&amp;lt;/updates&amp;gt; \&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/UpdateListItems&amp;gt; \&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/soap:Body&amp;gt; \&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/soap:Envelope&amp;gt;";&lt;/FONT&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;FONT face="courier new,courier"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $.ajax({&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; url: "&lt;/FONT&gt;&lt;FONT face="courier new,courier"&gt;http://yoursite/_vti_bin/lists.asmx"&lt;/FONT&gt;&lt;FONT face="courier new,courier"&gt;,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; beforeSend: function(xhr) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xhr.setRequestHeader("SOAPAction",&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "&lt;/FONT&gt;&lt;FONT face="courier new,courier"&gt;http://schemas.microsoft.com/sharepoint/soap/UpdateListItems&lt;/FONT&gt;&lt;FONT face="courier new,courier"&gt;");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; },&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; type: "POST",&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dataType: "xml",&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data: soapEnv,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; complete: processResult,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; contentType: "text/xml; charset=utf-8"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;BR&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;The jQuery ajax function call has a complete option which points to a function, in this function you can process the result as follows:&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;FONT face="courier new,courier"&gt;function processResult(xData, status) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; alert(status);&lt;BR&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;The &lt;STRONG&gt;status &lt;/STRONG&gt;parameter is a string which can be for example &lt;STRONG&gt;success &lt;/STRONG&gt;or &lt;STRONG&gt;error&lt;/STRONG&gt;. Finally in the &lt;STRONG&gt;ready &lt;/STRONG&gt;event of the &lt;STRONG&gt;document&lt;/STRONG&gt;, we'll hook up the &lt;STRONG&gt;click &lt;/STRONG&gt;event of the button so the &lt;STRONG&gt;CreateNewItem &lt;/STRONG&gt;function is called, with the value of the textbox as the parameter.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;FONT face="courier new,courier"&gt;$(document).ready(function() {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $("#newTaskButton").click(function() {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CreateNewItem($("#newTaskTitle").val());&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;BR&gt;});&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;That’s it! If you put all the code in a simple Site Page, upload the page to a Document Library in a SharePoint site, and now you can create Task list items by only using Javascript! The sample code can be &lt;A class="" href="http://storage.tielens.name/CreateItemWithjQuery.zip" mce_href="http://storage.tielens.name/CreateItemWithjQuery.zip"&gt;downloaded in the following zip file&lt;/A&gt;. The zip file also contains the jQuery library which you can upload to the same Document Library if it isn't&amp;nbsp;already loaded with the help of the &lt;A class="" href="http://codeplex.com/smarttools" mce_href="http://codeplex.com/smarttools"&gt;SmartTools.jQuery&lt;/A&gt; component for example.&lt;BR&gt;&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7040957" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/jan/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>Calling the SharePoint Web Services with jQuery</title><link>http://weblogs.asp.net/jan/archive/2009/04/09/calling-the-sharepoint-web-services-with-jquery.aspx</link><pubDate>Thu, 09 Apr 2009 11:28:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7036687</guid><dc:creator>Jan Tielens</dc:creator><slash:comments>13</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/jan/rsscomments.aspx?PostID=7036687</wfw:commentRss><comments>http://weblogs.asp.net/jan/archive/2009/04/09/calling-the-sharepoint-web-services-with-jquery.aspx#comments</comments><description>&lt;P mce_keep="true"&gt;If you read this blog you probably know that besides the web user interface, SharePoint also exposes some interfaces which you can use from code: the SharePoint object model and the SharePoint web services. The object model of SharePoint can only be used by code/applications that are running on a SharePoint server in your Server Farm, so you can’t use the object model on client machines. The SharePoint web services can be used of course across a network boundary, that’s what they are built for! In this post I’m going to show you how you can access the out-of-the-box SharePoint web services by making use of the &lt;A href="http://jquery.com/" mce_href="http://jquery.com/"&gt;jQuery Javascript library&lt;/A&gt;. First let’s see what you can do with this technique: download &lt;A href="http://storage.tielens.name/jQuerySPWebServicesDemo.zip" mce_href="http://storage.tielens.name/jQuerySPWebServicesDemo.zip"&gt;this zip file&lt;/A&gt; that contains an ASPX page (a basic Site Page without any code behind), and the jQuery Javascript library (in case you don’t have it already). Upload the two individual files (not the zip file) in the root of a Document Library&amp;nbsp;in any of your SharePoint sites. You can do this by making use of the web user interface; you don’t have to touch anything on the server itself. When done, just click on the link of the uploaded ASPX and you’ll see following page:&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;IMG src="http://storage.tielens.name/sharepointwsjquery1.jpg" mce_src="http://storage.tielens.name/sharepointwsjquery1.jpg"&gt;&lt;BR&gt;&amp;nbsp;&lt;BR&gt;Probably you’re not really impressed but think about the fact that this page is just an ASPX file you’ve uploaded through the web user interface, there is absolutely no code behind involved (which would have been blocked by SharePoint’s default security settings). The details of the SharePoint lists are loaded by making use of Javascript code that calls the web SharePoint &lt;STRONG&gt;lists.asmx web service&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P mce_keep="true"&gt;So how do you call a SharePoint web service in Javascript code; well you can use the &lt;A class="" href="http://www.w3.org/TR/XMLHttpRequest/" mce_href="http://www.w3.org/TR/XMLHttpRequest/"&gt;XmlHttpRequest object&lt;/A&gt; and write lots of boring code, or you can make use of a Javascript library that wraps this XmlHttpRequest object and exposes a nice and easy interface. In this demo I’ll use the jQuery Javascript library, so the first thing that you’ll need to do is to make sure the page is loading that library:&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;FONT face="courier new,courier"&gt;&amp;lt;script type="text/javascript" src="jquery-1.3.2.min.js" mce_src="jquery-1.3.2.min.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;If you already configured your SharePoint site so the jQuery library is loaded (for example by making use of the &lt;A class="" href="http://codeplex.com/smarttools" mce_href="http://codeplex.com/smarttools"&gt;SmartTools.jQuery component&lt;/A&gt;), you can skip this line of course.&amp;nbsp; &lt;/P&gt;
&lt;P mce_keep="true"&gt;When the page is loaded, the Lists web service (e.g. http://yoursite/_vti_bin/lists.asmx) of SharePoint needs to be called; this can be accomplished by making use of the &lt;A class="" href="http://docs.jquery.com/Ajax/jQuery.ajax#options" mce_href="http://docs.jquery.com/Ajax/jQuery.ajax#options"&gt;jQuery’s ajax method&lt;/A&gt;. This method can post the necessary SOAP envelope message to the Lists web service. The XML of the SOAP envelope can easily be copied from the .NET web service test form of the desired web method (e.g. http://yoursite/_vti_bin/lists.asmx?op=GetListCollection). In the code below, a call to the GetListCollection web method is made when the page is loaded. The &lt;STRONG&gt;complete &lt;/STRONG&gt;parameter of the &lt;STRONG&gt;ajax &lt;/STRONG&gt;method is actually a pointer to another Javascript function (which we’ll implement later on) that will be called asynchronously when the web service call is done.&amp;nbsp; Don’t forget to update the url parameter with your SharePoint site’s URL!&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;FONT face="courier new,courier"&gt;$(document).ready(function() {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var soapEnv =&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "&amp;lt;soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'&amp;gt; \&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;soapenv:Body&amp;gt; \&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;GetListCollection xmlns='http://schemas.microsoft.com/sharepoint/soap/'&amp;gt; \&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/GetListCollection&amp;gt; \&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/soapenv:Body&amp;gt; \&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/soapenv:Envelope&amp;gt;";&lt;/FONT&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;FONT face="courier new,courier"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $.ajax({&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; url: "&lt;/FONT&gt;&lt;FONT face="courier new,courier"&gt;http://yoursite/_vti_bin/lists.asmx&lt;/FONT&gt;&lt;FONT face="courier new,courier"&gt;",&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; type: "POST",&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dataType: "xml",&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data: soapEnv,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; complete: processResult,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; contentType: "text/xml; charset=\"utf-8\""&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;BR&gt;});&lt;/FONT&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;As I already mentioned, the &lt;STRONG&gt;processResult&lt;/STRONG&gt; function is called when the response XML of the web service call is received. In this method a loop is created which will iterate over every &lt;STRONG&gt;List &lt;/STRONG&gt;element of the response XML. For every &lt;STRONG&gt;List &lt;/STRONG&gt;element a &lt;FONT face="courier new,courier"&gt;&amp;lt;li&amp;gt;&amp;lt;/li&amp;gt;&lt;/FONT&gt; element is added to the element with the &lt;STRONG&gt;ID &lt;/STRONG&gt;attribute set to data.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;FONT face="courier new,courier"&gt;function processResult(xData, status) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $(xData.responseXML).find("List").each(function() {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $("#data").append("&amp;lt;li&amp;gt;" + $(this).attr("Title") + "&amp;lt;/li&amp;gt;");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;BR&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;This data element is the actual &lt;FONT face="courier new,courier"&gt;&amp;lt;ul&amp;gt;&amp;lt;/ul&amp;gt;&lt;/FONT&gt; list in HTML:&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;FONT face="courier new,courier"&gt;&amp;lt;ul id="data"&amp;gt;&amp;lt;/ul&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;When you put everything together in a Site Page, this is the result:&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;IMG src="http://storage.tielens.name/sharepointwsjquery2.jpg" mce_src="http://storage.tielens.name/sharepointwsjquery2.jpg"&gt;&lt;BR&gt;&amp;nbsp;&lt;BR&gt;In the zip file mentioned in the beginning of this post, you can find an extended version of the &lt;STRONG&gt;processResult &lt;/STRONG&gt;function which will display some additional metadata for every list (like the ID, ItemCount etc). The entire contents of basic version of the Site Page built in this post goes as follows:&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;FONT face="courier new,courier"&gt;&amp;lt;%@ Page Language="C#" MasterPageFile="~masterurl/default.master" %&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;FONT face="courier new,courier"&gt;&amp;lt;asp:Content runat="server" ContentPlaceHolderID="PlaceHolderAdditionalPageHead"&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;FONT face="courier new,courier"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;script type="text/javascript" src="jquery-1.3.2.min.js" mce_src="jquery-1.3.2.min.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;FONT face="courier new,courier"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;script type="text/javascript"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $(document).ready(function() {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var soapEnv =&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "&amp;lt;soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'&amp;gt; \&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;soapenv:Body&amp;gt; \&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;GetListCollection xmlns='http://schemas.microsoft.com/sharepoint/soap/'&amp;gt; \&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/GetListCollection&amp;gt; \&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/soapenv:Body&amp;gt; \&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/soapenv:Envelope&amp;gt;";&lt;/FONT&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;FONT face="courier new,courier"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $.ajax({&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; url: "&lt;/FONT&gt;&lt;FONT face="courier new,courier"&gt;http://yoursite/_vti_bin/lists.asmx&lt;/FONT&gt;&lt;FONT face="courier new,courier"&gt;",&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; type: "POST",&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dataType: "xml",&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data: soapEnv,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; complete: processResult,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; contentType: "text/xml; charset=\"utf-8\""&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;/FONT&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;FONT face="courier new,courier"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;/FONT&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;FONT face="courier new,courier"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; function processResult(xData, status) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $(xData.responseXML).find("List").each(function() {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $("#data").append("&amp;lt;li&amp;gt;" + $(this).attr("Title") + "&amp;lt;/li&amp;gt;");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/script&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;FONT face="courier new,courier"&gt;&amp;lt;/asp:Content&amp;gt;&lt;BR&gt;&amp;lt;asp:Content runat="server" ContentPlaceHolderID="PlaceHolderMain"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ul id="data"&amp;gt;&amp;lt;/ul&amp;gt;&lt;BR&gt;&amp;lt;/asp:Content&amp;gt;&lt;BR&gt;&amp;lt;asp:Content runat="server" ContentPlaceHolderID="PlaceHolderPageTitleInTitleArea"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; List Details&lt;BR&gt;&amp;lt;/asp:Content&amp;gt;&lt;BR&gt;&amp;lt;asp:Content runat="server" ContentPlaceHolderID="PlaceHolderPageTitle"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; List Details&lt;BR&gt;&amp;lt;/asp:Content&amp;gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7036687" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/jan/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>The "Jan Tielens" SharePoint Challenge by Christophe</title><link>http://weblogs.asp.net/jan/archive/2009/04/02/the-quot-jan-tielens-quot-sharepoint-challenge-by-christophe.aspx</link><pubDate>Thu, 02 Apr 2009 04:19:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7022363</guid><dc:creator>Jan Tielens</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/jan/rsscomments.aspx?PostID=7022363</wfw:commentRss><comments>http://weblogs.asp.net/jan/archive/2009/04/02/the-quot-jan-tielens-quot-sharepoint-challenge-by-christophe.aspx#comments</comments><description>&lt;p&gt;My last post about &lt;a href="http://weblogs.asp.net/jan/archive/2009/03/30/breaking-the-wss-top-link-bar-in-two-with-jquery.aspx" mce_href="http://weblogs.asp.net/jan/archive/2009/03/30/breaking-the-wss-top-link-bar-in-two-with-jquery.aspx"&gt;splitting the Top Navigation Bar of a WSS site in two&lt;/a&gt; with the help of &lt;a href="http://jquery.com" mce_href="http://jquery.com"&gt;jQuery&lt;/a&gt;, triggered a little discussion (in a good way) in the &lt;a href="http://weblogs.asp.net/jan/archive/2009/03/30/breaking-the-wss-top-link-bar-in-two-with-jquery.aspx#comments" mce_href="http://weblogs.asp.net/jan/archive/2009/03/30/breaking-the-wss-top-link-bar-in-two-with-jquery.aspx#comments"&gt;comments&lt;/a&gt;. As a result Christophe from the &lt;a href="http://pathtosharepoint.wordpress.com" mce_href="http://pathtosharepoint.wordpress.com"&gt;Path to SharePoint blog&lt;/a&gt; &lt;a href="http://pathtosharepoint.wordpress.com/2009/04/02/splitting-the-top-navigation-in-two/" mce_href="http://pathtosharepoint.wordpress.com/2009/04/02/splitting-the-top-navigation-in-two/"&gt;wrote some Javascript&lt;/a&gt; to accomplish the same thing, without using jQuery at all. Now Christophe started the "Jan Tielens Challenge" &lt;a href="http://pathtosharepoint.wordpress.com/2009/04/02/splitting-the-top-navigation-in-two/" mce_href="http://pathtosharepoint.wordpress.com/2009/04/02/splitting-the-top-navigation-in-two/"&gt;on his blog&lt;/a&gt;: &lt;i&gt;"I have already talked about Jan in a previous post. End users who visit his blog can certainly feel like a kid in front of a bakery display: so many goodies that are out of reach!&lt;br&gt;&lt;b&gt;So here is my proposal: if you find on Jan’s site a tool you’d like to have as an end user, send me the challenge!&lt;/b&gt; If a topic gets enough votes, I’ll work on a solution that can be implemented on the client side."&lt;/i&gt;&lt;/p&gt;&lt;p&gt;So, make sure you send Christophe all your challenges. Good luck Christophe! :-) &lt;br&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7022363" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/jan/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>Breaking the WSS Top Link Bar in two with jQuery</title><link>http://weblogs.asp.net/jan/archive/2009/03/30/breaking-the-wss-top-link-bar-in-two-with-jquery.aspx</link><pubDate>Mon, 30 Mar 2009 19:50:43 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7012369</guid><dc:creator>Jan Tielens</dc:creator><slash:comments>17</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/jan/rsscomments.aspx?PostID=7012369</wfw:commentRss><comments>http://weblogs.asp.net/jan/archive/2009/03/30/breaking-the-wss-top-link-bar-in-two-with-jquery.aspx#comments</comments><description>&lt;p&gt;&lt;/p&gt;  &lt;p&gt;Since I got a fan of the &lt;a href="http://www.jquery.com"&gt;jQuery Javascript library&lt;/a&gt;, usually I can’t resist showing off the power of this library in my SharePoint development courses at &lt;a href="http://www.u2u.be"&gt;U2U&lt;/a&gt;. For example two weeks ago I was in sunny Cyprus talking about SharePoint, ASP.NET AJAX and jQuery and I told my students something in the line of “with jQuery you can change pretty much anything in the SharePoint UI by just making use of Javascript”. Promptly one of my students asked me if I could show how to break the Top Link Bar of a SharePoint site into two parts. I really like challenges in my SharePoint courses, but I couldn’t conquer this challenge on the spot, it took me a couple of hours in my hotel room to get this to work. Now that I’ve got some time to polish the code a little bit, I want to share the code with you! :-)&lt;/p&gt;  &lt;p&gt;First, let’s talk about the issue that this little jQuery script is going to solve: you probably know if you create subsites in SharePoint sites, those subsites are shown (by default) in the Top Link Bar of the parent site. So the more subsite you’ve got the more items this menu is showing. Life is all good until there are too many items to show in the menu so it’s get too big to fit on the screen. You won’t get an error or something like that of course, but the browser will give the menu the space it needs by adding horizontal scrollbar the page. The screenshot below illustrates this behavior: the top link bar has too many menu items making it pretty hard to access for example the Site Actions menu (you need to scroll to the right).&lt;/p&gt;  &lt;p&gt;&lt;img src="http://storage.tielens.name/splitwssmenu1.jpg" /&gt;&lt;/p&gt;  &lt;p&gt;So how can this be solved with the help of jQuery? Well besides a very powerful &lt;a href="http://docs.jquery.com/Selectors"&gt;DOM Selectors API&lt;/a&gt;, the jQuery library also has a &lt;a href="http://docs.jquery.com/Manipulation"&gt;DOM Maniplation API&lt;/a&gt;. This Manipulation API can change the HTML that’s rendered in the browser, by adding elements, removing elements etc. The idea is to write a Javascript function that adds a second Top Link Bar to the page’s DOM. The easiest way to accomplish this is to just copy the existing Top Link Bar entirely:&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;$(&amp;quot;#zz1_TopNavigationMenu&amp;quot;).clone(true).insertAfter($(&amp;quot;#zz1_TopNavigationMenu&amp;quot;)).attr(&amp;quot;id&amp;quot;, &amp;quot;zz1_TopNavigationMenuCopy&amp;quot;);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;This jQuery script will:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;font size="2" face="Courier New"&gt;$(&amp;quot;#zz1_TopNavigationMenu&amp;quot;) &lt;/font&gt;      &lt;br /&gt;select the element with ID &lt;strong&gt;zz1_TopNavigationMenu&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;&lt;font size="2" face="Courier New"&gt;.clone(true)&lt;/font&gt;       &lt;br /&gt;clone that element &lt;/li&gt;    &lt;li&gt;&lt;font size="2" face="Courier New"&gt;.insertAfter($(&amp;quot;#zz1_TopNavigationMenu&amp;quot;)) &lt;/font&gt;      &lt;br /&gt;insert the cloned element after the original menu &lt;/li&gt;    &lt;li&gt;&lt;font size="2" face="Courier New"&gt;.attr(&amp;quot;id&amp;quot;, &amp;quot;zz1_TopNavigationMenuCopy&amp;quot;);&lt;/font&gt;       &lt;br /&gt;set the &lt;strong&gt;ID&lt;/strong&gt; attribute to a new value to be able to identify it uniquely &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;The result of this function is a page that shows two identical menu bars:    &lt;br /&gt;&lt;img src="http://storage.tielens.name/splitwssmenu4.jpg" /&gt;&lt;/p&gt;  &lt;p&gt;Now the only thing that’s left to do is to remove the unnecessary menu items from both menus:    &lt;br /&gt;&lt;font size="2" face="Courier New"&gt;var nrOfItems = ($(&amp;quot;#zz1_TopNavigationMenu &amp;gt; tbody &amp;gt; tr &amp;gt; td&amp;quot;).length + 1) / 3;      &lt;br /&gt;var splitIndex = (Math.round(nrOfItems / 2) - 1) * 3;       &lt;br /&gt;$(&amp;quot;#zz1_TopNavigationMenu &amp;gt; tbody &amp;gt; tr &amp;gt; td:gt(&amp;quot; + splitIndex + &amp;quot;)&amp;quot;).remove();       &lt;br /&gt;$(&amp;quot;#zz1_TopNavigationMenuCopy &amp;gt; tbody &amp;gt; tr &amp;gt; td:lt(&amp;quot; + (splitIndex + 1) + &amp;quot;)&amp;quot;).remove();&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;The first two lines calculate the number of items in the menu (each menu item consists of three td elements) and the index of the &lt;strong&gt;td&lt;/strong&gt; element where the table should be “split”. The third line removes all the &lt;strong&gt;td&lt;/strong&gt; elements of the original menu with and &lt;strong&gt;index&lt;/strong&gt; higher than the calculated one. The last line removes all &lt;strong&gt;td&lt;/strong&gt; elements of the copied menu with and &lt;strong&gt;index&lt;/strong&gt; lower than the calculated one.&lt;/p&gt;  &lt;p&gt;Now, let’s put everything together and get this to work in a real SharePoint site! The first thing to do is to make sure your SharePoint site loads the jQuery library. This can be done in a couple of ways, for example using the jQuery component of the &lt;a href="http://codeplex.com/smarttools"&gt;SmartTools for SharePoint project on CodePlex&lt;/a&gt; (read my previous blog posts on &lt;a href="http://weblogs.asp.net/jan/archive/2008/11/20/sharepoint-2007-and-jquery-1.aspx"&gt;jQuery in SharePoint&lt;/a&gt; for more info). Secondly the Javascript discussed above should be loaded, and once again there are a couple of ways to do this. For production scenarios I’d recommend to build a &lt;strong&gt;Feature&lt;/strong&gt; using&amp;#160; a &lt;strong&gt;delegate control &lt;/strong&gt;that loads the Javascript function (just like the SmartTools jQuery component does), but for testing you can also do this in a plain &lt;strong&gt;Content Editor Web Part&lt;/strong&gt; (or, God forbid, using the SharePoint Designer tool). So just add a &lt;strong&gt;Content Editor Web Part &lt;/strong&gt;to a page of your SharePoint site, and copy/past the following piece of code in it:&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;&amp;lt;script&amp;gt;      &lt;br /&gt;$(document).ready(function() {       &lt;br /&gt;&amp;#160; // Calculate where to split the tables of the menus       &lt;br /&gt;&amp;#160; var nrOfItems = ($(&amp;quot;#zz1_TopNavigationMenu &amp;gt; tbody &amp;gt; tr &amp;gt; td&amp;quot;).length + 1) / 3;       &lt;br /&gt;&amp;#160; var splitIndex = (Math.round(nrOfItems / 2) - 1) * 3;       &lt;br /&gt;&amp;#160; // Make a copy of the TopNavigationMenu       &lt;br /&gt;&amp;#160; $(&amp;quot;#zz1_TopNavigationMenu&amp;quot;).clone(true).insertAfter($(&amp;quot;#zz1_TopNavigationMenu&amp;quot;)).attr(&amp;quot;id&amp;quot;, &amp;quot;zz1_TopNavigationMenuCopy&amp;quot;);       &lt;br /&gt;&amp;#160; // Remove items from original menu       &lt;br /&gt;&amp;#160; $(&amp;quot;#zz1_TopNavigationMenu &amp;gt; tbody &amp;gt; tr &amp;gt; td:gt(&amp;quot; + splitIndex + &amp;quot;)&amp;quot;).remove();       &lt;br /&gt;&amp;#160; // Remove items from copied menu       &lt;br /&gt;&amp;#160; $(&amp;quot;#zz1_TopNavigationMenuCopy &amp;gt; tbody &amp;gt; tr &amp;gt; td:lt(&amp;quot; + (splitIndex + 1) + &amp;quot;)&amp;quot;).remove();       &lt;br /&gt;});       &lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;img src="http://storage.tielens.name/splitwssmenu2.jpg" /&gt;&lt;/p&gt;  &lt;p&gt;When done, the SharePoint page will now display a Top Link Bar, split into two. Make sure you test the code in a &lt;strong&gt;WSS site &lt;/strong&gt;(a Team Site for example), because &lt;strong&gt;Publishing &lt;/strong&gt;sites (e.g. a Collaboration Portal has another menu, see the remark at the end of this post).     &lt;br /&gt;&lt;img src="http://storage.tielens.name/splitwssmenu3.jpg" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Important remark:&lt;/strong&gt; the code discussed in this article is just an example for &lt;strong&gt;demonstration purposes&lt;/strong&gt;, if you plan to use this code I &lt;strong&gt;strongly recommend &lt;/strong&gt;to test it in various web browsers and check if it meets your performance goals. The identifiers of the Top Link Bar in the code are uses in &lt;strong&gt;WSS sites &lt;/strong&gt;(e.g. a Team Site), SharePoint Publishing sites generate menus with other ID’s and or structures, so you have to tweak the Javascript. For example: the following code works for a Collaboration Portal using the default.master.&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;$(document).ready(function() {      &lt;br /&gt;&amp;#160; // Calculate where to split the tables of the menus       &lt;br /&gt;&amp;#160; var nrOfItems = ($(&amp;quot;#zz1_TopNavigationMenu *.zz1_TopNavigationMenu_5 &amp;gt; tbody &amp;gt; tr &amp;gt; td&amp;quot;).length) / 3;       &lt;br /&gt;&amp;#160; var splitIndex = (Math.round(nrOfItems / 2) - 1) * 3;       &lt;br /&gt;&amp;#160; // Make a copy of the TopNavigationMenu       &lt;br /&gt;&amp;#160; $(&amp;quot;#zz1_TopNavigationMenu&amp;quot;).clone(true).insertAfter($(&amp;quot;#zz1_TopNavigationMenu&amp;quot;)).attr(&amp;quot;id&amp;quot;, &amp;quot;zz1_TopNavigationMenuCopy&amp;quot;);       &lt;br /&gt;&amp;#160; // Remove items from original menu       &lt;br /&gt;&amp;#160; $(&amp;quot;#zz1_TopNavigationMenu *.zz1_TopNavigationMenu_5 &amp;gt; tbody &amp;gt; tr &amp;gt; td:gt(&amp;quot; + splitIndex + &amp;quot;)&amp;quot;).remove();       &lt;br /&gt;&amp;#160; // Remove items from copied menu       &lt;br /&gt;&amp;#160; $(&amp;quot;#zz1_TopNavigationMenuCopy &amp;gt; tbody &amp;gt; tr &amp;gt; td:lt(2)&amp;quot;).remove();&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160; &lt;font size="2" face="Courier New"&gt;// Remove first item (current site) from copied men      &lt;br /&gt;&amp;#160; $(&amp;quot;#zz1_TopNavigationMenuCopy *.zz1_TopNavigationMenu_5 &amp;gt; tbody &amp;gt; tr &amp;gt; td:lt(&amp;quot; + (splitIndex + 1) + &amp;quot;)&amp;quot;).remove();       &lt;br /&gt;});&lt;/font&gt;&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:ae09693e-5bf4-4ebf-bb3f-56a51d5feba2" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/sharerpoint" rel="tag"&gt;sharerpoint&lt;/a&gt;,&lt;a href="http://technorati.com/tags/wss" rel="tag"&gt;wss&lt;/a&gt;,&lt;a href="http://technorati.com/tags/moss" rel="tag"&gt;moss&lt;/a&gt;,&lt;a href="http://technorati.com/tags/navigation" rel="tag"&gt;navigation&lt;/a&gt;,&lt;a href="http://technorati.com/tags/menu" rel="tag"&gt;menu&lt;/a&gt;,&lt;a href="http://technorati.com/tags/jquery" rel="tag"&gt;jquery&lt;/a&gt;,&lt;a href="http://technorati.com/tags/javascript" rel="tag"&gt;javascript&lt;/a&gt;,&lt;a href="http://technorati.com/tags/ajax" rel="tag"&gt;ajax&lt;/a&gt;&lt;/div&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7012369" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/jan/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>The Twitter Search API made easy with Linq to XML</title><link>http://weblogs.asp.net/jan/archive/2009/03/02/the-twitter-search-api-made-easy-with-linq-to-xml.aspx</link><pubDate>Mon, 02 Mar 2009 20:55:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6935598</guid><dc:creator>Jan Tielens</dc:creator><slash:comments>7</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/jan/rsscomments.aspx?PostID=6935598</wfw:commentRss><comments>http://weblogs.asp.net/jan/archive/2009/03/02/the-twitter-search-api-made-easy-with-linq-to-xml.aspx#comments</comments><description>&lt;P mce_keep="true"&gt;My pal Lieven and I are preparing some cool demos to show at the &lt;A class="" href="http://www.techdays.be/" mce_href="http://www.techdays.be"&gt;Belgian TechDays&lt;/A&gt; SharePoint Preconference next week. Our goal is to build up a nice story that shows the various ways how to use SharePoint 2007 in combination with .NET 3.5. For some&amp;nbsp;those demos we're going to make use of one of today's hypes: &lt;A class="" href="http://twitter.com/" mce_href="http://twitter.com"&gt;Twitter&lt;/A&gt;! This evening I tried to query Twitter data using Linq and I discovered there are lots of samples available on the net; there's even a complete &lt;A class="" href="http://www.codeplex.com/LinqToTwitter" mce_href="http://www.codeplex.com/LinqToTwitter"&gt;Linq to Twitter provider&lt;/A&gt;&amp;nbsp;on CodePlex. Too bad the Linq to Twitter provider is focused on the tweets for a specific Twitter user and I wanted to make use of &lt;A class="" href="http://apiwiki.twitter.com/Search+API+Documentation" mce_href="http://apiwiki.twitter.com/Search+API+Documentation"&gt;Twitter's Search API&lt;/A&gt;. It turned out to be very, very easy (thanks to &lt;A class="" href="http://blogs.msdn.com/roberthorvick/archive/2009/01/27/reading-twitter-data-with-c-and-linq.aspx" mce_href="http://blogs.msdn.com/roberthorvick/archive/2009/01/27/reading-twitter-data-with-c-and-linq.aspx"&gt;Robert Horvick's code snippets&lt;/A&gt;). Just dump the code at the bottom of this post in your .NET 3.5 project, and you can query the Twitter Search API using 'sharepoint' as the query like this:&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;FONT face="courier new,courier"&gt;foreach (U2U.Demos.TwitterSearch.Tweet t &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; in U2U.Demos.TwitterSearch.Query("sharepoint"))&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MessageBox.Show(t.Title);&lt;BR&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Here's the code for the TwitterSearch class:&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;FONT face="courier new,courier"&gt;using System;&lt;BR&gt;using System.Collections.Generic;&lt;BR&gt;using System.Linq;&lt;BR&gt;using System.Text;&lt;BR&gt;using System.Xml.Linq;&lt;/FONT&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;FONT face="courier new,courier"&gt;namespace U2U.Demos&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public class TwitterSearch&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private const string urlTemplate = "&lt;/FONT&gt;&lt;A href="http://search.twitter.com/search.atom?q={0" mce_href="http://search.twitter.com/search.atom?q={0"&gt;&lt;FONT face="courier new,courier"&gt;http://search.twitter.com/search.atom?q={0&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face="courier new,courier"&gt;}";&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private static XNamespace atomNS = "&lt;/FONT&gt;&lt;A href="http://www.w3.org/2005/Atom" mce_href="http://www.w3.org/2005/Atom"&gt;&lt;FONT face="courier new,courier"&gt;http://www.w3.org/2005/Atom&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face="courier new,courier"&gt;";&lt;/FONT&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;FONT face="courier new,courier"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static List&amp;lt;Tweet&amp;gt; Query(string query)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; XDocument xDoc = XDocument.Load(string.Format(urlTemplate, query));&lt;/FONT&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;FONT face="courier new,courier"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var tweets = &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (from tweet in xDoc.Descendants(atomNS + "entry")&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select new Tweet&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Title = (string)tweet.Element(atomNS + "title"),&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Published = &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DateTime.Parse((string)tweet.Element(atomNS + "published")),&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Id = (string)tweet.Element(atomNS + "id"),&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Link = tweet.Elements(atomNS + "link")&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Where(link =&amp;gt; (string)link.Attribute("rel") == "alternate")&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Select(link =&amp;gt; (string)link.Attribute("href"))&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .First(),&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Author = (from author in tweet.Descendants(atomNS + "author")&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select new Author&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Name = (string)author.Element(atomNS + "name"),&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Uri = (string)author.Element(atomNS + "uri"),&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }).First(),&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;/FONT&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;FONT face="courier new,courier"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return tweets.ToList&amp;lt;Tweet&amp;gt;();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/FONT&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;FONT face="courier new,courier"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public class Tweet&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public string Id { get; set; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public DateTime Published { get; set; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public string Link { get; set; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public string Title { get; set; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public Author Author { get; set; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public class Author&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public string Name { get; set; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public string Uri { get; set; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;}&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6935598" width="1" height="1"&gt;</description></item><item><title>Speaking at the Belgian TechDays 09</title><link>http://weblogs.asp.net/jan/archive/2009/02/18/speaking-at-the-belgian-techdays-09.aspx</link><pubDate>Wed, 18 Feb 2009 20:21:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6915923</guid><dc:creator>Jan Tielens</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/jan/rsscomments.aspx?PostID=6915923</wfw:commentRss><comments>http://weblogs.asp.net/jan/archive/2009/02/18/speaking-at-the-belgian-techdays-09.aspx#comments</comments><description>&lt;P mce_keep="true"&gt;Next month, (10, 11 &amp;amp; 12 of March) the &lt;A href="http://www.techdays.be/" mce_href="http://www.techdays.be"&gt;Belgian TechDays&lt;/A&gt; will be held in Antwerp. Together with my pal Lieven Iliano, I'll present the SharePoint Pre-conference day on March, 10th. So what is this SharePoint Pre-conference all about? Well were going to talk about .NET 3.5 in SharePoint 2007, think WCF, Silverlight, Linq and WF applied in SharePoint 2007 sites. I'm very excited and I'm sure Lieven and&amp;nbsp;I will be able to entertain you 5 (five!) sessions in a row. For the full agenda, check the &lt;A href="http://www.techdays.be/" mce_href="http://www.techdays.be"&gt;TechDays site&lt;/A&gt; and&amp;nbsp;I hope to see you there!&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;IMG style="WIDTH: 480px; HEIGHT: 325px" src="http://www.microsoft.com/belux/techdays/img/toolkit/480x325ani.gif" width=480 height=325 mce_src="http://www.microsoft.com/belux/techdays/img/toolkit/480x325ani.gif"&gt;&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6915923" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/jan/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>Essential SharePoint Developer Tool: SPDisposeCheck</title><link>http://weblogs.asp.net/jan/archive/2009/01/30/essential-sharepoint-developer-tool-spdisposecheck.aspx</link><pubDate>Fri, 30 Jan 2009 06:40:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6869003</guid><dc:creator>Jan Tielens</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/jan/rsscomments.aspx?PostID=6869003</wfw:commentRss><comments>http://weblogs.asp.net/jan/archive/2009/01/30/essential-sharepoint-developer-tool-spdisposecheck.aspx#comments</comments><description>&lt;p&gt;[&lt;a href="http://blogs.msdn.com/pandrew/archive/2009/01/29/spdisposecheck-v1-3-1-is-released.aspx" target="_blank"&gt;Via Paul Andrew&lt;/a&gt;] Now here is a must have tool for every SharePoint developer that wants to make sure that his code isn’t causing any nasty memory leaks due to forgotten Dispose calls (typically on the SPSite and SPWeb instances)! The &lt;a href="http://code.msdn.microsoft.com/SPDisposeCheck" target="_blank"&gt;SPDisposeCheck&lt;/a&gt; utility can actually review a compiled assembly and tell you if there are any forgotten Dispose calls, so you can even check third party assemblies. But remember, it’s a tool: nothing beats a full code review, but it certainly speeds up the process.&lt;/p&gt;  &lt;p&gt;Get the detail's on &lt;a href="http://blogs.msdn.com/pandrew/archive/2009/01/29/spdisposecheck-v1-3-1-is-released.aspx" target="_blank"&gt;Paul’s blog&lt;/a&gt;: &lt;em&gt;SPDisposeCheck is a tool to help SharePoint Developers follow memory management best practices when using the SharePoint API with IDisposable objects including SPSite and SPWeb. This tool is not supported by Microsoft and is recommended to be used on Developer workstations and not on production SharePoint Server installations.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Download from &lt;a title="http://code.msdn.microsoft.com/SPDisposeCheck" href="http://code.msdn.microsoft.com/SPDisposeCheck"&gt;http://code.msdn.microsoft.com/SPDisposeCheck&lt;/a&gt;.&lt;/p&gt;  &lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:70f48435-70b8-4135-a0f5-8b51cbf3b5f6" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/sharepoint" rel="tag"&gt;sharepoint&lt;/a&gt;,&lt;a href="http://technorati.com/tags/wss" rel="tag"&gt;wss&lt;/a&gt;,&lt;a href="http://technorati.com/tags/moss" rel="tag"&gt;moss&lt;/a&gt;,&lt;a href="http://technorati.com/tags/development" rel="tag"&gt;development&lt;/a&gt;,&lt;a href="http://technorati.com/tags/tool" rel="tag"&gt;tool&lt;/a&gt;,&lt;a href="http://technorati.com/tags/developer" rel="tag"&gt;developer&lt;/a&gt;&lt;/div&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6869003" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/jan/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>New Release of the SmartTools for SharePoint Project</title><link>http://weblogs.asp.net/jan/archive/2009/01/22/new-release-of-the-smarttools-for-sharepoint-project.aspx</link><pubDate>Thu, 22 Jan 2009 20:13:38 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6857038</guid><dc:creator>Jan Tielens</dc:creator><slash:comments>18</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/jan/rsscomments.aspx?PostID=6857038</wfw:commentRss><comments>http://weblogs.asp.net/jan/archive/2009/01/22/new-release-of-the-smarttools-for-sharepoint-project.aspx#comments</comments><description>&lt;p&gt;Tonight I’ve uploaded &lt;a href="http://www.codeplex.com/smarttools/Release/ProjectReleases.aspx?ReleaseId=22111" target="_blank"&gt;new versions&lt;/a&gt; of all the components of the &lt;a href="http://www.codeplex.com/smarttools/" target="_blank"&gt;SmartTools for SharePoint&lt;/a&gt; project on CodePlex. For those of you who don’t know the &lt;a href="http://www.codeplex.com/smarttools/" target="_blank"&gt;SmartTools project&lt;/a&gt;: it’s a collection of useful SharePoint extensions, including:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.codeplex.com/smarttools/Wiki/View.aspx?title=What%27s%20New&amp;amp;referringTitle=Home"&gt;What's New&lt;/a&gt;: a customizable web part that can display a list of recently added or changed items of a SharePoint site or site collection &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.codeplex.com/smarttools/Wiki/View.aspx?title=Autocomplete%20Text%20Field&amp;amp;referringTitle=Home"&gt;Autocomplete Text Field&lt;/a&gt;: a field that allows users to pick items from a list by making use of an AJAX autocomplete text box.&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.codeplex.com/smarttools/Wiki/View.aspx?title=Enhanced%20Site%20Actions&amp;amp;referringTitle=Home"&gt;Enhanced Site Actions&lt;/a&gt;: adds extra menu items the the default Site Actions menu, for easy access to commonly used functions &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.codeplex.com/smarttools/Wiki/View.aspx?title=Copy%20Paste&amp;amp;referringTitle=Home"&gt;Copy Paste&lt;/a&gt;: adds copy and paste functionality to Document Libraries &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.codeplex.com/smarttools/Wiki/View.aspx?title=jQuery&amp;amp;referringTitle=Home"&gt;jQuery&lt;/a&gt;: integrates the jQuery JavaScript library with SharePoint 2007 &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.codeplex.com/smarttools/Wiki/View.aspx?title=TableRow%20Highlight&amp;amp;referringTitle=Home"&gt;TableRow Highlight&lt;/a&gt;: uses jQuery to highlight table rows when the mouse pointer is hovering above them &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.codeplex.com/smarttools/Wiki/View.aspx?title=Dock%20Navigation&amp;amp;referringTitle=Home"&gt;Dock Navigation&lt;/a&gt;: adds an overlay to every page of a site to allow users to navigate to the Lists and Document Libraries of that site &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.codeplex.com/smarttools/Wiki/View.aspx?title=Charts&amp;amp;referringTitle=Home"&gt;Charts&lt;/a&gt;: show animated Silverlight charts, based on data stored in SharePoint lists and document libraries&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;This release is created based on lots of suggestions and bug reports of it’s users, so thanks for being part of the community! And keep submitting feature requests, feedback and bug reports. Most of the work went into the newest component: the Silverlight Charts. The Charts are still in beta, and I’ve got some cool ideas to make them even better. But even this beta version offers some cool functionality, you can watch a &lt;a href="http://video.msn.com/?playlist=videoByUuids:uuids:7310f64d-8a23-4a32-99e9-89792d739174&amp;amp;showPlaylist=true" target="_blank"&gt;small screencast here&lt;/a&gt; (make sure you switch to fullscreen). If you’d like to download the screencast in high resolution; you hit the download link at the bottom right of the &lt;a href="http://vimeo.com/2922315" target="_blank"&gt;video page on Vimeo&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=smarttools&amp;amp;DownloadId=55968" /&gt; &lt;/p&gt;  &lt;div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:f9c50fe2-cbba-4ac3-89e9-302f021e22c1" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/sharepoint" rel="tag"&gt;sharepoint&lt;/a&gt;,&lt;a href="http://technorati.com/tags/wss" rel="tag"&gt;wss&lt;/a&gt;,&lt;a href="http://technorati.com/tags/moss" rel="tag"&gt;moss&lt;/a&gt;,&lt;a href="http://technorati.com/tags/smarttools" rel="tag"&gt;smarttools&lt;/a&gt;,&lt;a href="http://technorati.com/tags/charts" rel="tag"&gt;charts&lt;/a&gt;,&lt;a href="http://technorati.com/tags/chart" rel="tag"&gt;chart&lt;/a&gt;,&lt;a href="http://technorati.com/tags/tools" rel="tag"&gt;tools&lt;/a&gt;,&lt;a href="http://technorati.com/tags/microsoft" rel="tag"&gt;microsoft&lt;/a&gt;&lt;/div&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6857038" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/jan/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>Visual Studio 2008 extensions for Windows SharePoint Services 1.3 CTP</title><link>http://weblogs.asp.net/jan/archive/2009/01/12/visual-studio-2008-extensions-for-windows-sharepoint-services-1-3-ctp.aspx</link><pubDate>Mon, 12 Jan 2009 14:31:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6830692</guid><dc:creator>Jan Tielens</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/jan/rsscomments.aspx?PostID=6830692</wfw:commentRss><comments>http://weblogs.asp.net/jan/archive/2009/01/12/visual-studio-2008-extensions-for-windows-sharepoint-services-1-3-ctp.aspx#comments</comments><description>&lt;P mce_keep="true"&gt;[&lt;A class="" href="http://blogs.msdn.com/sharepoint/archive/2009/01/12/announcing-community-technology-preview-of-visual-studio-2008-extensions-for-sharepoint-v1-3.aspx" mce_href="http://blogs.msdn.com/sharepoint/archive/2009/01/12/announcing-community-technology-preview-of-visual-studio-2008-extensions-for-sharepoint-v1-3.aspx"&gt;Announced on the SharePoint Team Blog&lt;/A&gt;] The SharePoint-year makes a good start with the CTP release of version 1.3 of the extensions with the longest name ever: the Visual Studio 2008 extensions for Windows SharePoint Services 3.0 (or VSeWSS for short). Here's a short list of new features, for the details check out &lt;A class="" href="http://blogs.msdn.com/sharepoint/archive/2009/01/12/announcing-community-technology-preview-of-visual-studio-2008-extensions-for-sharepoint-v1-3.aspx" mce_href="http://blogs.msdn.com/sharepoint/archive/2009/01/12/announcing-community-technology-preview-of-visual-studio-2008-extensions-for-sharepoint-v1-3.aspx"&gt;the SharePoint Team Blog&lt;/A&gt;. The final release is scheduled for "North American Spring of 2009". &lt;A class="" href="https://connect.microsoft.com/site/sitehome.aspx?SiteID=428" mce_href="https://connect.microsoft.com/site/sitehome.aspx?SiteID=428"&gt;Get it here&lt;/A&gt;.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;Can be installed on x64 Server OS machines running SharePoint x64. Previously only x86 Server OS could be used.&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;&lt;STRONG&gt;Separate build commands for package, deploy and retract are added&lt;/STRONG&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;Command line build, package and retract commands are included enabling continuous integration and build servers. Previously command line build of SharePoint projects was very difficult&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;&lt;STRONG&gt;Refactoring support for renaming of Web Parts. Previously renaming a web part required changes in several files in the project&lt;/STRONG&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;WSP View improvements for consistency of deleting feature elements, merging features and adding event receivers to features&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;&lt;STRONG&gt;Solution Generator can now generate solutions from publishing sites. Previously only regular sites could be generated&lt;/STRONG&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;&lt;STRONG&gt;Allowing partial trust BIN deployments of web parts. CAS configuration must still be provided by the developer.&lt;/STRONG&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;&lt;STRONG&gt;New project item template for SharePoint RootFiles items&lt;/STRONG&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;Deployment will now optionally remove conflicting existing features on the development server prior to redeployment. Previously any feature name conflicts would result in an error&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;Ancillary assemblies such as for business logic can now be added to the SharePoint Solution WSP&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;Hidden features related to Site Definition projects are now shown in WSP View. They are no longer hidden&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;&lt;STRONG&gt;For advanced users a fast deploy is included to update only the compiled assembly on the SharePoint development installation&lt;/STRONG&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;The User Guide is now installed with the extensions instead of being a separate download&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6830692" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/jan/archive/tags/SharePoint/default.aspx">SharePoint</category></item></channel></rss>