Month: May 2009

Displaying the total number of postings by users in a SharePoint discussion board

Recently, I wanted to display some small statistics about how often people participated in the discussions in a SharePoint discussion board. I wanted to show the total number of postings in a small web part. The solution for this requires SharePoint Designer, as it makes use of the Data View Web Part.

I’ll show the steps to display the list of people who participated in a discussion board and their total number of postings from the beginning:
First, I create a new blank site and add a discussion board:
Discussion Board Postings

I open the site in SharePoint Designer and add a Data View Web Part into the right web part zone. In the Data Source Library to the right, I select the discussion board, and then Show Data:
Discussion Board Postings

Right now, only the discussion topics are contained in the rows returned, but not all postings. To change this, click on the name of your Data Source, in my case Discussion Board:
Discussion Board Postings

In the following dialog, select RecursiveAll under Item and folder scope:
Discussion Board Postings

Next, select Created By (if wanted also additional fields), and choose Insert Selected Fields as…. Multiple Item View. The Data View Web Part is now populated with the selected fields.

In the Data View Web Part, select Sort and Group from its menu:
Discussion Board Postings

Sort by Created By, and select Show group header and Collapse group by default:
Discussion Board Postings

You will get something similar to the left part of the following image:
Discussion Board Postings
I then removed the unnecessary parts as seen in the image above, and added a new column for the number of postings. 

Click inside the cell underneath Postings, and in the source code add the following line into it:

<xsl:value-of select="count($nodeset)" />

Next we need to change the query fetching the rows. Find the following line 

<xsl:with-param name="nodeset" select="msxsl:node-set($dvt_Rows)/root//Row[((@Author)=$groupheader0 or ((not(@Author) or @Author=”) and $groupheader0=’ ‘))]" />

and replace it with 

      <xsl:with-param name="nodeset" select="msxsl:node-set($dvt_Rows)/root//Row[substring-before(substring-after(string(@Author),’userdisp.aspx?ID=’),’&quot;’)=substring-before(substring-after(string($groupheader0),’userdisp.aspx?ID=’),’&quot;’)]" />


That’s it, the result will look like this:
Discussion Board Postings


The drawback at the moment here is that it doesn’t sort by the number of Postings, which I haven’t found out (yet) how to do. 

Displaying a preview of a wiki's contents in SharePoint

Update 14 December 2009: Improved slightly, first the tags are stripped, then content shortened. 

Displaying a textual preview of an wiki’s article in SharePoint is quite easy. All one needs to do is create a data view web part with SharePoint Designer (free since April 1) and have it display the field ‘Wiki Contents’ from the wiki’s pages library. Now the contents of this field contain all the HTML markup of the article, which we now need to strip of the tags and also reduce in size.

In order to strip the ‘Wiki Contents’ of the HTML markup, we need to apply XSLT. In the xsl:stylesheet section of the data view web part, add the following template:

<xsl:template name="strip-tags">
  <xsl:param name="text"/>
    <xsl:when test="contains($text, ‘&lt;’)">
     <xsl:value-of select="substring-before($text, ‘&lt;’)"/>
     <xsl:call-template name="strip-tags">
      <xsl:with-param name="text" select="substring-after($text, ‘&gt;’)"/>
     <xsl:value-of select="$text"/>

Afterwards, find <xsl:value-of select="@WikiField" /> and replace it with the following

<xsl:variable name="strippedWiki">
  <xsl:call-template name="strip-tags">
     <xsl:with-param name="text" select="string(@WikiField)"/>
<xsl:value-of select="concat(substring($strippedWiki,1,800),
        substring-before(substring($strippedWiki,801,850),’ ‘))"/>
<a href="{@LinkFilenameNoMenu}" mce_href="{@LinkFilenameNoMenu}">….(more)</a>

This calls the template above with a part of the wiki article’s content (replace 800, 801, and 850 accordingly if you want to show more/less) and adds a link to it add the end. The concetanation here is to avoid having a word cut off by adding text add the end of the first substring until the first space is encountered.

The result looks like this:

sharepoint wiki preview