Paul's profilePaul Galvin's SharePoint...BlogListsSkyDrive Tools Help

Blog


    November 03

    Comparing Dates in a Data View Web Part to Build a WSS KPI

    Note: this was first posted at www.endusersharepoint.com here: http://www.endusersharepoint.com/2009/11/02/comparing-dates-in-a-data-view-web-part-to-build-a-wss-kpi-in-sharepoint/.

    This is yet another blog post on comparing dates in XSL in a data view web part in SharePoint.

    This is my scenario:

    • I have a custom list.
    • The business purpose of the list is to support the idea of a new employee and his/her tasks to be completed within 7 days of starting the job.
    • They are in a “warning zone” after 4 days if they have not completed these tasks.
    • I want to create a simple dashboard that shows green when they have either completed the task or if they have more than 4 days to complete it.
    • I want the dashboard to show yellow if they are in the warning zone.
    • I want to to show red if they have not completed the task after the due date.

    I borrowed from this article at Marc Anderson’s blog (http://mdasblog.wordpress.com/2008/02/19/comparing-dates-in-sharepoint-using-xsl/) to get the comparison logic and this article at www.endusersharepoint.com for the basic ideas behind the dashboard (http://www.endusersharepoint.com/2008/12/09/visual-indicators-for-the-masses-kpis-in-wss/) written by Toni Frankola.

    You should read the supporting blogs, but the implementation goes like this:

    1. Create a content type (columns + CT)
    2. Create a custom list and associate it with the content type.
    3. Create a web part page.
    4. Add the custom list to the web part page.
    5. Open up the page in SPD.
    6. Convert the list to a DVWP.
    7. Modify the XSL to generate the dashboard bits.

    I have two dates: a warning date and a due date.  To compare the dates, my xsl does the following:

     
      <xsl:choose>
      
        <!-- When both handbook and policy are signed, we are green regardless of dates. -->
        <xsl:when test="@Employee_x0020_Handbook_x003F_ = 1 and @Security_x0020_Policies = 1">
          <img src="/_layouts/images/KPIDefault-0.GIF" alt="No problems"/>
           <a href="/HumanResources/Lists/New Employee Checklist/EditForm.aspx?ID={@ID}&amp;Source=/HumanResources/Shared Documents/New Hire Dashboard.aspx"> [Edit]</a>
        </xsl:when>
     
        <!-- Show amber indicator if we're past the warning date. -->
        <xsl:when test="ddwrt:FormatDateTime(string(ddwrt:Today()), 1033, 'yyyyMMdd') &gt;= ddwrt:FormatDateTime(string(@TaskDueDate), 1033, 'yyyyMMdd')">
          <img src="/_layouts/images/KPIDefault-2.GIF" alt="Overdue"/>
            <a style="border: 0px" href="/HumanResources/Lists/New Employee Checklist/EditForm.aspx?ID={@ID}&amp;Source=/HumanResources/Shared Documents/New Hire Dashboard.aspx"> [Edit]</a>
        </xsl:when>
     
        <!-- Show red indicator if we're passed the due date. -->
        <xsl:when test="ddwrt:FormatDateTime(string(ddwrt:Today()), 1033, 'yyyyMMdd') &gt;= ddwrt:FormatDateTime(string(@Warning_x0020_Date), 1033, 'yyyyMMdd')">
          <img src="/_layouts/images/KPIDefault-1.GIF" alt="Warning"/>        
          <a href="/HumanResources/Lists/New Employee Checklist/EditForm.aspx?ID={@ID}&amp;Source=/HumanResources/Shared Documents/New Hire Dashboard.aspx"> [Edit]</a>
        </xsl:when>
     
        <!-- If we get here, we're earlier than the warning date, so we're green. -->
        <xsl:otherwise>
          <img src="/_layouts/images/KPIDefault-0.GIF" alt="No problems"/>
           <a href="/HumanResources/Lists/New Employee Checklist/EditForm.aspx?ID={@ID}&amp;Source=/HumanResources/Shared Documents/New Hire Dashboard.aspx"> [Edit]</a>
        </xsl:otherwise>
      
      </xsl:choose>

     

    A few key points from above:

    • I tried to compare dates without using the ddwrt functionality and got nowhere.  I still don’t understand that.  They dates displayed correctly, but both “>” and “<” comparisons always failed.  In the end, ddwrt came to my rescue (thanks, again, Marc).
    • I’m also displaying an [Edit] link to the item.  I mainly did this so that I could easily test this out.  The link itself may be useful to someone trying to figure it out.
    • This is implemented in SharePoint online and works nicely.
    • The images I reference in the _layouts directory (/_layouts/images/KPI…) are available out of the box in my environment so they are probably available for you as well.

    Here’s a screen shot of what it looks like for me:

    image

    </end>

    Subscribe to my blog.

    Follow me on Twitter at http://www.twitter.com/pagalvin

    Comments

    Please wait...
    Sorry, the comment you entered is too long. Please shorten it.
    You didn't enter anything. Please try again.
    Sorry, we can't add your comment right now. Please try again later.
    To add a comment, you need permission from your parent. Ask for permission
    Your parent has turned off comments.
    Sorry, we can't delete your comment right now. Please try again later.
    You've exceeded the maximum number of comments that can be left in one day. Please try again in 24 hours.
    Your account has had the ability to leave comments disabled because our systems indicate that you may be spamming other users. If you believe that your account has been disabled in error please contact Windows Live support.
    Complete the security check below to finish leaving your comment.
    The characters you type in the security check must match the characters in the picture or audio.
    Paul Galvin has turned off comments on this page.

    Trackbacks

    The trackback URL for this entry is:
    http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!5026.trak
    Weblogs that reference this entry
    • None