Ben Tedder (@bentedder) has long been a fan of SPServices and his writing about it is great, to boot. I liked this post back when Ben first put it up on his blog because it really does tell a story, and SPServices plays a significant role in it.
Ben has built quite a few real-world solutions using SPServices that transcend what SharePoint can do. By using SharePoint as the back end data repository, Ben has managed to create solutions that provide a great user experience and are far more efficient than SharePoint can be when building through the UI. He does this without deploying any server-side code, just as I always aspire to do. Great solutions with minimal footprints.
Thanks to Ben for letting me republish this post from his blog.
SharePoint and jQuery SPServices in Education: A Case Study
The International School of Beijing needed a way for Elementary School parents to book time slots with teachers during bi-annual parent-teacher conferences.
- Easy to use (training is impossible).
- Integrate into the current intranet portal.
- Sync with the database to omit any kind of manual setup for secretaries.
- Deny parents the ability to book more than one slot with the same teacher.
- Allow parents to book the same slot for two different teachers (in case mother and father come in and meet with 1 teacher each to save time)
- If two or more parents are online at the same time, correctly queue the submissions so a double booking does not occur.
- Allow teachers to pre-block out slots where parents cannot book times.
- Allow teachers the ability to see their entire schedule, including which student is coming in during which time slot.
Solution (SharePoint, jQuery, and SPServices)
A SharePoint solution was built with jQuery to meet the requirements of the Elementary School. Let’s break down how the solution was created:
Part 1 – SharePoint
Within SharePoint three lists were created:
- Bookings (Each reservation had its own row in this list that stored the details of who booked it, for which teacher, etc.)
- Time Slots (A pre-determined list of time slots…in this case a list item was created for each 20 minute time slot from 12-6pm on Thursday and Friday Oct 18 and 19).
- People (An external content type that pulled records from the database for each student, each of their parents, and each of their teacher names)
One of the trickier parts of this solution was grabbing the external content from the database in a usable way. Once it was in, we were able to work with the data. However, this list has 10,000+ items, so dealing with larger data like this was quite challenging. Enter jQuery.
Part 2 – jQuery and SPServices
The bulk of this solution was created with the jQuery and jQuery SPServices Libraries. Using jQuery, we stepped through the process like this:
- Get the details of the logged in user (parent) using SPServices
- Get all the children of the logged in parent, push them to a drop-down menu
- Get all the teachers of the selected child from #3, push them to another drop-down menu
- Get all time slots from the Time Slots list, push to a third drop-down menu
- Retroactively disable all time slot options that have already been booked (by searching through the Bookings list for records that match the time slot and the selected teacher)
Once the data was present, the parent could interact with it in two ways, book, and delete.
To book a time slot, the selected child, selected teacher, and selected time slot (along with a comments area) was submitted and saved to the list. To delete a time slot, a delete button is appended to each reservation in the on-screen schedule with the ID of the reservation as the ID of the link element.
The data from the Bookings list is checked once during the time slot selection process, and again during the form submit process to make sure no double bookings have occurred.
This solution enables, for the first time at this school, parents to go online and manage their entire Parent-Teacher Conference schedule. Also, as an added bonus, if a mother and father both login, they can see the complete schedule for their child, even if only one of the parents made the bookings.
Once a parent books a time slot, they receive an email containing the details of their reservation.
An additional feature of this solution was that it was duplicated and tweaked for teachers to use a similar interface to pre-block out time slots where they did not want parents to come (ie, lunch, coffee break, going home). In that scenario the “one-block” restriction was removed for teachers, allowing them to customize when parents would be given the option to come in.