JQuery and SharePoint Blogging Sample

Filed under:SharePoint,Web 2.0 — posted by Jason MacKenzie on January 13, 2010 @ 1:47 pm

It’s been a while since I posted due to a change in careers.  I have become an independent SharePoint consultant and am loving the change.

Reading my favourite (IT) site, EndUserSharepoint and all the interesting examples of what the authors are doing with SharePoint has gotten me very excited about the possibilities of integrating JQuery with SharePoint to create some very slick user interfaces.  I want to some highlights of this latest prototype because it touches on a lot of different areas.

Firstly the shoutouts:

Heather Solomon for her blog on Customizine the CQWP
Michael Hofer for rolling up blog comments with the CQWP
Everyone at EUSP

So without further ado here’s a quick video of what the prototype looks like.  Prototype

So the first thing I did was create a new site based on the Blog template, added a few posts and made a few of my typically dim comments.  I actually added a column on the comments list called Highlight which we’ll use later. 

I added a CQWP to my page and you’ll notice that there is no way to roll up blog comments from the UI.  A little research led me to Michael’s blog above.  So configuring the CQWP to roll up blog posts and then exporting it, modifying the server template property from 301 to 302 and reimporting it did the trick.  Keep in mind that if you modify the CQWP in the UI after words you’re going to have to go through that process again.

While we’re on the subject of modifying the webpart we might as well add the extra fields we’ll need to the CommonViewFields property in our webpart. Essentially this makes the fields available to use when modifying the XSL a little later.  For more information please read Heather Solomon’s post above.

<property name=”CommonViewFields” type=”string”>Body, Text;Title,Text;Highlight,Boolean</property>

Moving along….I wanted to get a  nice accordion effect with the results which naturally led me toward the jQuery accordion.  For those that haven’t used it, it really could not be simpler.  Add a reference to the right jquery libraries, format the HTML and away we go.  Actually in the interest of clarity, here are all the jquery references and code required for this sample.  I’ll explain them as we go:

Simply place this all into a Content Editor Web Part (this definitely is not a best practice but for the purposes of this article we’ll leave it like this).

  <script type=”text/javascript” src=”http://jqueryui.com/latest/jquery-1.3.2.js”></script>
  <script type=”text/javascript” src=”http://jqueryui.com/latest/ui/ui.core.js”></script>
  <script type=”text/javascript” src=”http://jqueryui.com/latest/ui/ui.accordion.js”></script>
<script type=”text/javascript” src=”http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.1/jquery-ui.min.js”></script>
<link rel=”stylesheet” href=”http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.1/themes/ui-lightness/jquery-ui.css” type=”text/css”>

<script type=”text/javascript”>
  $(document).ready(function(){
    $(“#accordion”).accordion(
{
    autoheight: false
}
);
jQuery(“#dialog”).dialog({
      bgiframe: true, autoOpen: false,  modal: true, show: ‘slide’
    });

  });

  function PopulateText(textToShow, title)
  {
        document.getElementById(“dialog”).innerHTML = textToShow;
        document.getElementById(“dialog”).title = title;
  }

 </script>

The appropriate HTML formatting for the accordion looks like this:

<div id=”accordion”>
    <h3><a href=”#”>First header</a></h3>
    <div>First content</div>
    <h3><a href=”#”>Second header</a></h3>
    <div>Second content</div>
</div>

Since we’ll need to control the HTML output we’ll turn to our friend the itemstyles.xsl file.  It’s located in the style library which is easy enough to find in SPD:

Again, for the mechanics of creating new templates etc. please refer to Heather’s blog post.  She’s far more articulate that your resident troglodyte here.  Anywhoo…we’ll create a new template and this is really where the magic happens.  The first challenge I had was that I needed to have a <div id=”accordion”></div>  block surrounding the CQWP.  But, obviously this output will be rendered for each item. 

However with the following check we can ensure that the following output is generated only for the first item.  I’ll explain the code snippet in red later – it’s not germane to this discussion.  So essentially on the first match we’re going to spit out <div id=”accordion”> and then everything else will be contained with in that div.

 <!–If this is the first match let’s put a header on it–>
  <xsl:if test=”count(preceding-sibling::*)=0″>
   <div id=”dialog” title=”Comment”>
    <p>
     <xsl:value-of select =”@Body” disable-output-escaping=”yes”/>
    </p>

   </div>
   <xsl:text disable-output-escaping=”yes”>&lt;div id=accordion &gt;</xsl:text>
  </xsl:if>

Of course then at the end of the template will put the following check it to render the closing tag on the last match:

  <!–If this is the last match we’ll put a footer on the end to close off the html–>
  <xsl:if test=”count(following-sibling::*)=0″>
   <xsl:text disable-output-escaping=”yes”>&lt;/div&gt;</xsl:text>
  </xsl:if>

The next step we want to do is make sure that only the list items or comments that have Highlight checked are rendered.

A very simple check like so makes that happen:  <xsl:if test=”@Highlight=’True’”> …put everything you want rendered in here  </xsl:if>

Now – you’ll notice in the video that when you click the more button for each item a nice jquery modal dialog pops up with the body of the comment.  Here’s how that was accomplished.

That snippet in red above is the container that will be required to store the text we want to show in the jQuery dialog so we’re going to need to come up with a way to dynamically populate this.

So in our XSL we will do the following – comments inline:

       <tr valign=”top”>
        <td><strong>Details</strong></td>
        <td valign=”bottom”>

<!–The users will click an image with the word “More” on it in order to show the comment body.  We wrap the image in an <a> tag and then in the click event we set the dialog properties (height, width etc.) and then we open the dialog.

However on the mousedown event (prior to the onclick) we render some script that will call the PopulateText function and pass in the comment Body (@Body).  When the dialog opens it will display the right text. 

–>   
<a href=”#” onclick=”jQuery(‘#dialog’).dialog(‘option’,'show’ , ‘slide’);jQuery(‘#dialog’).dialog(‘option’,'height’ , 300);jQuery(‘#dialog’).dialog(‘option’, ‘width’, 500);jQuery(‘#dialog’).dialog(‘open’); return false”>
   <xsl:attribute name=”onmousedown”>
   <xsl:text>javascript:PopulateText(“</xsl:text>
   <xsl:value-of select =”@Body” disable-output-escaping=”yes”/>
   <xsl:text>”, “Comment”);</xsl:text>
   </xsl:attribute>
   <img border=”0″ src=”/SiteCollectionImages/Moreicon.gif”></img>
   </a>
     </td>
       </tr>

In order to change the them for your accordion and dialog all you need to do is change the link to the theme css file (<link rel=”stylesheet” href=”http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.1/themes/ui-lightness/jquery-ui.css” type=”text/css”>).

And that is how I created some nice effects for Blog Posts using the CQWP and jQuery.   I hope you enjoy, get some ideas and provide me with some feedback.

Jason

For reference sake the entire XSL template is below:

<xsl:template name=”HighlightedBlogComments” match=”Row[@Style='HighlightedBlogComments']” mode=”itemstyle”>
  <xsl:variable name=”SafeLinkUrl”>
            <xsl:call-template name=”OuterTemplate.GetSafeLink”>
                <xsl:with-param name=”UrlColumnName” select=”‘LinkUrl’”/>
            </xsl:call-template>
        </xsl:variable>
  <xsl:variable name=”SafeImageUrl”>
            <xsl:call-template name=”OuterTemplate.GetSafeStaticUrl”>
                <xsl:with-param name=”UrlColumnName” select=”‘ImageUrl’”/>
            </xsl:call-template>
        </xsl:variable>
  <xsl:variable name=”LinkTarget”>
            <xsl:if test=”@OpenInNewWindow = ‘True’” >_blank</xsl:if>
        </xsl:variable>
 
 <!–If this is the first match let’s put a header on it–>
  <xsl:if test=”count(preceding-sibling::*)=0″>
   <div id=”dialog” title=”Comment”>
    <p>
     <xsl:value-of select =”@Body” disable-output-escaping=”yes”/>
    </p>
   </div>
   <xsl:text disable-output-escaping=”yes”>&lt;div id=accordion &gt;</xsl:text>
  </xsl:if>
  <!–Only show the records where the HighLight Column has been checked–>
  <xsl:if test=”@Highlight=’True’”>
   <h4>
    <a href=”#”>
     <xsl:value-of select=”@Title”/>
    </a>
   </h4>
   <div height=”350″>
    <p>
     <font size=”1″>
      <table>
       <tr valign=”top”>
        <td><strong>Author</strong></td>
        <td><xsl:value-of select=”@Author”/></td>
       </tr>
       <tr valign=”top”>
        <td><strong>Posted On</strong></td>
        <td><xsl:value-of select=”@Created”/></td>
       </tr>
       <tr valign=”top”>
        <td><strong>Details</strong></td>
        <td valign=”bottom”>
   

   <a href=”#” onclick=”jQuery(‘#dialog’).dialog(‘option’,'show’ , ‘slide’);jQuery(‘#dialog’).dialog(‘option’,'height’ , 300);jQuery(‘#dialog’).dialog(‘option’, ‘width’, 500);jQuery(‘#dialog’).dialog(‘open’); return false”>
   <xsl:attribute name=”onmousedown”>
   <xsl:text>javascript:PopulateText(“</xsl:text>
   <xsl:value-of select =”@Body” disable-output-escaping=”yes”/>
   <xsl:text>”, “Comment”);</xsl:text>
   </xsl:attribute>
   <img border=”0″ src=”/SiteCollectionImages/Moreicon.gif”></img>
   </a>
  

   </td>
       </tr>
      </table>
     </font>
    </p>
   </div>
  </xsl:if>
  <!–If this is the last match we’ll put a footer on the end to close off the html–>
  <xsl:if test=”count(following-sibling::*)=0″>
   <xsl:text disable-output-escaping=”yes”>&lt;/div&gt;</xsl:text>
  </xsl:if>
 </xsl:template>

Bookmark and Share
VN:F [1.9.3_1094]
Rating: 9.0/10 (1 vote cast)
VN:F [1.9.3_1094]
Rating: +1 (from 1 vote)

Popularity: 64% [?]

Share and Enjoy:
  • Facebook
  • Digg
  • del.icio.us
  • Sphinn
  • Mixx
  • Google Bookmarks
  • StumbleUpon

SP 2010 Install

Filed under:IT,SharePoint — posted by Jason MacKenzie on November 18, 2009 @ 7:45 am

I downloaded the SP2010 Beta from MSDN and was nearly overcome by geek euphoria.   I installed in on a clean 64 bit Windows 2008R2 Hyper-V instance.

The first issue I ran into was related to SQL Server 2008.  I had installed SP1 but I got prompted that I needed to install SQL Server 2008 SP 1 CU2.  I did that an proceeded to install SharePoint Foundation.

I then installed SharePoint 2010.  At some point I noticed a message related to the User Profile Application.  When the install completed I created the root site collection and was able to browse to it and Central Admin as expected.

My next step was to configure the user profile import from AD.  When I navigated to Central Admin> Application Management > Manage Service Applications  and clicked on the User Profile Service Application I was presented with the following error message: User Profile Application’s connection is currently not available. The Application Pool or User Profile Service may not have been started. Please contact your administrator”.

Some research pointed me to the following blog post fromTravis Neilson.  I followed those steps, reran the configuration wizard but no joy.  I was still in the same situation. I decided to delete and recreate the User Application Service Proxy.  

DeleteUserAppService

I then recreated the User Profile Service Application:

createNew

After selecting the menu item the following dialog appeared which is fairly straightforward to configure.

CreateNewOne

This seemed to resolve the issue and I was able to move on to the next steps.  I’m currently working on importing the user profiles from AD.  It’s not going well but I’ll post the issues and resolutions when I have resolved them.

Bookmark and Share
VN:F [1.9.3_1094]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.3_1094]
Rating: 0 (from 0 votes)

Popularity: 49% [?]

Share and Enjoy:
  • Facebook
  • Digg
  • del.icio.us
  • Sphinn
  • Mixx
  • Google Bookmarks
  • StumbleUpon

SharePoint Workflows & Collecting Data from Users

Filed under:IT,SharePoint — posted by Jason MacKenzie on October 30, 2009 @ 5:39 am

Recently I was presented with a problem that I’m sure many of you have faced but it took some thinking – not an easy task for me – on the best way to resolve it. Let me give you a run down on the problem and then speak about the solution in more generic terms.

We have a list that is used to store various types of equipment that is available throughout our organization. We have a parent content type of Equipment Item and about 18 child content types including Robot, Welding, Plant Equipment etc. When equipment is identified and agreed to it is entered into this SharePoint List which initiates a SharePoint Designer(SPD) workflow. There are a few steps and then a Collect Data from a User action is called. This action creates a task for the specified user which in our case is where they specify the status of the equipment. With me so far?

Collect_Data

Here is the problem. There are currently approximately 300 active workflows and the volume of activity is going to increase significantly over the next few months.  The Collect Data from a User action however creates a task with a generic title and description like so:

Tasks

You can see what the issue is – how do I quickly tell which task is  associated with which piece of equipment?   You could click on the Link column to see the item however that is time cosuming and very cumbersome.  What we need to do is pull some key data from the equipment list into the associated task.    What makes a little trickier than it appears at first blush is the fact that until the user provides the required data to the workflow the Collect Data from a User essentially pauses the workflow.  This means that we can’t add a step in the workflow to update the task with pertinent information until after the user acts on it which is after he needs the pertinent information.  

The solution in this case is to create a secondary workflow on the task list that will be automatically triggered when a new item is created.  This workflow will then go back to the related item in the equipment list and pull in the required information.  We will use the Update List Item action in order to accomplish this.

Workflow_Designer

In this case we are updating 3 columns from the Equipment list but in the interest of keeping things concise we’ll focus on 1.  Since the workflow is being initiated on the Task list will will want to be updating the current list item.   We’ll be updating the SubCategory field, which is a column that we added to the Task list with the value of the Sub Category column from the Equipment list.

Update_List_Item

Defining the workflow look up is the key to making this work.  We know that these tasks must be associated with the specific Equipment item but how can we make sure we are looking up the values from the right piece of equipment?  Each list by default has a unique identifier called ID.  The task list also has a column called Workflow Item ID which is the ID of the related list item.  So by looking up the ID of the piece of Equipment that corresponds with the value of the Workflow Item ID in the Task list we will be able to grab the correct data to populate our Task list.

Define_Workflow_Lookup

I hope you found this information helpful and any feedback is welcome.

Bookmark and Share
VN:F [1.9.3_1094]
Rating: 9.5/10 (2 votes cast)
VN:F [1.9.3_1094]
Rating: +1 (from 1 vote)

Popularity: 42% [?]

Share and Enjoy:
  • Facebook
  • Digg
  • del.icio.us
  • Sphinn
  • Mixx
  • Google Bookmarks
  • StumbleUpon

My SPC 09 Calendar

Filed under:Conferences,Enterprise 2.0,SharePoint,Social Networking,Web 2.0 — posted by Jason MacKenzie on October 14, 2009 @ 6:48 am

SPC09Here’s my schedule for the upcoming SharePoint conference.  I’ll also be live blogging for End User SharePoint which I am really looking forward to.

Monday, October 19th, 2009
9:00 AMKeynote: Unveiling Microsoft SharePoint 2010
Mandalay Bay BallroomSpeaker: Steve Ballmer

10:30 AMKeynote: Microsoft SharePoint 2010 Drilldown
Mandalay Bay BallroomSpeaker: Jeff Teper

1:15 PMEnterprise Search Overview
Islander GSpeaker: Evan Richman

2:45 PMECM for the Masses – How SharePoint 2010 delivers on the promise
Lagoon HSpeaker: Ryan Duguid

4:30 PMOverview of Social Computing in SharePoint 2010
South Seas DSpeaker: Christian Finn

Tuesday, October 20th, 2009
9:00 AMWhat’s New in Business Connectivity Services (Evolution of BDC!)
South Seas BSpeaker: Michal Gideoni

10:30 AMScaling SharePoint 2010 topologies for your organization
Mandalay Bay FSpeaker: Simon Skaria, Umesh Unnikrishnan

1:15 PMSharePoint Document Management Deep Dive
Mandalay Bay KSpeaker: Ryan Duguid

2:45 PMOffice 2007 vs. Office 2010 – Deployment Considerations
Breakers BSpeaker: Chris Bortlik

4:30 PMContinental Airlines: Architecting Enterprise Content Management -…
Breakers ESpeaker: Benjamin Lee, Denise Wilson, Jason Deere

Wednesday, October 21th, 2009
9:00 AMSharePoint 2010 Governance: Planning and Implementation
Mandalay Bay GSpeaker: Scott Jamison, Susan Hanley

10:30 AMConfiguring and Deploying a Reporting Environment in SharePoint…
Mandalay Bay KSpeaker: Prash Shirolkar, Thierry D’hers

1:15 PMOverview of Content Acquisition for Search in SharePoint 2010
ReefSpeaker: Siddharth Shah

2:45 PMSolving Information Chaos: Advanced Content Processing with FAST…
Lagoon JSpeaker: Sven Arne Gylterud

4:30 PMSocial Search in SharePoint 2010
Mandalay Bay HSpeaker: Jessica Alspaugh

Thursday, October 22th, 2009
9:00 AMUnveiling New Management Tools for Administering SharePoint 2010
South Seas BSpeaker: Zach Rosenfield

10:30 AMDeep Dive into SharePoint 2010 Profile Store and Profile Data…
Mandalay Bay GSpeaker: Chris Gideon, Tanuj Bansal

12:00 PMForm-driven Mashups Using InfoPath and Forms Services 2010
Mandalay Bay JSpeaker: Nick Dallett

Bookmark and Share
VN:F [1.9.3_1094]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.3_1094]
Rating: 0 (from 0 votes)

Popularity: 9% [?]

Share and Enjoy:
  • Facebook
  • Digg
  • del.icio.us
  • Sphinn
  • Mixx
  • Google Bookmarks
  • StumbleUpon

SP Workflow Governance

Filed under:IT,SharePoint — posted by Jason MacKenzie on October 13, 2009 @ 10:45 am

As the adoption of our MOSS 2007 platform continues to gain traction we have begun delivering some of the more important pieces of our moss_2007governance plan.  Due to our limited resources we have identified the areas that we feel are the most important and are delivering those as they are developed. 

First, a primer on our environment in order to provide some context on the why.  I work for a global manufacturing company with a decentralized operational structure.  We currently have about 8000 users and are at approximately 600,000 hits per month across the portal.  Many of our facilities are coming on board to our MOSS implementation which is managed centrally in the Toronto area by a relatively (by the standards of other organizations) small team of people.    When I say small – I mean 3 in IT.   As our facilities come on board there are increasing requests to automate business processes by creating and hosting workflows in SharePoint.  We felt it was necessary to quickly develop and publish some policies around this type of activity that takes into account three main factors:  reinforcing the concept of user ownership over SharePoint functionality, the resource levels at the central office, and the current processes around deployment that are already in place.

Obviously many pieces of successful governance are inter-related which is why in conjunction with these specific policies we have published governance about the roles & responsibilities of the various types of users interacting with SharePoint: site collection administrators, site administrators, content creators etc.  Support processes need to be documented as well in order for the site administrators/content creators to understand their role and the escalation path.

Below is an overview of the workflow-related policies and the rationale behind them.

Policies

  • Out of the Box SharePoint workflows will be the first option examined when implementing workflows
    • This is straightforward and doesn’t require much explanation.  OOTB should always be the first option when looking at new functionality whether its SharePoint or any other technology solution
  • We do not currently support the out of the box translation workflows
    • Our implementation is currently English only so there is no business need to be using these workflows
  • We will not provide support for user developed SharePoint Designer workflows
    • This does not mean that we will not allow SPD workflows to be created and deployed.  It means that should a user choose to use SPD designer to create a workflow they own it we will not be able to support them with their troubleshooting requirements.  We simply do not have the resources to spend time with individual users or teams analyzing why their workflow is not doing what they expected it to do.
  • SharePoint Designer training must be taken prior to creating workflows with this tool.
    • We will however recommend training providers that can provide the required training or will assist individuals or teams with the fundamentals of SPD workflows.  We are also developing training material that will be provided through the MS Productivity Hub which will allow them to access material on demand.
  • The creator of the workflow owns it and is responsible for any documentation/knowledge transfer.
    • This was touched on in Point 4 but it can’t be stressed enough.  As with any business solution the functional business owners are responsible for knowing, using and training on the functionality and business processes they own.  We are making a much more concerted effort as part of the governance process to define and communicate the responsibilities of the business owner/site administrator. 
    • Communicating the necessity of cross training to the owner as a risk mitigation strategy is essential in helping them understand their responsibility.
  • Errors with workflows will be investigated by the owner of the workflow by reviewing the workflow history.  If, after investigating, the error appears to be platform related an email will be sent to the helpdesk with detailed information about the error.
    • The intention here is to again ensure that IT and more specifically the Help Desk is not the first option when an issue with a workflow is discovered.
    • Training the users on the fundamentals of workflows, tasks, workflow history etc. will empower them to attempt to troubleshoot the issue and resolve it more quickly.
  • We will not support the developer training or deployment related to custom developed workflows in Visual Studio.  
    • VS workflows need to be deployed by someone with access to Central Administration
    • We have a rigid deployment process of one deployment to QA and Production per month.  We have 1 person responsible for doing this (along with many other tasks including non-SP related).   This means that a custom developed workflow change could potentially be facing a lag of 1 month prior to being deployed
    • The issue for us here is not the mechanics of deploying the workflows, but the inevitability of the software developers at our divisions creating more complex workflows over time with increased needs for changes, errors and “emergency” deployments putting our current deployment processes and policies at risk.
  • SharePoint workflows will not be used to automate business critical processes.
    • This policy is derivative of the previous points and realities of our environment.  As is common with most SharePoint deployments there is a tendency for people to think of SharePoint as the solution for everything.  We are attempting to place reasonable constraints on the use of the environment while working proactively with our users to identify alternatives by helping them clearly define their requirement and choosing the right solution.

This policies will evolve over time, as they should.  We have already referred numerous people to these policies and their supporting documentation.  As our organizational maturity with this platform improves our governance model will evolve in parallel.

Bookmark and Share
VN:F [1.9.3_1094]
Rating: 7.0/10 (1 vote cast)
VN:F [1.9.3_1094]
Rating: +1 (from 1 vote)

Popularity: 15% [?]

Share and Enjoy:
  • Facebook
  • Digg
  • del.icio.us
  • Sphinn
  • Mixx
  • Google Bookmarks
  • StumbleUpon

MS Tech Days Canada Review

Filed under:Conferences,IT,SharePoint — posted by Jason MacKenzie on September 30, 2009 @ 6:05 pm

techdays-2009I attended the Tech Days event in Toronto this week and wanted to share my thoughts on the Communication and Collaboration track.  This track was focused on SharePoint during day one.

This was my first time attending this event and I was fairly disappointed with it.  This is not to say that I didn’t get any value from it – I did.  But MS tried to do to much in too short a time with too diverse an audience.  The intial informal survey of the audience indicated that there was a mix between SharePoint Admins, developers, those who had little experience with the platform and those that weren’t running it and wanted to learn more.

The initial session was titled Deploying MOSS in a virtualized world.  The speaker was very knowledgable.  The topics covered ranged from SharePoint topologies,  server relationships and roles, interesting facts on the mechanics of search indexing and querying, options for installing SharePoint, application log errors, information SQL Server aliasing, backup and DR options as well as some information about Hyper-V virtualization.  All this in an hour and a half!  Regardless, I talked to the presenter afterwards and got some excellent information about the mechanics of search indexing and moving your query services to your WFE.  This is something I have been considering for some time.

The next session was held by Eli Robillard, a long time SharePoint MVP that I have worked with in the past.  His level of knowledge is quite frankly incredible.  He spoke about versioning  and upgrade of SharePoint based solutions.  It was interesting but very, very detailed but I wasn’t clear on why it was not part of a development related track.  For the non-developer audience, which was most of the room, he might as well have been speaking Mandarin.  This is no way a knock on Eli, he is a wonderful presenter. 

The following session was Comprehensive Security for MOSS 2007.  This was interesting but the coverage was too broad in my view.  There was good information about service accounts, permission levels, zones, authentication providers, FBA etc.  I found this quite useful.  The presenter then moved into standard SharePoint security.  I couldn’t quite grasp how someone that didn’t understand SharePoint OOB security would possibly benefit from a presentation the more administrative and technical aspects of security required to run the MOSS platform.

So overall I was disappointed but did come away with some information that I can use.  My advice to Microsoft is firstly to narrow the focus of the presentations.  Cover fewer topics more effectively.  Making the registration process more proactive in understanding the audience would be useful as well.  Personally I don’t think taking a show of hands to see who is a SharePoint admin at the beginning of the day is the appropriate time to get an understanding of your audience.

Will I go next year?  No.  However I’m glad I experienced it this year.   By the way – the breakfast was great, the lunch was awful.

Bookmark and Share
VN:F [1.9.3_1094]
Rating: 9.0/10 (1 vote cast)
VN:F [1.9.3_1094]
Rating: +1 (from 1 vote)

Popularity: 4% [?]

Share and Enjoy:
  • Facebook
  • Digg
  • del.icio.us
  • Sphinn
  • Mixx
  • Google Bookmarks
  • StumbleUpon

A Brutal Flaw with SP Workflows

Filed under:IT,SharePoint — posted by Jason MacKenzie on September 27, 2009 @ 3:58 pm

sad-face-1Everyone with an intermediate level of knowledge with SharePoint knows that there are 3 ways to create workflows that act on SharePoint lists/libraries.  In ascending order of complexity and flexibility they are:  OOTB SharePoint workflows, SharePoint designer workflows and custom developed Visual Studio workflows.

Imagine the folllowing scenario with which I have been faced.  Working with a user to implement a mission-critical business process that is focused on the steps required to acknoweldge and act on changes to customer requirements.  The workflow is developed, tested and rolled out – in production.  Everyone is happy.

A few months later a request for a change to the process is made which necessitates a change to the workflow that has 50 workflows currently in process.  How do we test that exactly?  Good question and there is no easy answer.

Since a SharePoint workflow is associated with a list based on a GUID that is environment specific you can’t do it without some ridiculous (in my view) manual steps that are outlined very nicely at my favourite SharePoint site – End User SharePoint.  http://www.endusersharepoint.com/2008/12/08/why-can%e2%80%99t-i-easily-port-sharepoint-designer-workflow-solutions-from-one-list-to-another-part-1/

In my view this is a deal-breaker for using SP workflow for automating business critical processes.  I’ll be attending the SP 2009 conference next month and will be eager to see if and how this has been addressed.  In the meantime if anyone has any experience with dealing with this issue I’m interested in hearing your feedback.

Bookmark and Share
VN:F [1.9.3_1094]
Rating: 10.0/10 (1 vote cast)
VN:F [1.9.3_1094]
Rating: +1 (from 1 vote)

Popularity: 8% [?]

Share and Enjoy:
  • Facebook
  • Digg
  • del.icio.us
  • Sphinn
  • Mixx
  • Google Bookmarks
  • StumbleUpon

SharePoint Blogs as a Communication Mechanism

Filed under:Enterprise 2.0,SharePoint,Social Networking,Web 2.0 — posted by Jason MacKenzie on September 21, 2009 @ 6:44 am

i_love_blogging-787805As those of you who read this blog periodically know, I work for a large, global manufacturing company.  As part of the rebranding effort of our MOSS 2007 implementation many of our senior executives have started blogging.  This provides another medium for them to converse with the peeps as it were. At the outset their intention was to create a two way dialog with our employees and take some intial steps to embrace the world of Enterprise 2.0.  I would say that while it has been somewhat successful, but it has not met expectations.  I have some ideas as to why and some solutions but am very interested in the feedback of those who have enjoyed a successful blogging initiative.

This great article by Joel Olsen triggered gave me some excellent food for thought to ponder this situation: http://www.sharepointjoel.com/Lists/Posts/Post.aspx?List=0cd1a63d%2D183c%2D4fc2%2D8320%2Dba5369008acb&ID=253

Here are some of the issues that I see as an obstacle to success.

  1. Corporate Culture – ours is an organizationally decentralized company.  While we have made great strides in improving communication and collaboration over the past 1o years some of that institutional memory lingers.
  2. Lack of Governance – clear governance needs to be defined on acceptable blogging and commenting policies.  This will provide clarity to people about expectations and give them some certainty on how to ensure their comment is published.
  3. User Profile Data – While this isn’t necessarily related to blogging it is critical in order to extend MOSS from a communication and collaboration tool to a platform for connecting people.  This shift in my view will drive people to the portal as part of their day to day activities and increase the opportunity for users to read and interact with blogs.  This is difficult in a decentralized organization like ours because the responsibility for populating AD with accurate information lies with the individual manufacturing facilities.
  4. Latency – I see this as a major issue.  When people take the time to post a comment it needs to be reviewed and approved within a reasonable period of time.   Currently when they post it “disappears” into the ether and will only show up once approved.  There then is a further delay in waiting for a response.  We are looking at implementing a simple “Thumbs Up” mechanism so people can immediately give feedback on content.  We discussed a ranking system or even having a Thumbs Down option but have decided at this point in the evolution of our Enterprise 2.0 initiative that we want to encourage positive feedback and leave more comprehensive and potentially negative feedback for the comment mechanism.
  5. Metrics – the only way you can know if any initiative is successful is to define measurements and success criteria and then….wait for it…measure them.  The problem with OTB SharePoint usage statistics is that they absolutely do not provide you with enough information to make informed judgments about whether what you are doing is working.  In our situation our executives typically post new blogs on Mondays. 
    1. We initially created a graph for each blog showing number of hits and distinct users for the last 30 days.  This was helpful in the sense that it showed us both usage trends over time and confirmed that there was a spike in traffic 1-2 days after the blog was posted.
    2. We then linked the SharePoint usage data to our main application database to show how many distinct users per month from each manufacturing facility  were visiting the blogs.  Interesting, but not overly useful.
    3. We are now looking at metrics that will require some proactivity on the part of the blog admins but should prove more useful.  Breaking down the metrics by week to coincide more closely with the posting cycle.  And then doing some research to understand the effectiveness of the blog?  If a blogger highlights a certain facility for great work they did, the traffic from that facility should increase if the message is getting across.  Or if a blog is posted focused on a specific major customer of ours the ideal outcome would be that all facilities dealing with or hoping to win business from that customer would be drawn to the blog post.  If not, there is a problem.  But you can’t know if you don’t measure it.
    4. Average length of time to approve and respond to a blog comment.  In my view there should be an SLA around this.  I personally would not want to have a conversation with someone that took a week to respond.
    5. As I highlighted in a previous blog entry we have wired up a DVWP to a SQL query to highlight blog comments and their current status to make it easier for approvers to see if there are any new entries that need review.  We have also encouraged them to set up alerts on their Comments lists.
    6. A quick tip that many people don’t know is that by appending “_layouts/usagedetails.aspx” to the end of your site URL you are able to see different usage metrics.  You wil be able to see for example a list of users by day that have accessed your site.  This can be helpful in understanding who is accessing your blogs and when and will allow you to get a sense of who is reading each post.  Again – it’s not perfectly accurate but tied with the other metrics you can start to get a good picture of who is conuming the content.
    7. SharePoint Designer also has some usage reporting that you can use.  If you open a site and select the Site > Reports >Usage option you can see the reports that you can take a look at.
  6. Exposing Content – we have a site called Blog Central and each blog is a subsite of that.  We currently roll up the latest blog entries using the CQWP.  The issue with that is the fact that the Blog Central site is still a click away from the home page.  We are looking at a revamp of our homepage to leverage the CQWP and JQuery to in order to maximize the use of space and allow users to more easily see what is new.  We are also looking at rolling up the comments to a more prominent central location in order to highlight the fact that there is dialogue taking place.  Currently comments are only accessible by looking at the bottom of specific blog posts which makes it cumbersome for the users.

I hope you find this information helpful and most importantly I am interested in any feedback on your own experiences.

Bookmark and Share
VN:F [1.9.3_1094]
Rating: 6.0/10 (2 votes cast)
VN:F [1.9.3_1094]
Rating: 0 (from 2 votes)

Popularity: 5% [?]

Share and Enjoy:
  • Facebook
  • Digg
  • del.icio.us
  • Sphinn
  • Mixx
  • Google Bookmarks
  • StumbleUpon

Rolling Up Blog Posts

Filed under:IT,SharePoint — posted by Jason MacKenzie on September 2, 2009 @ 5:40 pm

I was recently presented with the following scenario:  As part of the creation of a SharePoint dashboard, my business users are interested in seeing the number of blog comments and their current status by blog.

Our blogs are contained as subsites of a site called Blog Central which reside in a site collection called “Public.”  The dashboard resides in a separate site collection.  Our site collections contain individual content databases.

As a former developer, my initial response is to find an out of the box solution wherever possible. 

  1. A content query web part wouldn’t suffice as its scope is limited to the current site collection
  2. Adding a new data connection in SP Designer to hook up to a dataview web part (DVWP) won’t work because the lists and libraries (not the web services) are also limited to the current site collection. These can be combined to recursively roll up content in the current site collection however.

I ended up querying the content database directly and presenting that through the DVWP.  So, in SP Designer I created a new Database Connection.  Database_Connections

 

 

 

 

Browsing to the content database for the Public site collection I wrote the following query in order to retrieve the correct data:

SELECT     Webs.Title,
                    CASE UserData.tp_ModerationStatus
                                   WHEN 0 THEN ‘Approved’ 
                                   WHEN 1 THEN ‘Rejected’ 
                                    WHEN 2 THEN ‘Pending’
                     END AS Status,                        
                      COUNT(*) AS Total 

FROM       AllLists INNER JOIN                       
                    Webs ON AllLists.tp_WebId = Webs.Id INNER JOIN 
                     UserData ON AllLists.tp_ID = UserData.tp_ListId 

WHERE     (AllLists.tp_Title = ‘comments’) AND
                      (Webs.FullUrl LIKE ‘%blogcentral%’) 

GROUP BY UserData.tp_ModerationStatus, Webs.Title 

ORDER BY Webs.Title, UserData.tp_ModerationStatus

I then conditionally formatted the DVWP to show different colours based on status and done.  
DVWP

 

 

 

If there is a better way to do this, using CAML or some other method,  please let me know and I will share it.

Bookmark and Share
VN:F [1.9.3_1094]
Rating: 9.0/10 (2 votes cast)
VN:F [1.9.3_1094]
Rating: +1 (from 1 vote)

Popularity: 4% [?]

Share and Enjoy:
  • Facebook
  • Digg
  • del.icio.us
  • Sphinn
  • Mixx
  • Google Bookmarks
  • StumbleUpon

Creating a Web Chat Prototype in SharePoint

Filed under:IT,SharePoint,Web 2.0 — posted by Jason MacKenzie on August 28, 2009 @ 6:19 pm

Webchat

 

 

 

 

 

 

Please take a look at my latest webcast about creating webchat prototype in SharePoint similar to what you see here: http://fastlane.gmblogs.com/

As always you feedback is more than welcome and I hope you derive some value from this information.

The webcast is located here: http://www.screencast.com/users/JasonScottMacKenzie/folders/Default/media/1534ed98-3ba1-4156-bb7f-8fe524c01577

Bookmark and Share
VN:F [1.9.3_1094]
Rating: 10.0/10 (1 vote cast)
VN:F [1.9.3_1094]
Rating: +1 (from 1 vote)

Popularity: 36% [?]

Share and Enjoy:
  • Facebook
  • Digg
  • del.icio.us
  • Sphinn
  • Mixx
  • Google Bookmarks
  • StumbleUpon

previous page · next page


image: detail of installation by Bronwyn Lace

WordPress Loves AJAX