<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Ben Hickman's blog</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/ben_hickman/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/ben_hickman/feed.xml</link>
    <description />
    <lastBuildDate>Wed, 17 Apr 2019 03:18:51 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Eval VM for SharePoint 2010 RTM now available</title>
      <link>https://docs.microsoft.com/archive/blogs/ben_hickman/eval-vm-for-sharepoint-2010-rtm-now-available</link>
      <pubDate>Wed, 12 May 2010 06:13:09 GMT</pubDate>
      <dc:creator><![CDATA[BenHickman]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ben_hickman/2010/05/12/eval-vm-for-sharepoint-2010-rtm-now-available/</guid>
      <description><![CDATA[A virtual machine for the RTM 2010 wave of product releases is now available for download:     2010...]]></description>
      <content:encoded><![CDATA[<p>A virtual machine for the RTM 2010 wave of product releases is now available for download:</p>  <blockquote>   <p><a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=751fa0d1-356c-4002-9c60-d539896c66ce&amp;displaylang=en">2010 Information Worker Demonstration and Evaluation Virtual Machine (RTM)</a></p> </blockquote>  <p>This environment is delivered in two virtual machines. VM “a” contains:</p>  <ol>   <li>Windows Server 2008 R2 Standard Evaluation Edition x64, running as an Active Directory Domain Controller for the “CONTOSO.COM” domain with DNS and WINS </li>    <li>Microsoft SQL Server 2008 R2 Enterprise Edition with Analysis, Notification, and Reporting Services </li>    <li>Microsoft Office Communication Server 2007 R2 </li>    <li>Microsoft Visual Studio 2010 </li>    <li>Microsoft SharePoint Server 2010 Enterprise Edition </li>    <li>Microsoft Office Web Applications </li>    <li>Microsoft FAST Search for SharePoint 2010 </li>    <li>Microsoft Project Server 2010 </li>    <li>Microsoft Office Professional Plus 2010 </li>    <li>Microsoft Visio 2010 </li>    <li>Microsoft Project 2010 </li>    <li>Microsoft Office Communicator 2007 R2</li> </ol>  <p>VM “b” contains:</p>  <ol>   <li>Windows Server 2008 R2 Standard Evaluation Edition x64, joined to the “CONTOSO.COM” domain </li>    <li>Microsoft Exchange Server 2010 </li> </ol>  <p>I use these VMs for demonstrations, testing, and proofs of concepts.</p>]]></content:encoded>
    </item>
    <item>
      <title>Cloud Computing link</title>
      <link>https://docs.microsoft.com/archive/blogs/ben_hickman/cloud-computing-link</link>
      <pubDate>Fri, 09 Apr 2010 15:13:00 GMT</pubDate>
      <dc:creator><![CDATA[BenHickman]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ben_hickman/2010/04/09/cloud-computing-link/</guid>
      <description><![CDATA[Good article with Chris Capossela on Cloud Computing - it's not for control freaks.]]></description>
      <content:encoded><![CDATA[Good article with Chris Capossela on <A href="http://news.cnet.com/8301-13860_3-20001983-56.html" mce_href="http://news.cnet.com/8301-13860_3-20001983-56.html">Cloud Computing - it's not for control freaks</A>.]]></content:encoded>
    </item>
    <item>
      <title>New Eval Guides for SharePoint 2010</title>
      <link>https://docs.microsoft.com/archive/blogs/ben_hickman/new-eval-guides-for-sharepoint-2010</link>
      <pubDate>Mon, 02 Nov 2009 09:34:40 GMT</pubDate>
      <dc:creator><![CDATA[BenHickman]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ben_hickman/2009/11/02/new-eval-guides-for-sharepoint-2010/</guid>
      <description><![CDATA[We published evaluation guides for SharePoint 2010 at the conference a few weeks ago. Reading these...]]></description>
      <content:encoded><![CDATA[<p>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:</p>  <p><a href="http://go.microsoft.com/fwlink/?LinkId=167123">IT Pro Eval Guide</a></p>  <p><a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=cffb14e8-88a9-43bd-87aa-4792ab60d320&amp;displaylang=en">Developer Eval Guide</a></p>]]></content:encoded>
    </item>
    <item>
      <title>How To Automatically Changing Permissions in a Doc Lib</title>
      <link>https://docs.microsoft.com/archive/blogs/ben_hickman/how-to-automatically-changing-permissions-in-a-doc-lib</link>
      <pubDate>Fri, 05 Jun 2009 11:46:53 GMT</pubDate>
      <dc:creator><![CDATA[BenHickman]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ben_hickman/2009/06/05/how-to-automatically-changing-permissions-in-a-doc-lib/</guid>
      <description><![CDATA[Or, how do you get Item-Level Permissions settings for a document library?  This frequently comes up...]]></description>
      <content:encoded><![CDATA[<p>Or, how do you get Item-Level Permissions settings for a document library?</p>  <p>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.</p>  <p>If you look at the <strong>Advanced Settings</strong> for a SharePoint list (e.g. a Task list or custom list), you will see these options:     <br /></p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/ben_hickman/WindowsLiveWriter/HowToAutomaticallyChangingPermissionsina_98EE/ItemLevelPermissions_2.jpg" original-url="http://blogs.msdn.com/blogfiles/ben_hickman/WindowsLiveWriter/HowToAutomaticallyChangingPermissionsina_98EE/ItemLevelPermissions_2.jpg"><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="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/ben_hickman/WindowsLiveWriter/HowToAutomaticallyChangingPermissionsina_98EE/ItemLevelPermissions_thumb.jpg" original-url="http://blogs.msdn.com/blogfiles/ben_hickman/WindowsLiveWriter/HowToAutomaticallyChangingPermissionsina_98EE/ItemLevelPermissions_thumb.jpg" width="474" height="151" /></a> </p>  <p>This looks like exactly what you want. However, if you look at the Advanced Settings for a document library, there are no such settings. </p>  <p>Fortunately, there is a codeplex solution: <a href="http://spchangepermission.codeplex.com/">Change item’s permissions on creation</a>. 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.</p>]]></content:encoded>
    </item>
    <item>
      <title>SharePoint Designer Workflows – what user identity?</title>
      <link>https://docs.microsoft.com/archive/blogs/ben_hickman/sharepoint-designer-workflows-what-user-identity</link>
      <pubDate>Thu, 04 Jun 2009 13:30:16 GMT</pubDate>
      <dc:creator><![CDATA[BenHickman]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ben_hickman/2009/06/04/sharepoint-designer-workflows-what-user-identity/</guid>
      <description><![CDATA[When a SharePoint Designer (SPD) workflow runs, it runs in the context of the workflow initiator....]]></description>
      <content:encoded><![CDATA[<p>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.</p>  <p>An example: </p>  <ul>   <li>A broad set of users have permissions to load documents into a library named <strong>Active</strong>.</li>    <li>A small set of users process the documents and change a <strong>Status</strong> column to <strong>Verified</strong> when done (it’s preset to <strong>New</strong> in the previous step).</li>    <li>You want a workflow to move the documents from the <strong>Active </strong>library to the <strong>Archive</strong> library when Status = Verified.</li>    <li>The users that load documents into <strong>Active</strong> do not have any permissions to <strong>Archive</strong>.</li> </ul>  <p>You have two choices for creating this workflow in SPD:</p>  <ol>   <li>Automatically start this workflow when a new item is created, with these steps:     <br />      <br /><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/ben_hickman/WindowsLiveWriter/SharePointDesignerWorkflowswhatuserident_93AF/WF-Wait_2.jpg" original-url="http://blogs.msdn.com/blogfiles/ben_hickman/WindowsLiveWriter/SharePointDesignerWorkflowswhatuserident_93AF/WF-Wait_2.jpg"><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="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/ben_hickman/WindowsLiveWriter/SharePointDesignerWorkflowswhatuserident_93AF/WF-Wait_thumb.jpg" original-url="http://blogs.msdn.com/blogfiles/ben_hickman/WindowsLiveWriter/SharePointDesignerWorkflowswhatuserident_93AF/WF-Wait_thumb.jpg" width="547" height="187" /></a>       <br /></li>    <li>Automatically start this workflow whenever an item is changed, with these steps:     <br />      <br /><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/ben_hickman/WindowsLiveWriter/SharePointDesignerWorkflowswhatuserident_93AF/WF-Condition_2.jpg" original-url="http://blogs.msdn.com/blogfiles/ben_hickman/WindowsLiveWriter/SharePointDesignerWorkflowswhatuserident_93AF/WF-Condition_2.jpg"><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="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/ben_hickman/WindowsLiveWriter/SharePointDesignerWorkflowswhatuserident_93AF/WF-Condition_thumb.jpg" original-url="http://blogs.msdn.com/blogfiles/ben_hickman/WindowsLiveWriter/SharePointDesignerWorkflowswhatuserident_93AF/WF-Condition_thumb.jpg" width="546" height="167" /></a> </li> </ol>  <p>Both workflows will run under the context of the initiator. In this case, the initiators will be different and have different permissions. </p>  <p>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.</p>  <p>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.</p>  <p>So consider permissions when choosing between various SPD workflow options.</p>]]></content:encoded>
    </item>
    <item>
      <title>Secondary Workflow Example in SharePoint Designer</title>
      <link>https://docs.microsoft.com/archive/blogs/ben_hickman/secondary-workflow-example-in-sharepoint-designer</link>
      <pubDate>Tue, 26 May 2009 18:49:49 GMT</pubDate>
      <dc:creator><![CDATA[BenHickman]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ben_hickman/2009/05/26/secondary-workflow-example-in-sharepoint-designer/</guid>
      <description><![CDATA[I recently built a prototype to show how SharePoint and SharePoint Designer workflows can be used to...]]></description>
      <content:encoded><![CDATA[<p>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 <a href="http://office.microsoft.com/en-us/sharepointdesigner/HA102376561033.aspx?pid=CH100667661033">SharePoint Designer: Create a secondary workflow</a>, 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.</p>  <p>The basic requirements are:</p>  <ul>   <li>A manager wants to start a performance review process for an employee.</li>    <li>Each employee has some list of people to review them. </li>    <li>The review consists of filling out an InfoPath form.</li> </ul>  <p>I created the following in SharePoint:</p>  <table border="1" cellspacing="0" cellpadding="2" width="564"><tbody>     <tr>       <td valign="top" width="200"><strong>List/Library</strong></td>        <td valign="top" width="362"><strong>Purpose</strong></td>     </tr>      <tr>       <td valign="top" width="200">Performance Reviews</td>        <td valign="top" width="362">An InfoPath form library that will contain completed review forms. This form library contains the performance review form as an InfoPath form template.</td>     </tr>      <tr>       <td valign="top" width="200">Reviewer Tasks</td>        <td valign="top" width="362">A task list to store tasks assigned to reviewers.</td>     </tr>      <tr>       <td valign="top" width="200">Reviewers</td>        <td valign="top" width="362">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.</td>     </tr>   </tbody></table>  <p></p>  <p></p>  <p></p>  <p>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:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/ben_hickman/WindowsLiveWriter/SharePointDesignerworkflow_A182/WorkflowSecondary_2.jpg" original-url="http://blogs.msdn.com/blogfiles/ben_hickman/WindowsLiveWriter/SharePointDesignerworkflow_A182/WorkflowSecondary_2.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="WorkflowSecondary" border="0" alt="WorkflowSecondary" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/ben_hickman/WindowsLiveWriter/SharePointDesignerworkflow_A182/WorkflowSecondary_thumb.jpg" original-url="http://blogs.msdn.com/blogfiles/ben_hickman/WindowsLiveWriter/SharePointDesignerworkflow_A182/WorkflowSecondary_thumb.jpg" width="640" height="269" /></a> </p>  <ol>   <li>A manager manually starts the <strong>Performance Review</strong> workflow for a particular employee. This workflow uses an initiation variable to get the <strong>Due Date</strong> for the performance review from the manager. </li>    <li>The <strong>Performance Review</strong> workflow creates tasks for each of the reviewers. </li>    <li>The <strong>Set Task Details</strong> workflow runs automatically on each of the new tasks to set their details and send email notifications to the reviewers. </li> </ol>  <p>The Performance Review workflow uses the <strong>Assign a To-Do Item</strong> action to assign tasks to the reviewers.The <strong>Set Task Details</strong> workflow is required because the <strong>Assign a To-Do Item</strong> action has the following limitations in this case:</p>  <ol>   <li>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”). </li>    <li>It doesn’t support a due date. I want to set a due date on the tasks. </li>    <li>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. </li> </ol>  <p>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 <strong>Current Item – Workflow Item ID</strong> 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:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/ben_hickman/WindowsLiveWriter/SharePointDesignerworkflow_A182/WorkflowItemID_2.jpg" original-url="http://blogs.msdn.com/blogfiles/ben_hickman/WindowsLiveWriter/SharePointDesignerworkflow_A182/WorkflowItemID_2.jpg"><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="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/ben_hickman/WindowsLiveWriter/SharePointDesignerworkflow_A182/WorkflowItemID_thumb.jpg" original-url="http://blogs.msdn.com/blogfiles/ben_hickman/WindowsLiveWriter/SharePointDesignerworkflow_A182/WorkflowItemID_thumb.jpg" width="384" height="271" /></a></p>  <p>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:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/ben_hickman/WindowsLiveWriter/SharePointDesignerworkflow_A182/WorkflowDueDate_2.jpg" original-url="http://blogs.msdn.com/blogfiles/ben_hickman/WindowsLiveWriter/SharePointDesignerworkflow_A182/WorkflowDueDate_2.jpg"><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="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/ben_hickman/WindowsLiveWriter/SharePointDesignerworkflow_A182/WorkflowDueDate_thumb.jpg" original-url="http://blogs.msdn.com/blogfiles/ben_hickman/WindowsLiveWriter/SharePointDesignerworkflow_A182/WorkflowDueDate_thumb.jpg" width="384" height="272" /></a> Now I have tasks with rich titles and descriptions, specific due dates, and detailed notification emails.</p>]]></content:encoded>
    </item>
    <item>
      <title>Content Query Web Part example</title>
      <link>https://docs.microsoft.com/archive/blogs/ben_hickman/content-query-web-part-example</link>
      <pubDate>Fri, 22 May 2009 16:42:55 GMT</pubDate>
      <dc:creator><![CDATA[BenHickman]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ben_hickman/2009/05/22/content-query-web-part-example/</guid>
      <description><![CDATA[I recently got deeper into using the Content Query Web Part (CQWP) than I had in a while and learned...]]></description>
      <content:encoded><![CDATA[<p>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 <a href="http://www.heathersolomon.com">Heather Solomon</a>’s blog: <a href="http://www.heathersolomon.com/blog/articles/CustomItemStyle.aspx">Customizing the Content Query Web Part and Custom Item Styles</a>. I follow the process she describes when using the CQWP.</p>  <h4>The Solution</h4>  <p>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.</p>  <p>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:</p>  <p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Columns" border="0" alt="Columns" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/ben_hickman/WindowsLiveWriter/ContentQueryWebPartexample_BA31/Columns_3.jpg" original-url="http://blogs.msdn.com/blogfiles/ben_hickman/WindowsLiveWriter/ContentQueryWebPartexample_BA31/Columns_3.jpg" width="613" height="353" /> </p>  <p>Then I placed a CQWP on the landing page to display that custom list with a specific layout:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/ben_hickman/WindowsLiveWriter/ContentQueryWebPartexample_BA31/CQWP_2.jpg" original-url="http://blogs.msdn.com/blogfiles/ben_hickman/WindowsLiveWriter/ContentQueryWebPartexample_BA31/CQWP_2.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="CQWP" border="0" alt="CQWP" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/ben_hickman/WindowsLiveWriter/ContentQueryWebPartexample_BA31/CQWP_thumb.jpg" original-url="http://blogs.msdn.com/blogfiles/ben_hickman/WindowsLiveWriter/ContentQueryWebPartexample_BA31/CQWP_thumb.jpg" width="576" height="158" /></a> </p>  <h4>CQWP Details</h4>  <p>Here is what I learned in the process. All of this applies to the XSL you write in ItemStyle.xsl.</p>  <h5>Debugging</h5>  <p>When working with custom fields in the XSL, it was helpful to use this to display all the column names and their values:</p>  <blockquote>   <p><font face="Consolas">&lt;xsl:for-each select=&quot;@*&quot;&gt;       <br />&#160;&#160;&#160; F:&lt;xsl:value-of select=&quot;name()&quot;/&gt;--&lt;xsl:value-of select=&quot;.&quot;/&gt;&lt;br/&gt;        <br />&lt;/xsl:for-each&gt;</font> </p> </blockquote>  <h5>URL Columns</h5>  <p>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:</p>  <blockquote>   <p><font face="Consolas">&lt;a href=&quot;{substring-before(@URLColumn, ', ')}&quot;&gt;       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;xsl:value-of select=&quot;substring-after(@URLColumn, ', ')&quot;/&gt;        <br />&lt;/a&gt;</font></p> </blockquote>  <p>Therefore, if you just want the URL, use substring-before(@URLColumn, ‘, ‘).</p>  <h5>Pictures and Rich Text</h5>  <p>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:</p>  <blockquote>   <p><font face="Consolas">&lt;div class=&quot;image-area-left&quot;&gt;       <br />&#160;&#160;&#160; &lt;xsl:value-of select=&quot;@Icon&quot; disable-output-escaping=&quot;yes&quot;/&gt;        <br />&lt;/div&gt;</font></p> </blockquote>  <h5>Rating Web Part</h5>  <p>Finally, I used the <a href="http://sptoolbasket.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=21960">Rating web part</a> from <a href="http://www.codeplex.com">Codeplex</a> 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:</p>  <blockquote>   <p><font face="Consolas">&lt;xsl:variable name=&quot;ListGuid&quot;&gt;       <br />&#160;&#160;&#160; &lt;xsl:value-of select=&quot;@ListId&quot;/&gt;        <br />&lt;/xsl:variable&gt;</font></p>    <p><font face="Consolas">       <br />&lt;xsl:variable name=&quot;ItemId&quot;&gt;        <br />&#160;&#160;&#160; &lt;xsl:value-of select=&quot;@ID&quot;/&gt;        <br />&lt;/xsl:variable&gt; </font></p>    <p>&#160;<font face="Consolas">&lt;div&gt;&#160;&#160;&#160;&#160; <br />&#160;&#160;&#160; &lt;xsl:choose&gt;        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;xsl:when test=&quot;contains($Rating, '(5)')&quot;&gt;        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;img src=&quot;/_layouts/images/sptoolbasket/rating_5.gif&quot; alt=&quot;{$Rating}&quot;/&gt;        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;/xsl:when&gt;        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;xsl:when test=&quot;contains($Rating, '(4)')&quot;&gt;        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;img src=&quot;/_layouts/images/sptoolbasket/rating_4.gif&quot; alt=&quot;{$Rating}&quot;/&gt;        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;/xsl:when&gt;        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;xsl:when test=&quot;contains($Rating, '(3)')&quot;&gt;        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;img src=&quot;/_layouts/images/sptoolbasket/rating_3.gif&quot; alt=&quot;{$Rating}&quot;/&gt;        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;/xsl:when&gt;        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;xsl:when test=&quot;contains($Rating, '(2)')&quot;&gt;        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;img src=&quot;/_layouts/images/sptoolbasket/rating_2.gif&quot; alt=&quot;{$Rating}&quot;/&gt;        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;/xsl:when&gt;        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;xsl:when test=&quot;contains($Rating, '(1)')&quot;&gt;        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;img src=&quot;/_layouts/images/sptoolbasket/rating_1.gif&quot; alt=&quot;{$Rating}&quot;/&gt;        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;/xsl:when&gt;        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;xsl:otherwise&gt;        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;a href=&quot;</font><a href="http://moss:813/_layouts/sptoolbasket/ItemRating.aspx?Id={"><font face="Consolas">/_layouts/sptoolbasket/ItemRating.aspx?Id={</font></a><font face="Consolas">$ItemId}&amp;amp;List={$ListGuid}&quot;&gt;Rate&lt;/a&gt;       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;/xsl:otherwise&gt;        <br />&#160;&#160;&#160; &lt;/xsl:choose&gt;        <br />&lt;/div&gt;</font></p> </blockquote>  <p>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.</p>]]></content:encoded>
    </item>
    <item>
      <title>Accessing columns in the User Information List</title>
      <link>https://docs.microsoft.com/archive/blogs/ben_hickman/accessing-columns-in-the-user-information-list</link>
      <pubDate>Fri, 22 May 2009 16:07:04 GMT</pubDate>
      <dc:creator><![CDATA[BenHickman]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ben_hickman/2009/05/22/accessing-columns-in-the-user-information-list/</guid>
      <description><![CDATA[I was recently asked how to programmatically retrieve custom fields from the User Information List...]]></description>
      <content:encoded><![CDATA[<p>I was recently asked how to programmatically retrieve custom fields from the User Information List via a Web service.</p>  <p>It turns out that the <a href="http://msdn.microsoft.com/en-us/library/ms774637.aspx">GetUserInfo</a> web method does not return any custom fields that you might add to the User Information List (aka People &amp; Groups).</p>  <p>Instead, just treat this as a regular SharePoint list and you can access the columns via the <a href="http://msdn.microsoft.com/en-us/library/lists.lists.getlistitems.aspx">GetListItems</a> web method from <a href="http://msdn.microsoft.com/en-us/library/lists.aspx">Lists.asmx</a>.</p>  <blockquote>   <p><font face="Consolas">static void Main(string[] args)       <br />{        <br />&#160;&#160;&#160; ListsService.Lists svcLists = new ListsService.Lists();        <br />&#160;&#160;&#160; svcLists.Credentials = CredentialCache.DefaultCredentials;        <br />&#160;&#160;&#160; XmlDocument doc = new XmlDocument();         <br />&#160;&#160;&#160; doc.LoadXml(&quot;&lt;Document&gt;&lt;Query /&gt;&lt;ViewFields /&gt;&lt;QueryOptions /&gt;&lt;/Document&gt;&quot;);         <br />&#160;&#160;&#160; XmlNode listQuery = doc.SelectSingleNode(&quot;//Query&quot;);         <br />&#160;&#160;&#160; XmlNode listViewFields = doc.SelectSingleNode(&quot;//ViewFields&quot;);         <br />&#160;&#160;&#160; XmlNode listQueryOptions = doc.SelectSingleNode(&quot;//QueryOptions&quot;);         <br />&#160;&#160;&#160; Guid g = GetWebID(&quot;</font><a href="http://moss.litwareinc.com&quot;);"><font face="Consolas">http://moss.litwareinc.com&quot;);</font></a>      <br /><font face="Consolas">&#160;&#160;&#160; System.Xml.XmlNode items = svcLists.GetListItems(&quot;User Information List&quot;,        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; string.Empty, listQuery, listViewFields, string.Empty, listQueryOptions, </font>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <font face="Consolas">g.ToString());       <br />&#160;&#160;&#160; Console.WriteLine(items.OuterXml);        <br />} </font></p>    <p><font face="Consolas">private static Guid GetWebID(string webPath)        <br />{        <br />&#160;&#160;&#160; SiteDataService.SiteData svcSiteData = new SiteDataService.SiteData();         <br />&#160;&#160;&#160; svcSiteData.UseDefaultCredentials = true;        <br />&#160;&#160;&#160; SiteDataService._sWebMetadata webMetaData;        <br />&#160;&#160;&#160; SiteDataService._sWebWithTime[] arrWebWithTime;        <br />&#160;&#160;&#160; SiteDataService._sListWithTime[] arrListWithTime;        <br />&#160;&#160;&#160; SiteDataService._sFPUrl[] arrUrls;         <br />&#160;&#160;&#160; string roles;         <br />&#160;&#160;&#160; string[] roleUsers;         <br />&#160;&#160;&#160; string[] roleGroups;         <br />&#160;&#160;&#160; svcSiteData.Url = webPath + &quot;/_vti_bin/sitedata.asmx&quot;;         <br />&#160;&#160;&#160; uint i = svcSiteData.GetWeb(out webMetaData, out arrWebWithTime,         <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; out arrListWithTime, out arrUrls, out roles, out roleUsers,         <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; out roleGroups);         <br />&#160;&#160;&#160; Guid g = new Guid(webMetaData.WebID);         <br />&#160;&#160;&#160; return g;         <br />} </font></p> </blockquote>  <p>Now if I add a column to the User Information List, that new column appears in the items list.</p>  <p>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.</p>]]></content:encoded>
    </item>
    <item>
      <title>One Part of Microsoft.com now running on SharePoint</title>
      <link>https://docs.microsoft.com/archive/blogs/ben_hickman/one-part-of-microsoft-com-now-running-on-sharepoint</link>
      <pubDate>Thu, 21 May 2009 14:27:03 GMT</pubDate>
      <dc:creator><![CDATA[BenHickman]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ben_hickman/2009/05/21/one-part-of-microsoft-com-now-running-on-sharepoint/</guid>
      <description><![CDATA[Yesterday http://www.microsoft.com/sharepoint converted over to SharePoint and Silverlight. It’s...]]></description>
      <content:encoded><![CDATA[<p>Yesterday <a href="http://www.microsoft.com/sharepoint">http://www.microsoft.com/sharepoint</a> converted over to SharePoint and Silverlight. It’s nice to have a microsoft.com example to add to the list of <a href="http://www.wssdemo.com/Pages/websites.aspx">public facing sites</a> running SharePoint.</p>  <p>There’s an upcoming SharePoint team blog posting on how it was done.</p>]]></content:encoded>
    </item>
    <item>
      <title>SharePoint Server 2010 announced</title>
      <link>https://docs.microsoft.com/archive/blogs/ben_hickman/sharepoint-server-2010-announced</link>
      <pubDate>Wed, 15 Apr 2009 12:41:05 GMT</pubDate>
      <dc:creator><![CDATA[BenHickman]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ben_hickman/2009/04/15/sharepoint-server-2010-announced/</guid>
      <description><![CDATA[I will need to switch from saying SharePoint 14 to SharePoint 2010 now. Details of the announcement...]]></description>
      <content:encoded><![CDATA[<p>I will need to switch from saying SharePoint 14 to SharePoint 2010 now. Details of the announcement are on the <a href="http://blogs.msdn.com/sharepoint/archive/2009/04/14/microsoft-sharepoint-14-is-now-microsoft-sharepoint-2010.aspx">SharePoint Team Blog</a>.</p>]]></content:encoded>
    </item>
  </channel>
</rss>