Training Site Template – Part 1: Introduction

Sean Hi folks,

Sean Gabriel here. I'm a Program Manager for the SharePoint Designer team, and I work primarily on our application building experience. I'm definitely looking forward to sharing my knowledge here - so if you have topics in the app building space that you'd like to see covered in this blog, don't hesitate to ask.

You may have heard of the Application Templates for Windows SharePoint Services 3.0, a set of recently released SharePoint site templates that are designed to solve 40 common customer scenarios. I had the pleasure of building one of these templates myself, and I want to show you how to do it using SharePoint Designer 2007 - from start to finish!


The template I'll be discussing is Employee Training Scheduling and Materials. The best way to understand it is to download it and try it out yourself, but here's a quick overview of how it works:

Two types of users can visit the site, instructors and students (learners). When an instructor has a class to teach, he/she adds it to the Courses list, specifying things like the date, location, and number of available seats. Students can then browse through the list of upcoming courses and sign up for anything they are interested in - and the app keeps track of the registration list, reminds users when a class is soon to start, and collects student feedback after the class is over. At a glance, both students and instructors can view a personalized dashboard of their trainings on the site's home page.

These behaviors are achieved through the use of workflow and a few specialized instances of the Data Form Web Part (DFWP). Here's the battle plan for how we'll build out the app:

  • Design the key lists - Courses, Registrations, etc.
  • Add sign-up and reminder logic with workflow
  • Override default list views and forms to control app behavior
  • Create dashboard page with aggregate views across multiple lists

For most of these items we will be using SPD, but the first bullet is something we need to do through the browser for now. So today let's walk through the list design to set us up for building the DFWPs next time.

List Schema Design

If you browse to "View All Site Content" on the training site, you'll see the following list of lists:

The heart of this app is the Courses list. A course is a lot like an appointment - which has a title, location, start and end time, etc. - so a great place to start is with the built-in Calendar list. On your blank SharePoint site (you're following along, right?) do the following:

  1. Click on Site Actions > Create
  2. Choose Calendar under the Tracking column
  3. Name it "Courses" and supply a description

SharePoint has taken care of providing us the calendar-like view that you see in the training site under "Upcoming courses" (sidenote: and this works because Courses are now using the Calendar content type). But the schema isn't quite right yet. Let's tailor our new list around courses specifically - so, from the calendar view where you are now:

  1. Click on Settings > List Settings
  2. Click Create Column for each line item below, and fill in the following info (use defaults unless specified):
    1. "Instructor" :: Person or Group :: OK
    2. "Filled Seats" :: Number :: Yes to Required :: Min Decimals 0 Default 0 :: OK
    3. "Total Seats" :: Number :: Yes to Required :: Min 0 Decimals 0 Default 0 :: OK
  3. Click on the name of each existing column and modify it as specified:
    1. Title :: Rename to "Course Title" :: No to Required :: OK
    2. Description :: Rename to "Course Description" :: OK

Now our Courses list has an instructor associated with it, and placeholders for calculating the number of available seats in the class (which we'll get to later). Don't worry about the views on this list yet, we'll be going over those next time as well.

Since I walked you through the Courses list in detail I'll trust you to be able to follow quickly through the rest of the lists. Next up is Course Materials, which will hold any documents related to the courses. Sounds like a document library works, but each doc will need a pointer back into the Courses list so we know which course it's associated with. Here's how to do it:

  1. Click Site Actions > Create :: Document Library
  2. Name it "Course Materials" and suppy a description, we used "Microsoft Office PowerPoint presentation" as the doc template
  3. Click Settings > Document Library Settings
  4. Add column "Course" :: Lookup :: Yes to Required :: Get information from Courses :: In this column Course Title :: OK

We also want to collect course feedback from students after they've taken the class. Here you can be as broad or specific as you want, but these are the steps for creating the Course Surveys list you see in the training site today:

  1. Click Site Actions > Create :: Custom List
  2. Name it "Course Surveys" and supply a description
  3. Click Settings > List Settings
  4. Click Title :: Rename to "One-line review" :: No to Required :: OK
  5. Add column "In-depth review" :: Multiple lines of text :: OK
  6. Add column "Course" :: Lookup :: Yes to Required :: Get information from Courses :: In this column Course Title :: OK
  7. Add the following 3 columns as... :: Choice :: Yes to Required :: Supply choices* :: Radio Buttons :: Empty default :: OK
    1. "Effectiveness of the instructor"
    2. "Usefulness of the course materials"
    3. "Satisfaction with the course"

* = fill in the answers to the survey, you can see them in the picture on the right (or try adding a new item to Course Surveys in the template).

Additionally, we need to keep track of registrations for each course, and while there are many ways to do this, the model we used for this template was a separate list that essentially stores (Name, Course) pairs. We'll enforce the seating requirement both in the front-end views and back-end workflow. So for now, lay the foundation with this Registrations list:

  1. Click Site Actions > Create :: Custom List
  2. Name it "Registrations" and supply a description
  3. Click Settings > List Settings
  4. Click Title :: No to Required :: OK
  5. Add column "Course ID" :: Lookup :: Yes to Required :: Get information from Courses :: In this column Course ID :: OK

Now do the exact same thing to create the Past Registrations list (but change the name, of course). From here you can create the (optional) Announcements and Links lists, which you'll find in Site Actions > Create under the Communications and Tracking columns, respectively.

Well done! You now have the 7 lists that house all the data in the Employee Training Scheduling and Materials site. The 8th list (Tasks) will be on its way shortly, as next time I'll show you how to create the workflows for registration and reminders I mentioned earlier. That's the key to providing rich application logic behind our SharePoint site here. Until then -


Comments (38)

  1. Chris Quick says:

    Wow! This is great! I’m looking forward to future posts on this topic as this has lead me to some great discoveries with SharePoint designer already! I’m hoping to be able to move some of my internal projects into SharePoint using something very similar to this!

    So how much longer until part 2!?

  2. Ramesh says:

    Great Article!!. Thanks

  3. B Wotiz says:

    Great article, can’t wait to read the rest.

  4. Hey there, It’s Sean again with another installment of the template development walkthrough. Last time

  5. Handaman says:

    Is there a way we can check the value of a Date Field to be null?

    I have a column ‘Date2’ i want to send an email only if the ‘Date2’ field is null.  If the Date2 field is not null i want to send another email.

  6. Preeti says:

    i have created one custom list (and added the folder to feature folder of sharepoint.) and hve installed it on sharepoint server.I am able to see the list name in custom lists of sharepoint site. But when i try to use that list in my site i get the following error.Please help me.!!

  7. RK says:


    I want to know how "Budgeting and Tracking Multiple Projects" application template is developed. Especially, how on clicking a project, the issues or tasks related to the project are filtered by passing ID through URL as querystring.

  8. Yannis says:


    I’ve set up the Employee Training Scheduling and Materials template and I am trying to find out how an adminstrator can remove a student from the Course reagistration list. It seems that only the student himself can unregister from the course. Any suggestions?

  9. jwillman says:

    I have downloaded the Training site app and need to know how to set the "Dates" up as reoccurring.  We have in house managment training and they are on every other Thursday, can this be modified easily?  Thanks, Newbie sharepoint admin

  10. Matt Peden says:

    To start I would like to see the answers to some of the question asked before, especially the question refering a teacher being able to remove a student from the class.  Anyways I was wondering if it is possible to have a teacher sign up attendee’s, maybe those that dont have access to a computer.  I am very familiar with the SP Designer, and I have designed some custom web parts, workflow through Visual Studios 2005.  Any feedback will be greatly appreciated!



  11. S Lim says:


    I am so glad that I found this blog. I am currently working with "Employee Training Scheduling and Materials" template. Is there anyway I can change "Courses I am attending" to show the current course attended by every employee? Also same to "Courses I have attended" to show the all the courses attenended by every employee. I am trying to use template for monitoring purpose.

    Can you also tell me what workflows are applied to this template? I want to know and amend bit to customise to our needs.


  12. S Lim says:


    I just realised more question.

    Can you tell me how can change the date and time format of course to just date without times?

    I don’t know why some column items are not subject to edit.


  13. Akash says:


    I had downloaded this template..

    How to add a new Column to course list

  14. Vishan says:

    Hi, I am creating a training site for my organisation. I dont understand how you decrement the number seat spaces… Can go through a step by step guide on how to create a worflow to decrement the number of seat wcah time a a course is booked!. ??????

    Many thanks!.

  15. Vishan says:

    Can some one please tell me how to add extra colomns to the list for courses… i have added the coloms… when i go to list settings, the colomsn are visible… but they wont appear when i click new on teh calender list…. are tehy hidden???, please can you ell me how to unhide them????.. Please Please Please


  16. arun says:

    Hi Sean,

    I am using  Cousre list(claendar list) having title,location,sdate, enddate and some more column.

    I want to add one more  column in this list i.e Businees unit dropdown column,but i tried lot to insert column but in vain. Again i  tried through XSLT in SPD but no use, i am getting error.  It’s very mandatory for me to use one more column in that list(NewForm.aspx of Cource list) to fulfill my requriment.

    Please tell me, how can i overcome this problem.

    (Template: Employee Training Scheduling & Materials)

    Thanks in advance


  17. Vishan says:

    Hi arun… I had the same problem.. i couldnt edit the Emp Training site at all… So i managed to create a replica site…. I dont this it is possible at all to modify this site.

    You might be able to do some modifying in SharePoint Designer, but not in SharePoint it self.. In In sharepoint designer, go to Insert…SharePoint Controls……….then Custom List Form…. this allows you to edit any Display Form, EditForm or NewForm..

    Alternatively.. join up to the SharePoint User Group UK…. I have a few blogs on there if you are interested, and there are some really helpful people on tehre aswell..

  18. arun says:

    Thanks Vishan,

    I tried lots to add columns but in aim searching for other options.

    Can u tell me how you resolved that issue.

    Thanks & Regards


  19. vishan says:

    Arun….. you cant edit that training site, its copyrighted or proteced.

    I managed to create a list that copied item to another list and make it work that way, its not the same thing, but for what i wanted …. its ok!. lol

    Do you ahve sharepoint designer 2007…?., i managed to create something similar to that site, but not quite exactly the same… I need to know how to decrement the number each time a course is enrolled etc, but im still working on it…

    There is an interesting blog on teh sharepoint user group UK.

    What i did was create a custom list (called e.g. LIST 1) with the colomns that i needed, then attahed a "Copy list item" workflow to that list.. so whenever someone fills in that list…. all the items are copied to another list (CALLED LIST 2)

    then in sharepoint designer, open up list 2, locate the newform.aspx page, and insert…sharepoint controls… then custome list form and insert list 1 into list 2 as newforms.aspx.

    that will then display all items

    Sorry arun, that probably dont make sense…. but you should give it ago… and read up on the blogs on Shareuser groupUK


  20. Katerina says:

    Hi Arun and Vishan

    I had the same problem and i found the solution in the link below.

    It all has to do with content types….


  21. Bill says:

    I would like to have someone else (Bosses) be able to register peolpe for course and have the individual recieve the email.

  22. LILIANA says:

    I’m trying to implement this, and I don’t know how to create a registration. How do you connect Courses and Registration list? Is there a button in Course NewForm? How do can I do that?

  23. Neo says:

    Is it possible to connect the employee training thingy to my current calendar ?

  24. Hi everyone, This is Sean (I know, finally!), blogging to you with the next part of the training site

  25. spdblog says:

    Sorry for the lengthy delay on replies, hopefully some folks browsing these comments will find this useful.

    Handaman: you should be able to set this up using the Compare list field condition, just use the column you added as the date. If you’re having trouble, try setting it to some minimum date you can control that wouldn’t be used, ex. 1/2/1934.

    Yannis: you’ll probably want to re-enable the edit view for admins – did you try removing item-level permissions in the Registrations list (List Settings > Advanced Settings)? Part 3 has some suggestions on how to accomplish this.

    jwillman: just make use of the ‘recurrence’ field – it’s hidden on the views and forms because of the way the DataFormWebPart was placed on those pages. To unhide it, remove the style=’display: none’ attribute from the relevant <tr> tags – also covered in Part 3.

    Matt: this will probably require re-architecting the template a bit, since the items in the Registrations list are keyed off of the Created By field, a system field you can’t arbitrarily set. One ide would be to add a new column to the Registrations list, and set it by default to Created By, but give admins a security-trimmed data form (try using the ddwrt IfHasRights function) that allows access to that field.

    S Lim: I’ll try to cover this in part 4, basically you just need to change the filter criteria for that DataFormWebPart and remove the condition that checks Created By == [Current User] for the items in Registrations. Also, more details about the workflows in the template are available in part 2 of this series.

    Vishan: check out part 3 for some information about the ‘hidden’ fields in the default forms, and an explanation of how the DataFormWebPart used in each page is not schema agnostic. Also, the workflow logic for seating is covered in part 2.

    Neo: from the calendar view of the Courses list, click Actions > Connect to Outlook, then confirm in the dialog that appears.


  26. Took me long enough to get this post up, but it&#39;s finally done (hopefully – please let me know if

  27. Toni says:

    Hi there Sean

    I have a few questions for you?

    1.       Make a field so that it cannot be altered (the name of an uploaded file)

    2.       Remove the Title Column or make it a mandatory field

    3.       Add a link to a choice of a drop down to then load another filed once this choice is selected.


  28. Tim says:

    Hi Sean,

    I’d really like to see somebody do a similar group of articles on the Help Desk template; covering Knowledge Base as well.

    Thanks a lot for these great posts.



  29. Jeannie says:

    If a person registers for a course and their name contains an apostrophe (O’Cain), their name doesn’t show up in the list "Courses I Am Attending".  They do get added to the Registration List however.  Any thoughts?

  30. majohnso says:

    Hello…we have been using this site out of the box, but with all of our training classes posted.  Up until yesterday, names of the people who have signed up were listed under the course description.  I have tried everything to try and figure out why it is no longer showing up.  We are also not able to unregister classes.  Any help that you can provide would be greatly appreciated!  Thanks.  We are using Share Point Services 2003…

  31. Rick says:

    When I save a site as template as "test" – it showed up under Custom tab in Template selection.  How can I remove custom site templates from the Custom tab as I tried to use stsadm -o deletetemplate -title "test" and it said it could not find that template.

    When I use Sharepoint Designer 2007 – "test" template showed up as Sharepoint Template when browsing.

    Any idea?

  32. LucyLu says:


    i’m integrating sharepoint with an HMC panel. i need to know the code for each of these 40 templates, so that i can create a sharepoint site from my control panel. (ex Team Site template has for code STS#0)

    Team Site:STS#0

    Blank Site:STS#1

    Document Workspace:STS#2

    how can i get them?

    thank u

  33. Lady_MCSE says:

    O’Crud!!!  (That’s not really the word I want to use, but close.)

    Thank you Jeanine for bringing up the apostrophe issue.  I just happen to be THE sharepoint admin for our co, and have been trying all freakin’ day to figure out why "my courses" doesn’t work.  I’ve been fiddling with SPD and reading everywhere …

    As my Irish luck would have it, I happen to be an O’User.  


    SharePoint will be great once it gets out of O’Beta

  34. mpersonett says:

    The traiining app is great. I am trying to change the courses list so that course title and course description are lookups to a new list called inventory. this would allow me to have one list with about 10 classes that we offer every other month. so courses would have each offering. and inventory would have the standard list.

    What can I do to turn these fields into references linked to the new list of inventory for classe?


  35. Junkman says:

    For reference and a possible update to the template, the Announcements and Links links did not properly convert during the template conversion.

    Announcements title links to /sites/seangab/test18/Lists/Announcements/AllItems.aspx

    Links title links to /sites/seangab/test18/Lists/Links/AllItems.aspx

    Easily resolved but just a heads up :o)

    Thanks for the template as well, saved a weeks worth of rummaging around.

  36. Mona says:

    will there be a template for 2010 available soon???

Skip to main content