A little fun with free Office Live sites: Sharepoint Guru Inc. has opened.

In case you didn’t know http://www.officelive.com is giving away sites with your own domain.
 
Sharepoint Guru is now open for business. http://rstagg.com/default.aspx

 
Sharepoint Guru 
 
We provide a collaborative relationship with each and every client.
As Sharepoint Gurus we know how to do this and it helps knowing more
about Sharepoint than the other guys.
 
If you would like to apply for a postition (everyone that applies is accepted)
 
Post your credentials as a comment to this post and cross your fingers folks-
 
-Rod

Sharepoint/ASP.NET/C# experience as a developer and consultant

A little history…
 
Worked at Microsoft full-time as a web development engineer and software design engineer from 1999 to late 2004. Also worked as a UI developer in the Natural Language Group for several windows applications in C#. Developed Sharepoint intranets for several groups at Microsoft including the Business Applications Group, Natural Language Group and Speech team. Developed several custom ASP.NET/C# applications including a content management system and a global content repositiory including custom web services and a taxonomy-based navigation for the MS Sales/Marketing field worldwide.

Left Microsoft in 2004 to get some exposure to companies outside Microsoft and try my hand at consulting. Landed a position with Write Image as a Sharepoint developer consultant developing sites primarily for Microsoft but also a Sharepoint implementation for eBay. A great opportunity came by my way to work on a Sharepoint version of Microsoft’s Business Contact Manager CRM in early MOSS 2007-learned Sharepoint from the inside out-schema.xml, custom web-controls bound to sharepoint controls, localization using the new ASP.NET resource keys, customizing viewstyles.xml, packaging and deployment of custom code as site features.

Allyis recruited me to do a large site migration for the Microsoft Legal and Corporate Affairs portal-have been at Allyis ever since as a Sharepoint Solutions Architect making use of my 7 years experience architecting, developing, and deploying Sharepoint sites. Most recently I developed a content rating system, auto-tagging, and newsletter generation site templates for use by our Microsoft and non-microsoft customers.

 
Select Examples (not comphrehensive) list of sites I developed from scratch and/or developed key components:
Internet
Intranet Sharepoint V1
Natural Language Group portal at Microsoft
Speech portal at Microsoft
Version 1 of GTM Content Repository on Infoweb
Intranet Sharepoint V2
eBay intranet portal
National Technology Officers portal at Microsoft
X-Box Marketing team portal
Microsoft Law Enforcement Portal
Intranet Sharepoint V3
Office Live web-based Business Contact Manager
Microsoft Legal and Corporate Affairs Portal
Microsoft Inside Sales Portal and Call Guide
Microsoft Implementation Standards Database
Microsoft.com platform
http://windowsmobile.com
Microsoft Art Collection Site
Infopath:
Partner Election Form for Wellington Legal
Sales Contest for MS Sales
Capital Request Form and workflow for APS Healthcare
Expense Report/Trip report forms for MS Sales
Implemented Standards Form for MS Legal
 
 

Implementing Content Ratings for Sharepoint via site template Part 1

contentrating
I had a request to create the typical content rating system you see on the web but for Sharepoint 2007-the catch? I needed to deploy as a site template that could be deployed easily by site collection owners.
 
What did I come up with you ask? 
 
First, it’s amazing what the new aggregate data sources in Sharepoint 2007 and x-path can do:)
 
You can use the new linked datasouces to access data in other lists, web services, and even SQL sources.
 
Then using X-path, XSL, javascript, and customizing the dataview web-part you have some options for doing interesting things in site templates that you might not have thought about before or would immediately consider server-side code a requirement.  
 

The Approach
Displaying the ratings from within your list/document library. 
 
The basic approach is to tie your custom list to a second list that stores the rating using a common id.  You can use javascript for this.
Then on your custom list use an x-path query to get a handle to the rows you want and then render the star rating appropriately.   
 
Warning: I haven’t provided all the steps here and there are a few to getting the different parts of the solution connected and working together-this example covers only the bare essentials of displaying the ratings from within your list/document library but should get you off to a good start.
 
Coming in Part 2: The custom XSL for displaying data on the view ratings page.
Coming in Part 3: Pre-populating the ratings fields and filtering the results set by adding parameters to the aggregate datasource select query. 
Coming in Part 4: How to configure a datasource to be easily deployed as part of a site template deployed within a site collection on a different server.

 

Displaying the aggregated rating for a specific list item or document:
Once I linked to the list where I stored all my ratings it was a matter of building an x-path query to aggregate data from the ratings list in order to display my star ratings in the custom list:
 
From the row item template on a custom list contained with a DVWP in XSLT format:
 
<xsl:template name="dvt_1.rowview">
  <xsl:param name="ParentPath" />
  <xsl:param name="SrcPos" />
  <xsl:variable name="dvt_1ParentRow" select="current()" />
  <xsl:variable name="FilteredRatedQuestions" select="../../../Call_Question_Ratings/Rows/Row[@QuestionID=$dvt_1ParentRow/@ID]" />
 
Once I had a handle to a proper rowset then I could perform whatever calculations I deem necessary to display the appropriate star ratings:
 
In my scenario a five star rating based on a simple average sufficed and used the images already available in the layouts directory.
 
<xsl:choose>
          <xsl:when test="../../../Call_Question_Ratings/Rows/Row/@QuestionID=$dvt_1ParentRow/@ID">
          
             <xsl:variable name="dvt_1RowRating" select="format-number(sum($FilteredRatedQuestions/@Rating)div (@_x0023_Rated), &quot;###0.0;-###0.0&quot;)"/>
            <xsl:if test="$dvt_1RowRating &gt;= ‘2’ and $dvt_1RowRating  &lt; ‘3’">
              <img src="\_layouts\images\addtofavorites.gif" border="0" align="absmiddle"/>
              <img src="\_layouts\images\addtofavorites.gif" border="0" align="absmiddle"/>
             </xsl:if>
             
             <xsl:if test="$dvt_1RowRating &gt;= ‘3’ and $dvt_1RowRating  &lt; ‘4’">
              <img src="\_layouts\images\addtofavorites.gif" border="0" align="absmiddle"/>
              <img src="\_layouts\images\addtofavorites.gif" border="0" align="absmiddle"/>
              <img src="\_layouts\images\addtofavorites.gif" border="0" align="absmiddle"/>
             </xsl:if>
            
             <xsl:if test="$dvt_1RowRating &gt;= ‘4’ and $dvt_1RowRating  &lt; ‘5’">
              <img src="\_layouts\images\addtofavorites.gif" border="0" align="absmiddle"/>
              <img src="\_layouts\images\addtofavorites.gif" border="0" align="absmiddle"/>
              <img src="\_layouts\images\addtofavorites.gif" border="0" align="absmiddle"/>
              <img src="\_layouts\images\addtofavorites.gif" border="0" align="absmiddle"/>
             </xsl:if>
            
             <xsl:if test="$dvt_1RowRating &gt;= ‘5’ and $dvt_1RowRating  &lt; ‘6’">
              <img src="\_layouts\images\addtofavorites.gif" border="0" align="absmiddle"/>
              <img src="\_layouts\images\addtofavorites.gif" border="0" align="absmiddle"/>
              <img src="\_layouts\images\addtofavorites.gif" border="0" align="absmiddle"/>
              <img src="\_layouts\images\addtofavorites.gif" border="0" align="absmiddle"/>
              <img src="\_layouts\images\addtofavorites.gif" border="0" align="absmiddle"/>
             </xsl:if> 
           
                    
         </xsl:when>
         <xsl:otherwise>
             <img src="\_layouts\images\addtofavorites.gif" border="0"/>
            </xsl:otherwise>
         </xsl:choose>
 
Cheers!