Slinger's Thoughts

February 14, 2008

Some refinements wanted and needed on Natalya’s training site solution.

Filed under: SharePoint — Tags: , , — slingeronline @ 11:29 am

Well, I got Natalya’s training solution working, and it works beautifully.  For our rather pedestrian SharePoint users this will be incredibly easy for them to use, and I like that.  Microsoft has put out their own solution also.  Although it is not quite as elegant as Natalya’s solution, there is some functionality in it that I would like to add to her solution to make it that much better.Once you get her solution set up, test it out.  It does exactly what she says it will. (You have to remember to add a “;” right before the __redirect instruction or it won’t work at all.) Now if you go back to the main page of the training site where you created the first data view and the “Sign Up” button, and click it again, it will register you for that class, again.  I would like to add some way to check the Attendees list for an existing registration so that it doesn’t add a registration to a class that a user has already signed up for.  It can still redirect the user to the Attendees page that list the classes that they have signed up for, but it shouldn’t add another registration to the same class.  I’m fairly positive that this can be handled in the workflow created by the Form Action Button, but I’m not quite sure how to do it yet.  This shouldn’t be too difficult though, since we already know how the ClassID variable is getting set.  The next two things are included in Microsoft’s solution, but I don’t know how to add those to Natalya’s solution.  We have a pretty fluid environment where I work, and many times a user will sign up for a class, and then have to “drop out” before they attend the class because they have a meeting or some other business to attend to.  A really easy way for a user to unregister for a class would be nice.  A Form Action Button that would dynamically change from “Sign Up” to “unregister” depending on whether a user has signed up for a particular class or not would be ideal.  I have no idea how that would work.  Again, we are counting on a workflow here to check the Attendees list first, but I don’t know how to make one button visible and the other hidden depending on the information in the Attendees list.  And lastly, if we can register and unregister users, a way to set a limit on class size when the class is created would be very nice.  We can create a column in our “Classes” list called “seats” identical to the way that Microsoft handles it, and when a user registers for a class, we can have a workflow change that number.  We can use this to add functionality to our current “Sign Up” button, but I would like to add another check in that workflow, that if the “seats” value is zero, then the “Sign Up” button doesn’t appear anymore.  Microsoft has a very effective solution for scheduling and managing training classes.  It isn’t very pretty though and it can be a little intimidating for users who are not very familiar with SharePoint.  I don’t like the way it looks, and some of the functionality is confusing. Natalya’s solution is incredibly elegant and easy to use, but adding some of this functionality would make it the perfect answer to any company’s training needs.  Fitting all of this functionality in will mean that the training site will be a maze of workflows, but the more we can automate on the back end, the easier it will be for our trainers, and our users who wish to attend our training classes.  I could add more to this, but I will stick to this right now.  Natalya, if you are out there, and you are reading this, some of your expertise would be greatly appreciated. Feel free to post 1,000 comments here if you wish.

Some other functionality that I may consider adding, is integrating the “Classes” list with outlook so that when you create a class, it will automatically schedule the training location on the company outlook calendar to prevent double booking.  Linking to a document library for course materials like Microsoft has done would be nice too, but it isn’t really needed for our small user base.  And although the ManageClasses page is very good for what it does, a better way to manage class attendance, and a way to track classes attended by users would be better.  I don’t want to change her solution, but possibly add some more functionality to it.  Most of these features (with the exception of the Outlook thing,) are included in Microsoft’s EmployeeTraining.stp solution.  So if I try to implement them in Natalya’s solution, I am going to be borrowing heavily from there.  If any one else wants to try and tackle this also, and comes up with a solution, throw it into the comments and let us know what you did and how you did it. Naturally any solutions I come up with I will describe, either in the comments here, or in another post. 


1 Comment »

  1. Well, conditional creation can be done (and I agree, it’s crucial for reliable implementation of this great idea of Natalya). I’ve tried it out and it works reliably.

    This is the way to do it: Create the “action” workflow section as indicated in the original blog, plus put a condition into the “conditions” section of the workflow step. The condition needs to read”If Attendees:ClassID not equals Classes:ID”.

    1. To obtain the “Attendees:ClassID” part, choose in its “Define Workflow Lookup” popup as follows: Source as “Attendees”, Field as “ClassID”; the second Field as “Attendees:ClassID”, and Value as “Variable:ClassID”.
    2. To obtain the second “Classes:ID” part of the statement, configure its “Define Workflow Lookup” popup as follows: Source is “Classes”, Field is “ID”, 2nd Field is “Classes:ID”, and Value is “Variable:ClassID”.

    How does it work: Even though there is no direct clause in the SP workflow conditions that can check if an entry with a specific field value exists in a list (here: Attendees), we can check if the returned value of that maybe incomplete list (here: Attendees) is the same as another value in another table (here the ID of Classes). Since in the case of a not yet existing entry the first part of the condition cannot be satisfied for any Attendees entry since such an entry with a “ClassID” identical to our Parent ID does not yet exist, the workflow does not get started in that case.

    Hope that helps!

    Comment by Felix — March 7, 2008 @ 1:38 pm

RSS feed for comments on this post. TrackBack URI

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s

Create a free website or blog at

%d bloggers like this: