Manage Hierarchical data in SharePoint lists - Building a Project Team site template

No matter how hard you try, or time you spend... there is always something new to learn on SharePoint. Not just as Developer, Architect, or as IT Pro, but more so as User! I have learnt along that users can best be classified in slabs whereby some adopt a new product quickly, while others find it difficult to grasp new features no matter how usable... and most get to a point where they learn most (usable!) features and form their comfort zone around what they have learnt by cognitive and settle with it. They just won't move ahead of curve, and you can either blame users or the product... go figure!

I think SharePoint has many such boundaries, and I keep seeing them. I wonder, why didn't O'Reilly come up with a title like "SharePoint Hacks" as part of their popular series, despite the product being so full of them and also being undisputedly popular. Perhaps publishers and authors never settled on content and/or number of volumes needed for such title.

Opinions aside, I want to bring focus of this post to one of most common case of SharePoint usage... Project Management. While there are Fantastic 40 templates by MS that includes PM template, but have their story of issues. Users continue to struggle to best use built-in Lists for doing ad-hoc and light-weight project management. It is disappointing that such template was missed out of RTM, as templates in a generic product like SharePoint are a great means of delivering product-know and best practice guidance in shortest cycle. Apart from instant productivity gains.

While utilizing most out-of-the-box features to build such template, I'm going to focus on a specific tip of using SharePoint lists for managing Hierarchical data through maximized use of content-types. This will also bring in light usefulness of this not-so-well-discovered new feature of 2007, and how it can be applied to varied Master-Detail list data scenario's.

Problem Case

To summarize, I want to:

  1. Build a simple PM site template for a Project team, only by utilizing standard features and no coding.
  2. Instead of creating multiple lists for managing Requirements, Tasks, Risks, Defects, and Releases, I am going to maximize usage of multiple content-types in a list feature of SharePoint 2007. While doing, I'll share findings, hacks, and limitations as it exists.

Most list data doesn't live alone, and is related to another list that we commonly connect through Lookup columns. While Lookups are easy to use and does work for most scenarios, there are cases when there is need for managing Master-Detail without compromising context of Master while working on Detail data. SharePoint doesn't handle such cases well, or at all. Entering a Detail record and also to a specific Master, that resides in another list, through a lookup becomes a difficult usability issue. Particularly when you have large list of masters, SharePoint converts drop-down into a less usable one (when items>20). Problem heightens when Masters Title isn't unique; there is no way to correctly pick the record to ensure the Detail record is associated to correct Master. Take case in point, there is long list of Requirements and for each there are Work-Items, Defects, Releases, and Risks that you want to manage. How many lists will you switch, when all you want to do is narrow-down on a specific Requirement at a time.

Now there are some tricks that you can apply through SharePoint Designer to Master forms, to create child Detail records. This still requires context switching, and only works for forms. I am looking for something which gives better usability for Hierarchical data, without Relational quirks. SharePoint lists aren't treated well if assumed as mere Tables with relationships through Lookups alone; this is a slight paradigm shift for most users, used to considering lists as web extension of Excel files or Access tables!

Rules of the game!

In order to solve problem at hand and also to come up with something more useful than is functionally obvious to common users of SharePoint, I am going to restrict myself to following:

  1. Do NOT write any code, or apply hacks that would otherwise be out of reach of normal SharePoint user.
  2. Do NOT customize the site using SharePoint Designer. After all how many users have a licence purchased!
  3. Use everything possible/offered on UI to deal with the requirements given above.

Project Team site Requirements

Keeping it simple, team wants to:

  1. Manage Requirements given by Product owners.
  2. Manage and track Work associated with each Requirement, for associated Work-Items, Defects, Releases and also any Risks.
  3. Maximize use of out-of-the-box SharePoint (WSS) features to get most out of Project Team that's geographically distributed and heavily depends on SharePoint to collaborate and communicate. Use Wiki, Discussions, Calendar, Contacts, Libraries with Web-Parts and Views as a ready-to-use template.

Building a Project Team site template

I created following lists, ordered as in Navigation on site:

  1. Project Requirements: Single list for Requirements, Tasks/Work, Defects, Release-schedules, and Risks.
  2. Project Documents: All documentation pertaining to Project goes here.
  3. Release Calendar: View all releases scheduled in a Calendar.
  4. Project Releases: Version tracking Build Releases across their stage lifecycle.
  5. Project Wiki: Wiki library for Project, so team can collaboratively author content such as technical design.
  6. Team Work: Snapshot view of all the Work, team is working on.
  7. Team Calendar: Event calendar for prime events on project, such as meetings, holidays, and vacations.
  8. Team Contacts: Contact information for Project stakeholders and other contacts.
  9. Team Discussions: Discussion list for team working on Project, with an aim to to get out of emails for many conversations.
  10. Home: My Work status, Requirements in Progress, Announcements, Discussions, Project Team, Documents, Contacts and Team Calendar.

Project Team

While 2-10 of above was relatively straight which most common users already understand, like using Views, Web-Part Views, Computed Columns etc. You can self-discover these in site template as it is attached to this post. I'm instead going to focus on Requirements list.

Hierarchical Data in Requirements list

SharePoint supports multiple content-types within same list. These content types can have varying columns/schema. Also folder content-type is available by default in each list. So in order to support Hierarchy of data types, we are going to leverage Folder content-type as container.

List Settings > Advanced Settings > Enable Content-Types Management

image

Go to Site Settings > Site Content-Types

Defined new content-types for Work (inheriting from Task), Defect, Release (inheriting from Work) and Requirement.

image

Define a new content-type, Requirement, inheriting from Folder so that Requirements can become container for other Work items. This will allow us avoid switching context across lists and various usability improvements. Wait for a moment...

image

Similarly, other content-types defined and they are then included into List Settings.

image

As a result of adding above content-types, new columns are added into list.  Notice union, and their source content-type.

I created Requirements list based on Tasks list template, in order to get feature of being able to send mails when item is Assigned To as user. After adding above content-types I removed Task content-type and also removed any left-over Column, such as Task Group.

Also I added some new Views as below. Notice the "Show-In" status and how 2 Views can be marked Default. Not that Views are default at different levels, ie Requirement and All. If you are browsing at Top root-level, for Requirement, Requirements view is going to be default. If you are browsing inside a specific Requirement, by default you'll see Work Progress.

image

To make it work, you have to configure "In Folders" section of Standard view template when creating or editing a view.

Requirements View (Top level)

image

Work Progress View (items under respective Requirements)

image

You can not only show items inside respective Folders, you can also have a Flattened view to show All items in all/any folder.

Team Work view (all Work items)

image

Release Calendar (all Release items in all folders, in a Calendar view)

image

Now going back to List, in default Requirements view, I have added on Requirement. By default, New button is given as Priority=1 from content-type management section in List settings... so that New button default to Requirement content-type in root level. At lower levels (views!) it will now show up as its been filtered out due to view settings and runner-up Work content-type will take over the New button behavior by default.

image

Click the requirement, and you will notice the View flip to Work Progress view since you are now one level down under Requirement content-type (a folder).

This is elegant as you now very well know which Requirement you are under and need to work for. All child Work, Defects etc are now scoped exclusively for that requirement only. Saving you ton of effort with clicks and flipping across lists and forms.

image

I never liked Gantt views in SharePoint 2007 as they are unusable when periods are long, do not allow grouping at anything other than week. Horizontal scrolling is never a favorable web experience! BUT, in this case I have created a view that Defaults to Gantt. First it gives a better sense of time, scoped at a requirement, and horizontal scrolling issue is minimized since a single Requirement is anywas not going to take longer than 3 months! (exceptions aside)

image

When one level down, you see following Views in menu. Notice, Requirements view is missing. This is because when you are level down, you can only switch to a View that is at same level or a flattened "All".

image

While when you are at Top-level, you see following. Notice that, flattened, All views - Release Calendar and Team Work are visible here as well, while lower-level view isn't. And Requirements is now showing as default, separated.

image

Limitations and Caveats

Some caveats to take note of:

  1. Data-sheet view does not work when you are one-level down in a view. Though it shows up as an option in Action menu.
  2. No way to hide content-types other than Requirement, when at top-level. Hiding from list settings, hides them from all levels!
  3. You can hide specific content-types available under a specific requirement from New menu. Open context menu of a Requirement and select "Change New Button Order". There is no way to set this globally on a content-type basis, say Requirement in our case.

Conclusion

In my view, using multiple content-types in a list is a great way to manage data hierarchy, enhancing usability and portability of data. In order for you to jump-start and play with above example, I'm including Project Site Template (.stp) file, with and without sample content.

Feel free to feedback through comments and do share your own ideas, suggestions, tips, and hacks to make it Requirement list or site template any better. Thanks.

Hope you find it useful. Phew! :-)

-- Sharad

Download: Project Site v1.0 | Project Site v1.0 (with sample content)

Update (Aug 13th 2009): Since release, there seems to have been an issue and templates stopped working (throwing error while creating site). Reported by many readers, I finally got chance to check on a fresh machine with WSS/SP2 bits and indeed it failed. So I've recreated these manually (on a WSS SP2 installation), instead of trying to figure the underlying cause - in the interest of time! Links are updated, please download and let me know. Thanks for everyones feedback. Keep it coming... Sharad.

33 Comments

  • thanks for this post, very clever stuff for a beginner like me - its given me a real "eye opener"

  • Very good - I have put together a course for SharePoint end-users that does not require code or Sp-Designer except for creating a couple of light-weight workflows and I think this is a nice lab to work through.

  • I've downloaded your site templates and imported them into the Site Template library, but when I try to deploy a new site using the template, I get an error that the template is invalid or cannot be found.

    I'm using WSS 3.0 and it's a fresh install

  • Since these templates are built with WSS3/MOSS that has SP1 installed. You'd need to have SP1 or higher version for your installation. Newer version templates do not work/import on older version installations.

    You can also save .stp as .cab, unzip and then look a Manifest.xml to see the version within, and compare with the version that your installation has by going to Operation > Servers on central admin.

    Let me know, should you still face the issue.

    -- Sharad

  • I am not entirely new to sharepoint, but new enough... Can you provide more detail you section, "Building a Project Team site template
    I created following lists, ordered as in Navigation on site:" Items 1 through 10?

  • Awesome! Thank you so much for this article, this solves so many of my complains against the PM-solution :)

    One question: In this setup the data of the requirement is not visible "inside" the requirement. Is there a way to display the data of the requirement-folder in the view?
    I would even accept a solution involving Sharepoint-Designer.

  • Hi,
    I have installed your template and using it. its great saves me bunch of time. One thing when i clicked on "Team Work" i got 404 error.

    Can you fix this and email me at cloudno009@hotmail.com?

    Thanks

  • This is an excellent tutorial. Do you know of a way to add a field such as Total Hours to the Work items and have that summarize up to the project record in some fashion?

  • I am also getting an error that the template is invalid or cannot be found. I am using WSS3 version 12.0.0.6219 which is the same version as in the manifest.xml.

    Any ideas on how to solve this would be much appreciated!

  • Hi

    Great article. Wish I would have read it first before trying to make my changes.

    I wanted a list of "issue" (a list of bugs) ids to be available in a dropdown on the creation of a new "Task".

    I added the column "Issue ID" under list settings for "Tasks" and again under content type "project Task".
    The settings for the column was lookup based on the "Issues" list.

    All that happened was that the new button has disappeared in the toolbar at the top (the one next to Actions and Settings)

    How do I get this back?
    Thanks Jeff


  • Why can I not see the "Folders" option on my view settings?

    JK

  • Hi i'm using WSS3.0 SP1 x64 on Windows 2008. All is installed using default settings. I run many .stp's yet this one (both with and without sample content) gives the error as reported by various other commenters: The template is invalid or cannot be found.

    I'm very interested in your template and would really appriciate it if you could check this error out.

    Maybe it's just some minor path setting or something?

  • I'm with Hubert and the rest. I so want this template and yet get the same error, the template is invalid or cannot be found. Has anyone solved this? I have confirmed that I have SP1 installed. The masses are clamoring Sharad. We call on you to consider our plight.

    At least can I get a list of the Site Columns and Content Types by List, maybe a pdf of the views?

  • Everyone,

    I have updated the download links with templates recreated manually on a WSS SP2 installation. Since release, there seems to have been a conflict somewhere - perhaps by some updates from MS (Infra Update ot any IU - not sure). I didn't dig deeper, just recreated them manually (and tested) on a fresh install of WSS 3 with Service Pack 2.

    Hope this works for everyone without trouble. Let me know accordingly.

    Enjoy,

    -- Sharad

  • Thanks Sharad. This has really helped me avoid getting stuck in sea of nasty coding. I just have one issue that I'm trying to overcome having used your method. The client wants the list items contained within the folders (or requirements in your example) to have a hierachical numbering. I.e. All items contained with the folder "Requirement A" which have been given a unique ID of A to be given unique ids A1, A2 etc. Any ideas if this is possible?

  • Well, for something like that you'd likely end up writing code using item-level Event handlers. Before that consider exploring the option of Calculated columns - though I doubt if they'll get you far... (for folder hierarchies!)

    Thanks - happy to see it coming of use.

    --Sharad

  • Hello, I have a similar scenario to create but I'm having problem because I actually need another level of hierarchy. I need to create a Section (folder), then a Policy and Policies will have procedures associated with them. The policy and procedure are very detailed and I tried played with having Policy as a folder but then you are unable to see any details which is required. If I could associate a Procedure to a Policy somehow that would help. Any Ideas? I'm not afraid of doing any custom coding if that's required.

    Thanks, Eric

  • Do you have downloadable template files for SharePoint 2010?

  • Hey, you?re the goto expert. Thanks for haingng out here.

  • Just desire to say your article is as astounding.
    The clarity in your post is just fine and i could assume you are an expert on this subject.
    Well with your permission allow me to grab your
    RSS feed to keep updated with forthcoming post.
    Thanks a million and please carry on that the enjoyable work.

  • I’m extremely impressed with your writing skills neatly as with that the format on your blog.
    Is this a paid subject matter or did you customize it yourself?
    Anyway keep up the nice high quality writing, it's uncommon to peer a nice blog like this one at the existing time.

  • Simply wanna input on few universal things, The website layout is perfect,
    the articles is actually first-class : D.

  • Do you mind if I quote a few your articles as long because I present credit and sources back to your site?
    My blog is in the very same niche because yours and my visitors would
    certainly benefit from quite a ton of that the info you hand over
    here. Please let me recognize if this alright with you.

    Thanks a large amount!

  • In most cases there are some fascinating time limits in this post conversely I don’t identify if all of
    themcenter to heart. You can still find some validity however I will take hold opinion until I explore it further.
    First-class article , thanks therefore we want extra!
    Put into FeedBurner because properly

  • Hello, Neat post. There’s a problem together with your site in internet explorer, would check this¡K IE nonetheless is that the marketplace leader and a huge component of people will miss your first-class writing as of
    this problem. Prishtina Travel

  • What a lovely blog. I’ll certainly be back.
    Please preserve writing!

  • very first-class post, i certainly adore this excellent website, persist in it

  • I am curious to lookup out out what blog method you’re using?
    I’m experiencing some little security problems with my latest blog and I’d for
    instance to look for something more safeguarded. Do you have any
    recommendations?

  • Re En ce qui me concerne les avis de ce gentilce court debrieffing necessiteraient de nouvelles avis… Votre
    approche est bonne quoique je ne defend pas les divers avis plus haut!
    il faudrait apporter des valeurs pour etre plus rigoureux!
    Au plaisir de vous relire

  • This website is great. I like it.(www.linkspirit.net)N_X_D_S.

  • I something like what you guys have been up also. Such intelligent work and reporting!
    Keep up the superb works guys I’ve incorporated you guys to
    my blogroll. I think it’ll improve that the value of my website .

  • Bereken zelf uw hypotheek. Hypotheek berekenen?
    Maak snel een indicatieve berekening van het maximale leenbedrag van uw hypotheek.

  • This is certainly my initial stop by and I really like
    what I’m seeing. Your weblog is so much fun to look over, quite compelling as well as informative.

    I’ll undoubtedly recommend it to my friends.

    Nevertheless, I did have some question with that the commenting.
    It kept giving me an question whenever I clicked on publish
    comment. I hope, that can be fixed. Plenty of thanks

Comments have been disabled for this content.