<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US"><title type="html">Ben Hickman's blog</title><subtitle type="html" /><id>http://blogs.msdn.com/ben_hickman/atom.xml</id><link rel="alternate" type="text/html" href="http://blogs.msdn.com/ben_hickman/default.aspx" /><link rel="self" type="application/atom+xml" href="http://blogs.msdn.com/ben_hickman/atom.xml" /><generator uri="http://communityserver.org" version="2.1.61025.2">Community Server</generator><updated>2008-06-24T11:49:16Z</updated><entry><title>New Eval Guides for SharePoint 2010</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/ben_hickman/archive/2009/11/02/new-eval-guides-for-sharepoint-2010.aspx" /><id>http://blogs.msdn.com/ben_hickman/archive/2009/11/02/new-eval-guides-for-sharepoint-2010.aspx</id><published>2009-11-02T17:34:40Z</published><updated>2009-11-02T17:34:40Z</updated><content type="html">&lt;p&gt;We published evaluation guides for SharePoint 2010 at the conference a few weeks ago. Reading these guides is a great way to get familiar with SharePoint 2010 and get ready for the beta. Highly recommended:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://go.microsoft.com/fwlink/?LinkId=167123"&gt;IT Pro Eval Guide&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=cffb14e8-88a9-43bd-87aa-4792ab60d320&amp;amp;displaylang=en"&gt;Developer Eval Guide&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9916263" width="1" height="1"&gt;</content><author><name>Ben Hickman</name><uri>http://blogs.msdn.com/members/Ben+Hickman.aspx</uri></author></entry><entry><title>How To Automatically Changing Permissions in a Doc Lib</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/ben_hickman/archive/2009/06/05/how-to-automatically-changing-permissions-in-a-doc-lib.aspx" /><id>http://blogs.msdn.com/ben_hickman/archive/2009/06/05/how-to-automatically-changing-permissions-in-a-doc-lib.aspx</id><published>2009-06-05T18:46:53Z</published><updated>2009-06-05T18:46:53Z</updated><content type="html">&lt;p&gt;Or, how do you get Item-Level Permissions settings for a document library?&lt;/p&gt;  &lt;p&gt;This frequently comes up for me with InfoPath forms libraries. For example, you are automating an HR performance review process with SharePoint workflow and InfoPath forms. Reviewers will go to a SharePoint form library, click New and fill out a performance review form for a coworker. User must be able to only see their forms. And managers must be able to see the forms for their direct reports.&lt;/p&gt;  &lt;p&gt;If you look at the &lt;strong&gt;Advanced Settings&lt;/strong&gt; for a SharePoint list (e.g. a Task list or custom list), you will see these options:     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/ben_hickman/WindowsLiveWriter/HowToAutomaticallyChangingPermissionsina_98EE/ItemLevelPermissions_2.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="ItemLevelPermissions" border="0" alt="ItemLevelPermissions" src="http://blogs.msdn.com/blogfiles/ben_hickman/WindowsLiveWriter/HowToAutomaticallyChangingPermissionsina_98EE/ItemLevelPermissions_thumb.jpg" width="474" height="151" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;This looks like exactly what you want. However, if you look at the Advanced Settings for a document library, there are no such settings. &lt;/p&gt;  &lt;p&gt;Fortunately, there is a codeplex solution: &lt;a href="http://spchangepermission.codeplex.com/"&gt;Change item’s permissions on creation&lt;/a&gt;. I really like this implementation because it is an Information Management policy. I started looking into implementation a solution myself and the tricky part started to be: how is a user going to specify the document library. Using an Information Management policy is perfect because it uses an existing mechanism for making library-wide settings.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9701499" width="1" height="1"&gt;</content><author><name>Ben Hickman</name><uri>http://blogs.msdn.com/members/Ben+Hickman.aspx</uri></author><category term="Permissions" scheme="http://blogs.msdn.com/ben_hickman/archive/tags/Permissions/default.aspx" /></entry><entry><title>SharePoint Designer Workflows – what user identity?</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/ben_hickman/archive/2009/06/04/sharepoint-designer-workflows-what-user-identity.aspx" /><id>http://blogs.msdn.com/ben_hickman/archive/2009/06/04/sharepoint-designer-workflows-what-user-identity.aspx</id><published>2009-06-04T20:30:16Z</published><updated>2009-06-04T20:30:16Z</updated><content type="html">&lt;p&gt;When a SharePoint Designer (SPD) workflow runs, it runs in the context of the workflow initiator. This is important to know if the initiator may not have permissions to everything that the workflow uses.&lt;/p&gt;  &lt;p&gt;An example: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;A broad set of users have permissions to load documents into a library named &lt;strong&gt;Active&lt;/strong&gt;.&lt;/li&gt;    &lt;li&gt;A small set of users process the documents and change a &lt;strong&gt;Status&lt;/strong&gt; column to &lt;strong&gt;Verified&lt;/strong&gt; when done (it’s preset to &lt;strong&gt;New&lt;/strong&gt; in the previous step).&lt;/li&gt;    &lt;li&gt;You want a workflow to move the documents from the &lt;strong&gt;Active &lt;/strong&gt;library to the &lt;strong&gt;Archive&lt;/strong&gt; library when Status = Verified.&lt;/li&gt;    &lt;li&gt;The users that load documents into &lt;strong&gt;Active&lt;/strong&gt; do not have any permissions to &lt;strong&gt;Archive&lt;/strong&gt;.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;You have two choices for creating this workflow in SPD:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Automatically start this workflow when a new item is created, with these steps:     &lt;br /&gt;      &lt;br /&gt;&lt;a href="http://blogs.msdn.com/blogfiles/ben_hickman/WindowsLiveWriter/SharePointDesignerWorkflowswhatuserident_93AF/WF-Wait_2.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="WF-Wait" border="0" alt="WF-Wait" src="http://blogs.msdn.com/blogfiles/ben_hickman/WindowsLiveWriter/SharePointDesignerWorkflowswhatuserident_93AF/WF-Wait_thumb.jpg" width="547" height="187" /&gt;&lt;/a&gt;       &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;Automatically start this workflow whenever an item is changed, with these steps:     &lt;br /&gt;      &lt;br /&gt;&lt;a href="http://blogs.msdn.com/blogfiles/ben_hickman/WindowsLiveWriter/SharePointDesignerWorkflowswhatuserident_93AF/WF-Condition_2.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="WF-Condition" border="0" alt="WF-Condition" src="http://blogs.msdn.com/blogfiles/ben_hickman/WindowsLiveWriter/SharePointDesignerWorkflowswhatuserident_93AF/WF-Condition_thumb.jpg" width="546" height="167" /&gt;&lt;/a&gt; &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Both workflows will run under the context of the initiator. In this case, the initiators will be different and have different permissions. &lt;/p&gt;  &lt;p&gt;In the first case, the initiator is the user that loaded the document and that user does not have permissions to the Archive library. Meaning this workflow will always fail because it will not have permissions to perform the copy step.&lt;/p&gt;  &lt;p&gt;In the second case, the initiator is the user that changes the status to verified. That will be a user with permissions to the Archive library. That workflow will succeed.&lt;/p&gt;  &lt;p&gt;So consider permissions when choosing between various SPD workflow options.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9700008" width="1" height="1"&gt;</content><author><name>Ben Hickman</name><uri>http://blogs.msdn.com/members/Ben+Hickman.aspx</uri></author><category term="SharePoint Designer" scheme="http://blogs.msdn.com/ben_hickman/archive/tags/SharePoint+Designer/default.aspx" /><category term="Workflow" scheme="http://blogs.msdn.com/ben_hickman/archive/tags/Workflow/default.aspx" /><category term="codeplex" scheme="http://blogs.msdn.com/ben_hickman/archive/tags/codeplex/default.aspx" /></entry><entry><title>Secondary Workflow Example in SharePoint Designer</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/ben_hickman/archive/2009/05/26/secondary-workflow-example-in-sharepoint-designer.aspx" /><id>http://blogs.msdn.com/ben_hickman/archive/2009/05/26/secondary-workflow-example-in-sharepoint-designer.aspx</id><published>2009-05-27T01:49:49Z</published><updated>2009-05-27T01:49:49Z</updated><content type="html">&lt;p&gt;I recently built a prototype to show how SharePoint and SharePoint Designer workflows can be used to automate an HR performance review process. I had to use a secondary workflow as described in &lt;a href="http://office.microsoft.com/en-us/sharepointdesigner/HA102376561033.aspx?pid=CH100667661033"&gt;SharePoint Designer: Create a secondary workflow&lt;/a&gt;, but had to come up with a different solution for how to set due dates. Following is an explanation of why I needed the secondary workflow for this example and how I got the due dates to work.&lt;/p&gt;  &lt;p&gt;The basic requirements are:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;A manager wants to start a performance review process for an employee.&lt;/li&gt;    &lt;li&gt;Each employee has some list of people to review them. &lt;/li&gt;    &lt;li&gt;The review consists of filling out an InfoPath form.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I created the following in SharePoint:&lt;/p&gt;  &lt;table border="1" cellspacing="0" cellpadding="2" width="564"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="200"&gt;&lt;strong&gt;List/Library&lt;/strong&gt;&lt;/td&gt;        &lt;td valign="top" width="362"&gt;&lt;strong&gt;Purpose&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="200"&gt;Performance Reviews&lt;/td&gt;        &lt;td valign="top" width="362"&gt;An InfoPath form library that will contain completed review forms. This form library contains the performance review form as an InfoPath form template.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="200"&gt;Reviewer Tasks&lt;/td&gt;        &lt;td valign="top" width="362"&gt;A task list to store tasks assigned to reviewers.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="200"&gt;Reviewers&lt;/td&gt;        &lt;td valign="top" width="362"&gt;A custom list of reviewers for each person being reviewed. This list has two columns: Employee and Reviewers. The latter is a multiple select Person column.&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Now the workflows. A workflow needs a list or library item to be started. Since the Performance Reviews form library only contains completed review forms, it is not a candidate for the workflow. Instead, my Reviewers list contains the mapping between employees and reviewers and is where the workflow will start. Following the diagramming used in the referenced article, here are my lists and workflows:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/ben_hickman/WindowsLiveWriter/SharePointDesignerworkflow_A182/WorkflowSecondary_2.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="WorkflowSecondary" border="0" alt="WorkflowSecondary" src="http://blogs.msdn.com/blogfiles/ben_hickman/WindowsLiveWriter/SharePointDesignerworkflow_A182/WorkflowSecondary_thumb.jpg" width="640" height="269" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;A manager manually starts the &lt;strong&gt;Performance Review&lt;/strong&gt; workflow for a particular employee. This workflow uses an initiation variable to get the &lt;strong&gt;Due Date&lt;/strong&gt; for the performance review from the manager. &lt;/li&gt;    &lt;li&gt;The &lt;strong&gt;Performance Review&lt;/strong&gt; workflow creates tasks for each of the reviewers. &lt;/li&gt;    &lt;li&gt;The &lt;strong&gt;Set Task Details&lt;/strong&gt; workflow runs automatically on each of the new tasks to set their details and send email notifications to the reviewers. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;The Performance Review workflow uses the &lt;strong&gt;Assign a To-Do Item&lt;/strong&gt; action to assign tasks to the reviewers.The &lt;strong&gt;Set Task Details&lt;/strong&gt; workflow is required because the &lt;strong&gt;Assign a To-Do Item&lt;/strong&gt; action has the following limitations in this case:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;It only supports a static title and description. I need both the title and the description to include lookup fields so the assigned tasks are most meaningful to the reviewers (e.g. “Please complete a performance review for Ben Hickman”). &lt;/li&gt;    &lt;li&gt;It doesn’t support a due date. I want to set a due date on the tasks. &lt;/li&gt;    &lt;li&gt;It does not send email notifications that a task has been assigned. I could setup Alerts on the task list, but I want control over the format and details of the email notifications. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Now the trick is: how does the Secondary Workflow find the Employee name and the Due Date? As described in the article referenced above, the Secondary Workflow can use the &lt;strong&gt;Current Item – Workflow Item ID&lt;/strong&gt; to reference the Reviewers item id that caused the task to be created. I can then use that Workflow Item ID to lookup the associated item in the Reviewers list and lookup the Employee name, like this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/ben_hickman/WindowsLiveWriter/SharePointDesignerworkflow_A182/WorkflowItemID_2.jpg"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="WorkflowItemID" border="0" alt="WorkflowItemID" src="http://blogs.msdn.com/blogfiles/ben_hickman/WindowsLiveWriter/SharePointDesignerworkflow_A182/WorkflowItemID_thumb.jpg" width="384" height="271" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now, how about the Due Date? Since I gathered that as an initiation variable in the Primary Workflow, it’s not immediately available to the Secondary Workflow. So, I better make it available. I do that by having the Primary Workflow store it in the Current Due Date column in the Reviewers list. Then, the Secondary workflow can look it up just like Employee like this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/ben_hickman/WindowsLiveWriter/SharePointDesignerworkflow_A182/WorkflowDueDate_2.jpg"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="WorkflowDueDate" border="0" alt="WorkflowDueDate" src="http://blogs.msdn.com/blogfiles/ben_hickman/WindowsLiveWriter/SharePointDesignerworkflow_A182/WorkflowDueDate_thumb.jpg" width="384" height="272" /&gt;&lt;/a&gt; Now I have tasks with rich titles and descriptions, specific due dates, and detailed notification emails.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9642542" width="1" height="1"&gt;</content><author><name>Ben Hickman</name><uri>http://blogs.msdn.com/members/Ben+Hickman.aspx</uri></author><category term="SharePoint Designer" scheme="http://blogs.msdn.com/ben_hickman/archive/tags/SharePoint+Designer/default.aspx" /><category term="Workflow" scheme="http://blogs.msdn.com/ben_hickman/archive/tags/Workflow/default.aspx" /></entry><entry><title>Content Query Web Part example</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/ben_hickman/archive/2009/05/22/content-query-web-part-example.aspx" /><id>http://blogs.msdn.com/ben_hickman/archive/2009/05/22/content-query-web-part-example.aspx</id><published>2009-05-22T23:42:55Z</published><updated>2009-05-22T23:42:55Z</updated><content type="html">&lt;p&gt;I recently got deeper into using the Content Query Web Part (CQWP) than I had in a while and learned a few things. The first thing you should do to learn about the CQWP is read this article from &lt;a href="http://www.heathersolomon.com"&gt;Heather Solomon&lt;/a&gt;’s blog: &lt;a href="http://www.heathersolomon.com/blog/articles/CustomItemStyle.aspx"&gt;Customizing the Content Query Web Part and Custom Item Styles&lt;/a&gt;. I follow the process she describes when using the CQWP.&lt;/p&gt;  &lt;h4&gt;The Solution&lt;/h4&gt;  &lt;p&gt;We built a Site Collection that included a top-level site with highlighted and summary content and a large number of sub-sites that included wikis and blogs. Each sub-site had a different group of content contributors. The owner of the top-level site wants to be able to highlight and promote sub-site content to the top landing page. I built this with a custom list and a CQWP.&lt;/p&gt;  &lt;p&gt;The custom list contains enough columns to reference content by URL and add summary info that can be display at the top-level landing page:&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Columns" border="0" alt="Columns" src="http://blogs.msdn.com/blogfiles/ben_hickman/WindowsLiveWriter/ContentQueryWebPartexample_BA31/Columns_3.jpg" width="613" height="353" /&gt; &lt;/p&gt;  &lt;p&gt;Then I placed a CQWP on the landing page to display that custom list with a specific layout:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/ben_hickman/WindowsLiveWriter/ContentQueryWebPartexample_BA31/CQWP_2.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="CQWP" border="0" alt="CQWP" src="http://blogs.msdn.com/blogfiles/ben_hickman/WindowsLiveWriter/ContentQueryWebPartexample_BA31/CQWP_thumb.jpg" width="576" height="158" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h4&gt;CQWP Details&lt;/h4&gt;  &lt;p&gt;Here is what I learned in the process. All of this applies to the XSL you write in ItemStyle.xsl.&lt;/p&gt;  &lt;h5&gt;Debugging&lt;/h5&gt;  &lt;p&gt;When working with custom fields in the XSL, it was helpful to use this to display all the column names and their values:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Consolas"&gt;&amp;lt;xsl:for-each select=&amp;quot;@*&amp;quot;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; F:&amp;lt;xsl:value-of select=&amp;quot;name()&amp;quot;/&amp;gt;--&amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;        &lt;br /&gt;&amp;lt;/xsl:for-each&amp;gt;&lt;/font&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;h5&gt;URL Columns&lt;/h5&gt;  &lt;p&gt;Using the script above on a URL column, you’ll notice that URL values are stored as “http://msdn.microsoft.com, http://msdn.microsoft.com”. This is to support this style of rendering:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Consolas"&gt;&amp;lt;a href=&amp;quot;{substring-before(@URLColumn, ', ')}&amp;quot;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:value-of select=&amp;quot;substring-after(@URLColumn, ', ')&amp;quot;/&amp;gt;        &lt;br /&gt;&amp;lt;/a&amp;gt;&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Therefore, if you just want the URL, use substring-before(@URLColumn, ‘, ‘).&lt;/p&gt;  &lt;h5&gt;Pictures and Rich Text&lt;/h5&gt;  &lt;p&gt;Both Picture and Rich Text column types are stored with embedded HTML markup. By default, when you use XSL to render these column values, the HTML is escaped and the viewer sees the actual markup rather than just the formatted content. To render these column values, use the disable-output-escaping attribute:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Consolas"&gt;&amp;lt;div class=&amp;quot;image-area-left&amp;quot;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:value-of select=&amp;quot;@Icon&amp;quot; disable-output-escaping=&amp;quot;yes&amp;quot;/&amp;gt;        &lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;h5&gt;Rating Web Part&lt;/h5&gt;  &lt;p&gt;Finally, I used the &lt;a href="http://sptoolbasket.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=21960"&gt;Rating web part&lt;/a&gt; from &lt;a href="http://www.codeplex.com"&gt;Codeplex&lt;/a&gt; to allow viewers to rate the content. Now I needed to display the rating value or a link to rate the item in the CQWP. Here’s how I did that:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Consolas"&gt;&amp;lt;xsl:variable name=&amp;quot;ListGuid&amp;quot;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:value-of select=&amp;quot;@ListId&amp;quot;/&amp;gt;        &lt;br /&gt;&amp;lt;/xsl:variable&amp;gt;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font face="Consolas"&gt;       &lt;br /&gt;&amp;lt;xsl:variable name=&amp;quot;ItemId&amp;quot;&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:value-of select=&amp;quot;@ID&amp;quot;/&amp;gt;        &lt;br /&gt;&amp;lt;/xsl:variable&amp;gt; &lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;font face="Consolas"&gt;&amp;lt;div&amp;gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:choose&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:when test=&amp;quot;contains($Rating, '(5)')&amp;quot;&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;img src=&amp;quot;/_layouts/images/sptoolbasket/rating_5.gif&amp;quot; alt=&amp;quot;{$Rating}&amp;quot;/&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/xsl:when&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:when test=&amp;quot;contains($Rating, '(4)')&amp;quot;&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;img src=&amp;quot;/_layouts/images/sptoolbasket/rating_4.gif&amp;quot; alt=&amp;quot;{$Rating}&amp;quot;/&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/xsl:when&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:when test=&amp;quot;contains($Rating, '(3)')&amp;quot;&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;img src=&amp;quot;/_layouts/images/sptoolbasket/rating_3.gif&amp;quot; alt=&amp;quot;{$Rating}&amp;quot;/&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/xsl:when&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:when test=&amp;quot;contains($Rating, '(2)')&amp;quot;&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;img src=&amp;quot;/_layouts/images/sptoolbasket/rating_2.gif&amp;quot; alt=&amp;quot;{$Rating}&amp;quot;/&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/xsl:when&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:when test=&amp;quot;contains($Rating, '(1)')&amp;quot;&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;img src=&amp;quot;/_layouts/images/sptoolbasket/rating_1.gif&amp;quot; alt=&amp;quot;{$Rating}&amp;quot;/&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/xsl:when&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;xsl:otherwise&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;a href=&amp;quot;&lt;/font&gt;&lt;a href="http://moss:813/_layouts/sptoolbasket/ItemRating.aspx?Id={"&gt;&lt;font face="Consolas"&gt;/_layouts/sptoolbasket/ItemRating.aspx?Id={&lt;/font&gt;&lt;/a&gt;&lt;font face="Consolas"&gt;$ItemId}&amp;amp;amp;List={$ListGuid}&amp;quot;&amp;gt;Rate&amp;lt;/a&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/xsl:otherwise&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/xsl:choose&amp;gt;        &lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;The CQWP is powerful both for formatting the display as well as query content. In this particular case, I used the former more than the latter since I was only querying a single list.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9635921" width="1" height="1"&gt;</content><author><name>Ben Hickman</name><uri>http://blogs.msdn.com/members/Ben+Hickman.aspx</uri></author><category term="CQWP" scheme="http://blogs.msdn.com/ben_hickman/archive/tags/CQWP/default.aspx" /></entry><entry><title>Accessing columns in the User Information List</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/ben_hickman/archive/2009/05/22/accessing-columns-in-the-user-information-list.aspx" /><id>http://blogs.msdn.com/ben_hickman/archive/2009/05/22/accessing-columns-in-the-user-information-list.aspx</id><published>2009-05-22T23:07:04Z</published><updated>2009-05-22T23:07:04Z</updated><content type="html">&lt;p&gt;I was recently asked how to programmatically retrieve custom fields from the User Information List via a Web service.&lt;/p&gt;  &lt;p&gt;It turns out that the &lt;a href="http://msdn.microsoft.com/en-us/library/ms774637.aspx"&gt;GetUserInfo&lt;/a&gt; web method does not return any custom fields that you might add to the User Information List (aka People &amp;amp; Groups).&lt;/p&gt;  &lt;p&gt;Instead, just treat this as a regular SharePoint list and you can access the columns via the &lt;a href="http://msdn.microsoft.com/en-us/library/lists.lists.getlistitems.aspx"&gt;GetListItems&lt;/a&gt; web method from &lt;a href="http://msdn.microsoft.com/en-us/library/lists.aspx"&gt;Lists.asmx&lt;/a&gt;.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Consolas"&gt;static void Main(string[] args)       &lt;br /&gt;{        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ListsService.Lists svcLists = new ListsService.Lists();        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; svcLists.Credentials = CredentialCache.DefaultCredentials;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; XmlDocument doc = new XmlDocument();         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; doc.LoadXml(&amp;quot;&amp;lt;Document&amp;gt;&amp;lt;Query /&amp;gt;&amp;lt;ViewFields /&amp;gt;&amp;lt;QueryOptions /&amp;gt;&amp;lt;/Document&amp;gt;&amp;quot;);         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; XmlNode listQuery = doc.SelectSingleNode(&amp;quot;//Query&amp;quot;);         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; XmlNode listViewFields = doc.SelectSingleNode(&amp;quot;//ViewFields&amp;quot;);         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; XmlNode listQueryOptions = doc.SelectSingleNode(&amp;quot;//QueryOptions&amp;quot;);         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Guid g = GetWebID(&amp;quot;&lt;/font&gt;&lt;a href="http://moss.litwareinc.com&amp;quot;);"&gt;&lt;font face="Consolas"&gt;http://moss.litwareinc.com&amp;quot;);&lt;/font&gt;&lt;/a&gt;      &lt;br /&gt;&lt;font face="Consolas"&gt;&amp;#160;&amp;#160;&amp;#160; System.Xml.XmlNode items = svcLists.GetListItems(&amp;quot;User Information List&amp;quot;,        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; string.Empty, listQuery, listViewFields, string.Empty, listQueryOptions, &lt;/font&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font face="Consolas"&gt;g.ToString());       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Console.WriteLine(items.OuterXml);        &lt;br /&gt;} &lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font face="Consolas"&gt;private static Guid GetWebID(string webPath)        &lt;br /&gt;{        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; SiteDataService.SiteData svcSiteData = new SiteDataService.SiteData();         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; svcSiteData.UseDefaultCredentials = true;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; SiteDataService._sWebMetadata webMetaData;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; SiteDataService._sWebWithTime[] arrWebWithTime;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; SiteDataService._sListWithTime[] arrListWithTime;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; SiteDataService._sFPUrl[] arrUrls;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; string roles;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; string[] roleUsers;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; string[] roleGroups;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; svcSiteData.Url = webPath + &amp;quot;/_vti_bin/sitedata.asmx&amp;quot;;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; uint i = svcSiteData.GetWeb(out webMetaData, out arrWebWithTime,         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; out arrListWithTime, out arrUrls, out roles, out roleUsers,         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; out roleGroups);         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Guid g = new Guid(webMetaData.WebID);         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; return g;         &lt;br /&gt;} &lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Now if I add a column to the User Information List, that new column appears in the items list.&lt;/p&gt;  &lt;p&gt;One other option is RSS. The User Information List has an RSS feed and you can configure it to include your custom columns. Of course, this only shows new records and is not useful for export or update.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9635863" width="1" height="1"&gt;</content><author><name>Ben Hickman</name><uri>http://blogs.msdn.com/members/Ben+Hickman.aspx</uri></author><category term="Web Services" scheme="http://blogs.msdn.com/ben_hickman/archive/tags/Web+Services/default.aspx" /></entry><entry><title>One Part of Microsoft.com now running on SharePoint</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/ben_hickman/archive/2009/05/21/one-part-of-microsoft-com-now-running-on-sharepoint.aspx" /><id>http://blogs.msdn.com/ben_hickman/archive/2009/05/21/one-part-of-microsoft-com-now-running-on-sharepoint.aspx</id><published>2009-05-21T21:27:03Z</published><updated>2009-05-21T21:27:03Z</updated><content type="html">&lt;p&gt;Yesterday &lt;a href="http://www.microsoft.com/sharepoint"&gt;http://www.microsoft.com/sharepoint&lt;/a&gt; converted over to SharePoint and Silverlight. It’s nice to have a microsoft.com example to add to the list of &lt;a href="http://www.wssdemo.com/Pages/websites.aspx"&gt;public facing sites&lt;/a&gt; running SharePoint.&lt;/p&gt;  &lt;p&gt;There’s an upcoming SharePoint team blog posting on how it was done.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9634132" width="1" height="1"&gt;</content><author><name>Ben Hickman</name><uri>http://blogs.msdn.com/members/Ben+Hickman.aspx</uri></author><category term="Public Site" scheme="http://blogs.msdn.com/ben_hickman/archive/tags/Public+Site/default.aspx" /></entry><entry><title>SharePoint Server 2010 announced</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/ben_hickman/archive/2009/04/15/sharepoint-server-2010-announced.aspx" /><id>http://blogs.msdn.com/ben_hickman/archive/2009/04/15/sharepoint-server-2010-announced.aspx</id><published>2009-04-15T19:41:05Z</published><updated>2009-04-15T19:41:05Z</updated><content type="html">&lt;p&gt;I will need to switch from saying SharePoint 14 to SharePoint 2010 now. Details of the announcement are on the &lt;a href="http://blogs.msdn.com/sharepoint/archive/2009/04/14/microsoft-sharepoint-14-is-now-microsoft-sharepoint-2010.aspx"&gt;SharePoint Team Blog&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9551090" width="1" height="1"&gt;</content><author><name>Ben Hickman</name><uri>http://blogs.msdn.com/members/Ben+Hickman.aspx</uri></author></entry><entry><title>New Capabilities for SharePoint</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/ben_hickman/archive/2009/02/11/new-capabilities-for-sharepoint.aspx" /><id>http://blogs.msdn.com/ben_hickman/archive/2009/02/11/new-capabilities-for-sharepoint.aspx</id><published>2009-02-11T07:25:23Z</published><updated>2009-02-11T07:25:23Z</updated><content type="html">&lt;p&gt;Today we announced the ESP for SharePoint product that provides high end search capabilities within SharePoint. We also detailed the road map for the next version of SharePoint and how these high end search capabilities will be folded into the platform. Details are in the blog posting:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/sharepoint/archive/2009/02/10/microsoft-unveils-new-enterprise-search-road-map.aspx"&gt;Microsoft Unveils New Enterprise Search Road Map&lt;/a&gt;&lt;/p&gt; &lt;p&gt;A few weeks ago, we also announced that our BI products, Performance Point, are also being rolled into SharePoint:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/sharepoint/archive/2009/01/23/microsoft-business-intelligence-strategy-update-and-sharepoint.aspx"&gt;Microsoft Business Intelligence strategy update and SharePoint&lt;/a&gt;&lt;/p&gt; &lt;p&gt;This is huge news for SharePoint and our customers that have already made an investment in this platform. Powerful new capabilities have been added to SharePoint to democratize BI and enable powerful and customizable search experiences.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9411992" width="1" height="1"&gt;</content><author><name>Ben Hickman</name><uri>http://blogs.msdn.com/members/Ben+Hickman.aspx</uri></author></entry><entry><title>New SharePoint for Developers Ramp Up Training</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/ben_hickman/archive/2008/11/12/new-sharepoint-for-developers-ramp-up-training.aspx" /><id>http://blogs.msdn.com/ben_hickman/archive/2008/11/12/new-sharepoint-for-developers-ramp-up-training.aspx</id><published>2008-11-13T02:38:00Z</published><updated>2008-11-13T02:38:00Z</updated><content type="html">&lt;P&gt;As part of the MSDN &lt;A href="http://msdn.microsoft.com/en-us/rampup/default.aspx" mce_href="http://msdn.microsoft.com/en-us/rampup/default.aspx"&gt;Ramp Up&lt;/A&gt; training program, there is now a track for SharePoint Developers:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;A href="http://msdn.microsoft.com/en-us/rampup/dd221355.aspx" mce_href="http://msdn.microsoft.com/en-us/rampup/dd221355.aspx"&gt;SharePoint for Developers Track&lt;/A&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;This track consists of 5 levels of training content:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Web Parts&lt;/LI&gt;
&lt;LI&gt;Data Lists&lt;/LI&gt;
&lt;LI&gt;Event Handlers&lt;/LI&gt;
&lt;LI&gt;Workflow&lt;/LI&gt;
&lt;LI&gt;Silverlight Web Parts&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;Each level contains a collection of articles, slide casts, code casts, and virtual labs. This is an awesome new resource to get up to speed with SharePoint development quickly.&lt;/P&gt;
&lt;P&gt;Did I mention it's free of charge?&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9064674" width="1" height="1"&gt;</content><author><name>Ben Hickman</name><uri>http://blogs.msdn.com/members/Ben+Hickman.aspx</uri></author><category term="Reference Material" scheme="http://blogs.msdn.com/ben_hickman/archive/tags/Reference+Material/default.aspx" /></entry><entry><title>SharePoint Guidance from Patterns &amp; Practices</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/ben_hickman/archive/2008/11/07/sharepoint-guidance-from-patterns-practices.aspx" /><id>http://blogs.msdn.com/ben_hickman/archive/2008/11/07/sharepoint-guidance-from-patterns-practices.aspx</id><published>2008-11-07T19:38:14Z</published><updated>2008-11-07T19:38:14Z</updated><content type="html">&lt;p&gt;The &lt;a href="http://msdn.microsoft.com/en-us/practices/default.aspx"&gt;Patterns &amp;amp; Practices&lt;/a&gt; group at Microsoft has just released SharePoint Guidance documents. This is Microsoft's recommendations for how to design, develop, deploy and operate architecturally sound applications on the Microsoft platform.&lt;/p&gt; &lt;p&gt;This guidance documentation set is targeted at helping you build intranet applications with SharePoint. It's not just a whitepaper. It includes a reference implementation of a training management application built on SharePoint. Meaning you get a better understand of not only the technical details of how to implement the solution, but also the architectural decisions about patterns, factoring, and packaging. You'll also see the design tradeoffs that you will likely encounter when creating intranet applications with MOSS.&lt;/p&gt; &lt;p&gt;Highly recommended:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;SharePoint Guidance: &lt;a href="http://microsoft.com/spg"&gt;http://microsoft.com/spg&lt;/a&gt;&lt;/li&gt; &lt;li&gt;Codeplex site: &lt;a href="http://codeplex.com/spg"&gt;http://codeplex.com/spg&lt;/a&gt;&lt;/li&gt; &lt;li&gt;Community forum: &lt;a href="http://www.codeplex.com/spg/Thread/List.aspx"&gt;http://www.codeplex.com/spg/Thread/List.aspx&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9052498" width="1" height="1"&gt;</content><author><name>Ben Hickman</name><uri>http://blogs.msdn.com/members/Ben+Hickman.aspx</uri></author><category term="Development" scheme="http://blogs.msdn.com/ben_hickman/archive/tags/Development/default.aspx" /><category term="Reference Material" scheme="http://blogs.msdn.com/ben_hickman/archive/tags/Reference+Material/default.aspx" /></entry><entry><title>New Home for Ben Hickman's Blog</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/ben_hickman/archive/2008/11/06/new-home-for-ben-hickman-s-blog.aspx" /><id>http://blogs.msdn.com/ben_hickman/archive/2008/11/06/new-home-for-ben-hickman-s-blog.aspx</id><published>2008-11-07T01:11:07Z</published><updated>2008-11-07T01:11:07Z</updated><content type="html">&lt;p&gt;If you got a slew of RSS feed updates today it's because I moved my blog over to MSDN.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;I've moved all the old posts over here and this is the new home.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9050705" width="1" height="1"&gt;</content><author><name>Ben Hickman</name><uri>http://blogs.msdn.com/members/Ben+Hickman.aspx</uri></author></entry><entry><title>Office 14 for the Web</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/ben_hickman/archive/2008/10/29/office-14-for-the-web.aspx" /><id>http://blogs.msdn.com/ben_hickman/archive/2008/10/29/office-14-for-the-web.aspx</id><published>2008-10-29T13:51:46Z</published><updated>2008-10-29T13:51:46Z</updated><content type="html">&lt;p&gt;Yesterday at the PDC2008 conference, we announced Office 14 for the Web. There is a great Channel 9 video with a demo: &lt;p&gt;&lt;a href="http://channel9.msdn.com/posts/PDCNews/First-Look-Office-14-for-Web/"&gt;First Look: Office 14 for Web&lt;/a&gt; &lt;p&gt;There are also some good screen shots on Joel Oleson's blog: &lt;p&gt;&lt;a href="http://www.sharepointjoel.com/Lists/Posts/Post.aspx?List=0cd1a63d-183c-4fc2-8320-ba5369008acb&amp;amp;ID=121"&gt;Office 14 Web applications in SharePoint&lt;/a&gt; &lt;p&gt;Office 14 will support rich desktop client, Web browser, and mobile versions of Word, PowerPoint, Excel, and OneNote. The browser versions will be cross platform and cross browser. These versions will also support simultaneous editors of a single document across the three client choices. &lt;p&gt;The Web browser versions will be available through OfficeLive in an ad supported model, as an online subscription or via SharePoint 14.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9050359" width="1" height="1"&gt;</content><author><name>Ben Hickman</name><uri>http://blogs.msdn.com/members/Ben+Hickman.aspx</uri></author></entry><entry><title>Good SharePoint Designer Book</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/ben_hickman/archive/2008/10/01/good-sharepoint-designer-book.aspx" /><id>http://blogs.msdn.com/ben_hickman/archive/2008/10/01/good-sharepoint-designer-book.aspx</id><published>2008-10-01T13:51:05Z</published><updated>2008-10-01T13:51:05Z</updated><content type="html">&lt;p&gt;It's good to see some SharePoint Designer books starting to appear. Even though I use Visual Studio .NET alot, I still use SharePoint Designer for master page development, the Data View Web Part, and simple workflows. &lt;p&gt;I picked up this book and it is especially good at covering the Data View Web Part: &lt;p&gt;&lt;img alt="" src="http://www.microsoft.com/MSPress/books/imgt/12083.gif"&gt; &lt;p&gt;&lt;a href="http://www.microsoft.com/mspress/books/12083.aspx"&gt;Microsoft Office SharePoint Designer 2007 Step by Step&lt;/a&gt; &lt;p&gt;by Penelope Coventry&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9050357" width="1" height="1"&gt;</content><author><name>Ben Hickman</name><uri>http://blogs.msdn.com/members/Ben+Hickman.aspx</uri></author><category term="SharePoint Designer" scheme="http://blogs.msdn.com/ben_hickman/archive/tags/SharePoint+Designer/default.aspx" /><category term="Reference Material" scheme="http://blogs.msdn.com/ben_hickman/archive/tags/Reference+Material/default.aspx" /></entry><entry><title>Content Rating for MOSS Released on CodePlex</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/ben_hickman/archive/2008/06/24/content-rating-for-moss-released-on-codeplex.aspx" /><id>http://blogs.msdn.com/ben_hickman/archive/2008/06/24/content-rating-for-moss-released-on-codeplex.aspx</id><published>2008-06-24T13:49:16Z</published><updated>2008-06-24T13:49:16Z</updated><content type="html">&lt;p&gt;I just found out that a Content Rating solution for MOSS 2007 was released to CodePlex earlier this month: &lt;blockquote&gt; &lt;p&gt;&lt;a href="http://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=sptoolbox&amp;amp;ReleaseId=13878"&gt;Content Rating for MOSS 2007&lt;/a&gt;&amp;nbsp; &lt;a href="http://blogs.msdn.com/blogfiles/ben_hickman/WindowsLiveWriter/ContentRatingforMOSSReleasedonCodePlex_A644/ContentRating_2.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="185" alt="ContentRating" src="http://blogs.msdn.com/blogfiles/ben_hickman/WindowsLiveWriter/ContentRatingforMOSSReleasedonCodePlex_A644/ContentRating_thumb.jpg" width="244" align="right" border="0"&gt;&lt;/a&gt; &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;This is very cool. Now you can build sites that allow users to rate and comment on SharePoint content. For example, create an FAQ site using the Wiki template and allow users to rate the FAQs. &lt;p&gt;It's also used the in the &lt;a href="http://www.codeplex.com/pks"&gt;Podcasting Kit for SharePoint&lt;/a&gt; so users can rate uploaded Podcasts. &lt;p&gt;The solution includes a database schema, web parts, and fields.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9050352" width="1" height="1"&gt;</content><author><name>Ben Hickman</name><uri>http://blogs.msdn.com/members/Ben+Hickman.aspx</uri></author><category term="Components" scheme="http://blogs.msdn.com/ben_hickman/archive/tags/Components/default.aspx" /></entry></feed>