<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Wiz/dumb : STSSync</title><link>http://blogs.msdn.com/pcreehan/archive/tags/STSSync/default.aspx</link><description>Tags: STSSync</description><dc:language>en</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Two-way STSSync Protocol Server for Outlook 2007</title><link>http://blogs.msdn.com/pcreehan/archive/2008/06/10/two-way-stssync-protocol-server-for-outlook-2007.aspx</link><pubDate>Wed, 11 Jun 2008 00:53:19 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8590474</guid><dc:creator>Patrick Creehan</dc:creator><slash:comments>22</slash:comments><comments>http://blogs.msdn.com/pcreehan/comments/8590474.aspx</comments><wfw:commentRss>http://blogs.msdn.com/pcreehan/commentrss.aspx?PostID=8590474</wfw:commentRss><description>&lt;p&gt;So I've finally done it. I made the first stab at a two-way stssync protocol server. You can get it here:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.codeplex.com/stssyncprovider"&gt;http://www.codeplex.com/stssyncprovider&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I'd love to have some of you start using it and report issues you find with it so I can continue to improve it. I know there are issues already, but it should be mostly there to at least get you started.&lt;/p&gt;  &lt;p&gt;This was largely inspired by Stephen Toub's original &lt;a href="http://msdn.microsoft.com/en-us/library/Aa168130(office.11).aspx"&gt;Custom Calendar Provider sample&lt;/a&gt;. I'd recommend reading that article for background on this idea.&amp;#160; I later &lt;a href="http://blogs.msdn.com/pcreehan/archive/2006/11/21/custom-calendar-providers-for-outlook-2007.aspx"&gt;updated it&lt;/a&gt; to work with Outlook 2007, but this was still just using the ver=1.0 sync (one-way) . Now, with the release of the SharePoint protocol documents which &lt;a href="http://blogs.msdn.com/pcreehan/archive/2008/04/08/stssync-for-the-masses-toub-s-revenge.aspx"&gt;I announced&lt;/a&gt; some months back and troubleshooting logging in Outlook, I've been able to construct a stssync protocol server, which, like Toub's sample, allows for you to simply create a provider that snaps into the engine. &lt;/p&gt;  &lt;p&gt;My original design goal was to make it so that provider developers would only have to implement a single interface which returned a dataset of records when Outlook requests them and accepted a dataset of updates when Outlook makes changes and the rest of the plumbing would be handled by the provider engine (&amp;quot;the engine&amp;quot;). I came pretty close. Here is the interface as it stands so far:&lt;/p&gt;  &lt;div class="code" style="background-color: #eeeeee"&gt;   &lt;p&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;interface&lt;/span&gt; &lt;span style="color: #2b91af"&gt;IProvider &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{ &lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;DataSet&lt;/span&gt; GetEmptyDataSet(&lt;span style="color: #2b91af"&gt;Guid&lt;/span&gt; ProviderID); &lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;DataRow&lt;/span&gt; GetSingleRow(&lt;span style="color: #2b91af"&gt;Guid&lt;/span&gt; ProviderID, &lt;span style="color: blue"&gt;int&lt;/span&gt; id); &lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;DataRow&lt;/span&gt; Update(&lt;span style="color: #2b91af"&gt;Guid&lt;/span&gt; ProviderID, &lt;span style="color: #2b91af"&gt;DataRow&lt;/span&gt; updateRow); &lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;DataSet&lt;/span&gt; GetUpdatesSinceToken(&lt;span style="color: #2b91af"&gt;Guid&lt;/span&gt; ProviderID, &lt;span style="color: #2b91af"&gt;ChangeKey&lt;/span&gt; changeKey); &lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ListType&lt;/span&gt; GetProviderType(&lt;span style="color: #2b91af"&gt;Guid&lt;/span&gt; ProviderID); &lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 10pt; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #2b91af"&gt;StringDictionary&lt;/span&gt; GetFieldMappingsForListType(&lt;span style="color: #2b91af"&gt;Guid&lt;/span&gt; ProviderID, &lt;span style="color: #2b91af"&gt;ListType&lt;/span&gt; listType); &lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; line-height: 115%; font-family: " courier="courier" new?;="new?;" mso-no-proof:="mso-no-proof:" yes?="yes?"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;}&lt;/span&gt;&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;So here's the explanation for the interface.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;GetEmptyDataSet: this is mostly used so that the engine can get a feel for what columns are in the table you're returning. You simply return an empty typed dataset or a standard dataset with a single (empty) table that contains the same columns you would later return filled. &lt;/li&gt;    &lt;li&gt;GetSingleRow: Pretty easy - I give you an ID, you give me back the row associated with it. &lt;/li&gt;    &lt;li&gt;Update: I give you the datarow with changes made and you pass me back the updated row (some columns may change as a result of doing the update - like Modified time, for example) &lt;/li&gt;    &lt;li&gt;GetUpdatesSinceToken: I give you a changekey from which you can extract a timestamp, or just call ToString to use the changekey as a watermark for getting changes since the last sync. You return your DataSet filled with any rows that have changed since the provided watermark (changeKey). &lt;/li&gt;    &lt;li&gt;GetProviderType: You return a value from the ListType enumeration. This tells the engine whether you're a contacts provider versus a calendar provider, task provider, discussion list provider, or document library provider (no doc library or attachment support is currently in the provider - it's tbi). &lt;/li&gt;    &lt;li&gt;GetFieldMappingsForListType - In this method you simply return a StringDictionary filled with any field name mappings the engine can use to map the columns in your dataset to column names it's familiar with. For example, you might do something like oSDict.Add(&amp;quot;myContactIDField&amp;quot;,&amp;quot;ID&amp;quot;); &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Each method is passed the ProviderID specified in the web.config for this provider. If you want to implement two different providers in the same class, you can distinguish between them using this ID, otherwise, your implementation can largely ignore this parameter - it is mostly used by the engine to get a reference to your interface.&lt;/p&gt;  &lt;p&gt;Once you've implemented the interface, just go to the web.config file for the engine and add a new Provider element. Here's a sample:&lt;/p&gt;  &lt;div style="font-family: courier; background-color: #eee"&gt;   &lt;p&gt;&amp;lt;ProviderProxy&amp;gt;      &lt;br /&gt;&amp;#160; &amp;lt;Providers&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Provider Name=&amp;quot;AdventureWorks Contacts&amp;quot; ID=&amp;quot;{7765B84F-6D32-4d31-B28E-6BC615D2F187}&amp;quot; Type=&amp;quot;AdventureWorksProvider.Contacts&amp;quot; Assembly=&amp;quot;AdventureWorksProvider&amp;quot; /&amp;gt;       &lt;br /&gt;&amp;#160; &amp;lt;/Providers&amp;gt;       &lt;br /&gt;&amp;lt;/ProviderProxy&amp;gt;&lt;/p&gt; &lt;/div&gt;  &lt;ul&gt;   &lt;li&gt;Name = just the display name you want to appear on the list in Outlook and on default.aspx &lt;/li&gt;    &lt;li&gt;ID = this contains a Guid that is used in invoking methods on your IProvider interface. &lt;/li&gt;    &lt;li&gt;Type = the Namespace.ClassName of the type of your IProvider interface. &lt;/li&gt;    &lt;li&gt;Assembly = the qualified assembly name of the the assembly that contains the Type specified. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Copy your assembly to the bin directory of the engine web site and the engine will automatically find your assembly. I modified the Pre- and Post-Build events on my AdventureWorks provider sample to automatically do this to simplify the debugging process.&lt;/p&gt;  &lt;p&gt;This is just a very rough draft. I wanted to have a sample up there that folks could start to work with and get some ideas. I'd love to hear your feedback and for you to help mold the project into something that is good over time. Please contact me with any issues you find or any suggestions (I know of some myself, already). I'll do my best to put out regular releases as the code base improves. I'd also love to hear what you do with it and what unique stores you start syncing with Outlook.&lt;/p&gt;  &lt;p&gt;Just as a note, in this initial release, I do not support one-way sync, just two-way (seems backwards, but the goal was to get a two way sync working).&lt;/p&gt;  &lt;p&gt;Also, I may need to change the IProvider interface definition from one release to the next as bugs/feature-completeness dictate probably in the early phases. It doesn't make sense to have an interface that's incomplete. Once I'm able to declare feature-completeness on the IProvider interface, any new enhancements or additional functionality will come in the form of additional/augmented interfaces (IProvider2, etc). &lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8590474" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/pcreehan/archive/tags/Outlook/default.aspx">Outlook</category><category domain="http://blogs.msdn.com/pcreehan/archive/tags/Outlook+2007/default.aspx">Outlook 2007</category><category domain="http://blogs.msdn.com/pcreehan/archive/tags/STSSync/default.aspx">STSSync</category><category domain="http://blogs.msdn.com/pcreehan/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.msdn.com/pcreehan/archive/tags/DevMsgTeam/default.aspx">DevMsgTeam</category></item><item><title>STSSync for the Masses: Toub's Revenge</title><link>http://blogs.msdn.com/pcreehan/archive/2008/04/08/stssync-for-the-masses-toub-s-revenge.aspx</link><pubDate>Tue, 08 Apr 2008 21:13:12 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8369546</guid><dc:creator>Patrick Creehan</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/pcreehan/comments/8369546.aspx</comments><wfw:commentRss>http://blogs.msdn.com/pcreehan/commentrss.aspx?PostID=8369546</wfw:commentRss><description>&lt;p&gt;Many of you have been using the Custom Calendar Provider samples created by Stephen Toub and I:&lt;/p&gt;  &lt;p&gt;&lt;a title="Stephen Toub - Custom Calendar Providers for Outlook 2003" href="http://blogs.msdn.com/toub/archive/2004/05/22/139609.aspx"&gt;Stephen Toub - Custom Calendar Providers for Outlook 2003&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="dumb - Custom Calendar Providers for Outlook 2007" href="http://blogs.msdn.com/pcreehan/archive/2006/11/21/custom-calendar-providers-for-outlook-2007.aspx"&gt;Custom Calendar Providers for Outlook 2007&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The development team has finally documented pretty much everything you need to know in order to build your own STSSync provider (to replace SharePoint as our code samples do). The documentation is included in many of the newly documented &lt;a href="http://msdn2.microsoft.com/en-us/library/cc203350.aspx"&gt;Open Protocol specifications&lt;/a&gt;:&lt;/p&gt;  &lt;p&gt;&lt;a title="[MS-OUTSPS]" href="http://msdn2.microsoft.com/en-us/library/cc313169.aspx"&gt;[MS-OUTSPS] Lists Client Sync Protocol Specification&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I'm excited to see what you do with this!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8369546" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/pcreehan/archive/tags/Outlook/default.aspx">Outlook</category><category domain="http://blogs.msdn.com/pcreehan/archive/tags/Outlook+2007/default.aspx">Outlook 2007</category><category domain="http://blogs.msdn.com/pcreehan/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/pcreehan/archive/tags/STSSync/default.aspx">STSSync</category><category domain="http://blogs.msdn.com/pcreehan/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.msdn.com/pcreehan/archive/tags/DevMsgTeam/default.aspx">DevMsgTeam</category></item><item><title>Custom Calendar Providers for Outlook 2007</title><link>http://blogs.msdn.com/pcreehan/archive/2006/11/21/custom-calendar-providers-for-outlook-2007.aspx</link><pubDate>Tue, 21 Nov 2006 15:43:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1115855</guid><dc:creator>Patrick Creehan</dc:creator><slash:comments>26</slash:comments><comments>http://blogs.msdn.com/pcreehan/comments/1115855.aspx</comments><wfw:commentRss>http://blogs.msdn.com/pcreehan/commentrss.aspx?PostID=1115855</wfw:commentRss><description>&lt;P&gt;So if you were using &lt;A class="" href="http://blogs.msdn.com/toub/" target=_blank mce_href="http://blogs.msdn.com/toub/"&gt;Stephen Toub's&lt;/A&gt; &lt;A class="" href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/odc_OL2003_ta/html/odc_OLOutlookCalendar.asp" target=_blank mce_href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/odc_OL2003_ta/html/odc_OLOutlookCalendar.asp"&gt;Custom Calendar Provider sample&lt;/A&gt; for Outlook 2003, and you are testing out the awesome new Outlook 2007 features, you may have noticed that the code sample he provided doesn't work any more. Stephen is planning to update the article for 2007 eventually, but until then, here's the fix. &lt;/P&gt;
&lt;P&gt;The GetList web service method is supposed to return a &amp;lt;Fields&amp;gt; node filled with &amp;lt;Field&amp;gt; nodes that describe each field in that list, including type information, display names, read-only properties, etc. In the sample above, Stephen is not returning the &amp;lt;Fields&amp;gt; node as a part of the response. The reason is that Outlook 2003 ignored this information when it was performing the sync. Outlook 2007 is a little more intelligent in this regard and it does need this information returned. It's not a big deal when linking to a SharePoint Events list, because SharePoint always returns that data. In an effort to keep the code simple, Stephen ignored it.&lt;/P&gt;
&lt;P&gt;So the answer is that we need to add that information back in. So what you'll want to do is edit the WssListResponse.cs file as follows:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Add a new private static method called AddFieldElement as follows:&lt;/LI&gt;&lt;CODE&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;/// &amp;lt;summary&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;/// Adds a Field node to the Fields parent node&lt;BR&gt;&amp;nbsp;&amp;nbsp;/// &amp;lt;/summary&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;/// &amp;lt;param name="parentDoc"&amp;gt;XmlDocument parent doc used for creating the new element&amp;lt;/param&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;/// &amp;lt;param name="parentNode"&amp;gt;The parent Fields node to which to add the new Field element&amp;lt;/param&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;/// &amp;lt;param name="type"&amp;gt;Type attribute&amp;lt;/param&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;/// &amp;lt;param name="colName"&amp;gt;ColName attribute&amp;lt;/param&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;/// &amp;lt;param name="name"&amp;gt;Name attribute&amp;lt;/param&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;/// &amp;lt;param name="displayName"&amp;gt;DisplayName attribute&amp;lt;/param&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;/// &amp;lt;param name="readOnly"&amp;gt;ReadOnly attribute&amp;lt;/param&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;/// &amp;lt;param name="hidden"&amp;gt;Hidden attribute&amp;lt;/param&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;/// &amp;lt;param name="fromBaseType"&amp;gt;FromBaseType attribute&amp;lt;/param&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;private static XmlElement AddFieldElement(XmlDocument parentDoc,XmlNode parentNode,string type, string colName, string name, string displayName,bool readOnly, bool hidden, bool fromBaseType)&lt;BR&gt;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;XmlElement fieldEl = parentDoc.CreateElement(null,"Field",_wssns);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;parentNode.AppendChild(fieldEl);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(type != null)&amp;nbsp;&amp;nbsp;AddAttribute(fieldEl,null,"Type",null,type);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(colName != null)&amp;nbsp;&amp;nbsp;AddAttribute(fieldEl,null,"ColName",null,colName);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(name != null)&amp;nbsp;&amp;nbsp;AddAttribute(fieldEl,null,"Name",null,name);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(displayName != null) AddAttribute(fieldEl,null,"DisplayName",null,displayName);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(readOnly)&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(fieldEl,null,"ReadOnly",null,"TRUE");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(hidden)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(fieldEl,null,"Hidden",null,"TRUE");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(fromBaseType)&amp;nbsp;&amp;nbsp;AddAttribute(fieldEl,null,"FromBaseType",null,"TRUE");&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;return fieldEl;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;}&lt;/P&gt;&lt;/CODE&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;Modify the GetListDescription Method as follows:&lt;/DIV&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;CODE&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&amp;nbsp;public static XmlNode GetListDescription(string title, Guid id)&lt;BR&gt;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Create the response document&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;XmlDocument doc = new XmlDocument();&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Add a List element&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;XmlNode list = doc.CreateElement(null, "List",&amp;nbsp; _wssns);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;doc.AppendChild(list);&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Add attributes about the list to the List element&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(list, null, "DocTemplateUrl", null, "");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(list, null, "DefaultViewUrl", null, "/Lists/" + id.ToString("N") + "/AllItems.aspx");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(list, null, "ID", null, id.ToString("B"));&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(list, null, "Title", null, title);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(list, null, "Description", null, title);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(list, null, "ImageUrl", null, "/_layouts/images/itevent.gif");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(list, null, "Name", null, id.ToString("N"));&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(list, null, "BaseType", null, "0");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(list, null, "ServerTemplate", null, "106");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(list, null, "Created", null, DateTime.MinValue.AddDays(2).ToString("s").Replace("T", " "));&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(list, null, "Modified", null, DateTime.MinValue.AddDays(3).ToString("s").Replace("T", " "));&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(list, null, "LastDeleted", null, DateTime.MinValue.AddDays(3).ToString("s").Replace("T", " "));&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(list, null, "Version", null, "0");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(list, null, "Direction", null, "none");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(list, null, "ThumbnailSize", null, "");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(list, null, "WebImageWidth", null, "");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(list, null, "WebImageHeight", null, "");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(list, null, "Flags", null, "4096");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(list, null, "ItemCount", null, "1"); // isn't used, so no point in recomputing size of list&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(list, null, "AnonymousPermMask", null, "");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(list, null, "RootFolder", null, "/Lists/" + id.ToString("N"));&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(list, null, "ReadSecurity", null, "1");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(list, null, "WriteSecurity", null, "1");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(list, null, "Author", null, "1");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(list, null, "AnonymousPermMask", null, "");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(list, null, "EventSinkAssembly", null, "");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(list, null, "EventSinkClass", null, "");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(list, null, "EventSinkData", null, "");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(list, null, "EmailInsertsFolder", null, "");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(list, null, "AllowDeletion", null, "TRUE");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(list, null, "AllowMultiResponses", null, "FALSE");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(list, null, "EnableAttachments", null, "TRUE");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(list, null, "EnableModeration", null, "FALSE");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(list, null, "EnableVersioning", null, "FALSE");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(list, null, "Hidden", null, "FALSE");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(list, null, "MultipleDataList", null, "FALSE");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(list, null, "Ordered", null, "FALSE");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(list, null, "ShowUser", null, "TRUE");&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;//Create Fields node&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;XmlElement fieldsNode = doc.CreateElement(null, "Fields",&amp;nbsp; _wssns);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.AppendChild(fieldsNode);&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;XmlElement tmpEl;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;//Append Fields&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;tmpEl = AddFieldElement(doc,fieldsNode,"Counter","tp_ID","ID","ID",true,false,true);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;tmpEl = AddFieldElement(doc,fieldsNode,"Text","nvarchar1","Title","Title",false,false,true);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;tmpEl = AddFieldElement(doc,fieldsNode,"DateTime","tp_Modified","Modified","Modified",true,false,true);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"StorageTZ",null,"TRUE");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;tmpEl = AddFieldElement(doc,fieldsNode,"DateTime","tp_Created","Created","Created",true,false,true);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"StorageTZ",null,"TRUE");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;tmpEl = AddFieldElement(doc,fieldsNode,"User","tp_Author","Author","Created By",true,false,true);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"List",null,"UserInfo");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;tmpEl = AddFieldElement(doc,fieldsNode,"User","tp_Editor","Editor","Modified By",true,false,true);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"List",null,"UserInfo");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;tmpEl = AddFieldElement(doc,fieldsNode,"Integer","tp_Version","owshiddenversion","owshiddenversion",true,true,true);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"SetAs",null,"owshiddenversion");&lt;BR&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;tmpEl = AddFieldElement(doc,fieldsNode,"Attachments","tp_HasAttachment","Attachments","Attachments",true,false,true);&lt;BR&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;tmpEl = AddFieldElement(doc,fieldsNode,"ModStat","tp_ModerationStatus","_ModerationStatus","Approval Status",true,true,true);&lt;BR&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"CanToggleHidden",null,"TRUE");&lt;BR&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"Required",null,"FALSE");&lt;BR&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;tmpEl = AddFieldElement(doc,fieldsNode,"Note","ntext1","_ModerationComments","Approver Comments",true,true,true);&lt;BR&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"CanToggleHidden",null,"TRUE");&lt;BR&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"Sortable",null,"FALSE");&lt;BR&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;tmpEl = AddFieldElement(doc,fieldsNode,"Computed",null,"Edit","Edit",true,false,true);&lt;BR&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"Sortable",null,"FALSE");&lt;BR&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"Filterable",null,"FALSE");&lt;BR&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"AuthoringInfo",null,"(link to edit item)");&lt;BR&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;tmpEl = AddFieldElement(doc,fieldsNode,"Computed",null,"LinkTitleNoMenu","Title",true,false,true);&lt;BR&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"AuthoringInfo",null,"(linked to item)");&lt;BR&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"Dir",null,"");&lt;BR&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"DisplayNameSrcField",null,"Title");&lt;BR&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;tmpEl = AddFieldElement(doc,fieldsNode,"Computed",null,"LinkTitle","Title",true,false,true);&lt;BR&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"AuthoringInfo",null,"(linked to item with edit menu)");&lt;BR&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"DisplayNameSrcField",null,"Title");&lt;BR&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"ClassInfo",null,"Menu");&lt;BR&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;tmpEl = AddFieldElement(doc,fieldsNode,"Computed",null,"SelectTitle","Select",true,true,true);&lt;BR&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"AuthoringInfo",null,"(web part connection)");&lt;BR&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"Dir",null,"");&lt;BR&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"Sortable",null,"FALSE");&lt;BR&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"CanToggleHidden",null,"TRUE");&lt;BR&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;tmpEl = AddFieldElement(doc,fieldsNode,"Integer","tp_InstanceID","InstanceID","InstanceID",true,true,true);&lt;BR&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"Sortable",null,"TRUE");&lt;BR&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"Filterable",null,"TRUE");&lt;BR&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"Min",null,"0");&lt;BR&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"Max",null,"99991231");&lt;BR&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;tmpEl = AddFieldElement(doc,fieldsNode,"Number","tp_ItemOrder","Order","Order",false,true,true);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;tmpEl = AddFieldElement(doc,fieldsNode,"Guid","tp_Guid","GUID","GUID",true,true,true);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;tmpEl = AddFieldElement(doc,fieldsNode,"DateTime","datetime1","EventDate","Begin",false,false,true);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"Format",null,"DateTime");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"Sealed",null,"TRUE");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"Required",null,"TRUE");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"Filterable",null,"FALSE");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"FilterableNoRecurrence",null,"TRUE");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;tmpEl = AddFieldElement(doc,fieldsNode,"DateTime","datetime2","EndDate","End",false,false,true);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"Format",null,"DateTime");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"Sealed",null,"TRUE");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"Filterable",null,"FALSE");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"FilterableNoRecurrence",null,"TRUE");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;tmpEl = AddFieldElement(doc,fieldsNode,"Note","ntext2","Description","Description",false,false,false);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"Sealed",null,"TRUE");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"Sortable",null,"False");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;tmpEl = AddFieldElement(doc,fieldsNode,"Text","nvarchar","Location","Location",false,false,false);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"Sealed",null,"TRUE");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;tmpEl = AddFieldElement(doc,fieldsNode,"Recurrence","bit1","fRecurrence","Recurrence",false,false,false);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"DisplayImage",null,"recur.gif");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"HeaderImage",null,"recur.gif");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"ClassInfo",null,"Icon");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"Sealed",null,"TRUE");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"NoEditFormBreak",null,"TRUE");&lt;BR&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;tmpEl = AddFieldElement(doc,fieldsNode,"CrossProjectLink","bit2","WorkspaceLink","Workspace",false,false,false);&lt;BR&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"Format",null,"EventList");&lt;BR&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"DisplayImage",null,"mtgicon.gif");&lt;BR&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"HeaderImage",null,"mtgicnhd.gif");&lt;BR&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"ClassInfo",null,"Icon");&lt;BR&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"Title",null,"Meeting Workspace");&lt;BR&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"Filterable",null,"TRUE");&lt;BR&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"Sealed",null,"TRUE");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;tmpEl = AddFieldElement(doc,fieldsNode,"Integer","int1","EventType","Event Type",false,true,false);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"Sealed",null,"TRUE");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;tmpEl = AddFieldElement(doc,fieldsNode,"Guid","uniqueidentifier1","UID","UID",false,true,false);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"Sealed",null,"TRUE");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;tmpEl = AddFieldElement(doc,fieldsNode,"DateTime","datetime3","RecurrenceID","Recurrence ID",false,true,false);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"Sealed",null,"TRUE");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"CalType",null,"1");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"Format",null,"ISO8601Gregorian");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;tmpEl = AddFieldElement(doc,fieldsNode,"Boolean","bit3","EventCanceled","Event Canceled",false,true,false);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"Sealed",null,"TRUE");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;tmpEl = AddFieldElement(doc,fieldsNode,"Integer","int2","Duration","Duration",false,true,false);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"Sealed",null,"TRUE");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;tmpEl = AddFieldElement(doc,fieldsNode,"Note","ntext3","RecurrenceData","RecurrenceData",false,true,false);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"Sealed",null,"TRUE");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;tmpEl = AddFieldElement(doc,fieldsNode,"Integer","int3","TimeZone","TimeZone",false,true,false);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"Sealed",null,"TRUE");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;tmpEl = AddFieldElement(doc,fieldsNode,"Note","ntext4","XMLTZone","XMLTZone",false,true,false);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"Sealed",null,"TRUE");&lt;BR&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;tmpEl = AddFieldElement(doc,fieldsNode,"Integer","int4","MasterSeriesItemID","MasterSeriesItemID",false,true,false);&lt;BR&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"Sealed",null,"TRUE");&lt;BR&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;tmpEl = AddFieldElement(doc,fieldsNode,"URL","nvarchar3","Workspace","WorkspaceUrl",false,true,false);&lt;BR&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"Sealed",null,"TRUE");&lt;BR&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;AddAttribute(tmpEl,null,"ColName2",null,"nvarchar4");&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Return the XML&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;return doc;&lt;BR&gt;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&lt;/P&gt;&lt;/CODE&gt;
&lt;P mce_keep="true"&gt;You'll notice that I have commented out a few lines in this method. There are probably more lines that can be commented out. We're not returning all the information that SharePoint would return, but it's not all useful to Outlook, so why clog the ethernet lines with useless data?!&lt;/P&gt;
&lt;P mce_keep="true"&gt;Anyway, once you've made those modifications, you can recompile the web application and you should be golden!&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1115855" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/pcreehan/archive/tags/Outlook/default.aspx">Outlook</category><category domain="http://blogs.msdn.com/pcreehan/archive/tags/Outlook+2007/default.aspx">Outlook 2007</category><category domain="http://blogs.msdn.com/pcreehan/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/pcreehan/archive/tags/STSSync/default.aspx">STSSync</category><category domain="http://blogs.msdn.com/pcreehan/archive/tags/SharePoint/default.aspx">SharePoint</category></item></channel></rss>