Omicron Llama

Coding all day, every day.

SharePoint Programme Management Office

This blog post defines my implementation of a Sharepoint Programme Management office which satisfies the original requirements with only one major additional Web Part. The rest of the implementation uses Out the Box features of Windows Sharepoint Services.
I’ve been meaning to write this for some time now, and although it’s a little rushed, I hope I can get the general gist of what I’m achieving.
The organisation is commissioned to run projects in the renewables sector. The projects vary in scope, but are usually along the lines of Life Cycle Assessments, Feasibility reports, as well as running events, and having involvement in Task Group activities with other external organisations.
There is currently one Programme Manager, and four project managers. Each of the project managers may contribute to projects managed by others, but almost all have involvement from two researchers and one regional manager. There is also involvement from the organisation’s Communications Team. The project outcomes also vary, but usually result in a project report document, as well as Factsheets which are printed publications that disseminate the information from the project in a digested manner. Projects also may result in other printed publications or by electronic means, e.g. a website.
The requirement is to have isolated areas accessible by the colleagues which area reserved for each project, and harness the collaboration features of Sharepoint, and to have a view which displays the status of all the projects at once.
Ultimately, the Task List feature of Sharepoint can be used for each project, and resource planning may be accomplished by the development of a further web part. This post does not show this in the end result, but details of how it may be done will be defined.
How it works
The Programme Management Office sits in it’s own Web in Sharepoint. It may be it’s own site collection or top-level site, but the entirety of the Project Work must be in it’s on Web (SPWeb).
Each project is in it’s own subsite of the PMO site. A project template is created which contains the basic lists required to store each project’s details and related documents, as well as task lists and calendars.
The parent PMO site displays, among other things, a customised web part, which aggregates a specific List (named by the template) from all the child sites and displays selected information in a table. Details will follow.
Once a project is Completed, it is marked as so, and after a set period of time (eg, 6 months), the site is moved off to an archive area.
My limited programme experience has forced me to use techniques I would otherwise use. For example, I use a comma separated list for the user to enter a series of columns he/she would like to display. I would have preferred something that pulls up the columns available and allows you to select, but at the time I didn’t know how to do this. The comma separate list works fine, but requires more error checking in the code, to make sure the user has entered a column that actually exists.
The Project Site Template
Each project site is given the name of the Project Number, as well as the URL, in the format YYNNN. eg. 09-001. The “description” of the site stores the project title.
The lists included in the Project Site template are as follows, with default names and permissions for each:
Document Libraries:
  • Communications” – stores Emails and other correspondences. All users have read/write access here.
  • Contracts” – This stores the contractual agreement for the specific project. Only the project manager may have write access here.
  • Documentation” – Main documents relating to the project are stored here, such as Master/Child MS Word documents for the final report, excel spreadsheets for charts, and drafts. All users have write access. Version controlling is enabled.
Tasks – default task list. Only project manager may have write access.
Details – Custom List. This stores the details of the project. The fields are detailed below:
  • Project Number – Single line of Text – This stores the project number as is found in the URL.
  • Title – Single line of text – the project title
  • Customer – Single line of text – this is the customer for this particular project
  • Contractor – Single line of Text – this is the organisation or person carrying out the work of this project
  • Project Category – Choice – This is a drop down list of business areas within renewables that this project works under
  • Finances – Single line of Text – This is a non-essential field as yet, and may store the budget for this project
  • Project Due Date – Date – This stores the expected due date for a project
  • Assigned To – Person or Group – This is the project manager
  • State of Play – Single line of Text – This displays the current state of the project
  • Report – Hyperlink – This stores the URL to the archived, final project report
The Project Overview Dashboard
This is a web part that takes in the following properties, details of how it works to follow:
  • PMO Url – String – the URL to the Programme Management Office SPWeb
  • Display Optionsenum { HideCompleted, OnlyCompleted, ShowAll } – Filters the projects in the list
  • Details List – String – the Title of the Custom List that stores the individual project details
  • Completed Field – String – This is the Title of the Field that identifies a Completed project.
  • Due Date Field – String – The is the Title of the Field that stores the Due Date
  • Columns – String – this is a comma separated list of the fields to pull from the Details Custom List. This must at least contain the Completed Field and Project Due Date.
How the web part works.
This is rough pseudo-code for the operation of the web part. Error detection isn’t included in this code as it would clutter the clarity of the listing.
  • Open an SPWeb pointing at the “PMOUrl” string.
  • Get the collection of sites in the PMO Web
  • Iterate through the collection
  • Look for list with title as defined in “Details List”
  • Create a DataTable of this list. Empty the datatable of rows.
  • Separate the “Columns” string by comma, explode into an array of strings.
  • Remove the columns from the DataTable that are NOT defined in the “Columns” string array.
  • Re-order the columns as the user entered.
  • Iterate through the Fields from the Details List of the current site. Find fields from “Columns” string array, populate DataTable accordingly.
  • Check “Display Options”. Skip this Site if “Completed Field” Contains “Completed” and selection matches user entry.
  • Add HTML to format the first column as a URL to the current site.
  • Go to next SPWeb in Collection
  • Look for Details List
  • Iterate through Fields, populate DataTable as neccessary.
  • Check “Display Options”. Skip this Site if “Completed Field” Contains “Completed” and selection matches user entry.
  • Format first column as URL to current site.
  • Repeat for all SPWebs in collection
  • Bind DataTable to a GridView.
  • Whilst binding (event handler to catch rows as they bind):
  • If Due Date is less than today, set BG colour of first cell to Red
  • if Due Date is less than 1 week FROM today, set BG colour of first cell to Orange
  • Render HTML markup in any field
  • Add GridView to Web Part Controls collection.
I understand that a lot of the pseudo code above is very brief, and there is repetition and re-iteration in parts, but I haven’t seen much of a performance hit with 25 active project sites, and I doubt that the organisation will have more than 40-50 active projects in any one year. I have also missed out (I think) a fair number of details of the actual function of certain parts, but I think from the above you have an understanding of how the whole idea works.
Resource Planning.
It may be possible in the future to iterate through the task lists and gather information as to how many projects a particular User has an assigned task within a specified period of time, thus showing how busy that user is during that period of time.I haven’t developed this yet, and it’s currently not in my development scope to do so, but I have suggested the idea and it may be carried forward in future.
Final Notes
The archival process for “Completed” project sites is yet to be automated, and may currently have to be done manually with STSADM, to an Archived Project Site, which uses the Same Project Overview Web Part to show the details of all historical projects. That comes next 🙂
Any questions at all, even suggestions, criticism and other things, please leave them. I do need to hear feedback as I’m no seasoned expert at this, just a coder that can write something to do something 🙂
I know the main worry might be efficiency of the web part, or archiving. I’d gladly welcome suggestions for this, too.

Leave a Reply

Your email address will not be published. Required fields are marked *