SCORM 1.2 Cookbook

The late Claude Ostyn – in his role as Learning Standards Strategist for Click2Learn – created a wonderful SCORM 1.2 Resource Kit aka the SCORM Cookbook. Sadly, despite its popularity, SumTotal Systems (the descendent of Click2Learn) removed the SCORM 1.2 Resource Kit from its website.

Fortunately, there are several places on the Internet where you can still find a copy of this document. Here’s a couple of places you can look:

Posted in Further Reading | Leave a comment

Step 18 – cmi.core.score._children and cmi.core.score.raw

After that last post, I think I’ll look at a nice easy one. The score for the course is stored in an element called cmi.core.score.raw. Actually, this is just one of a group of 3 elements that relate to the course score:

  • cmi.core.score.min
  • cmi.core.score.max
  • cmi.core.score.raw

but only cmi.core.score.raw is mandatory, so it’s the only one that I’ll worry about.

Continue reading

Posted in Run Time Environment | 1 Comment

Step 17 – cmi.core.total_time and cmi.core.session_time

Let’s look at another pair of SCORM 1.2 data elements – cmi.core.total_time and cmi.core.session_time. These elements are used to track the amount of time that the student spends on the course.

Now, I could argue that the whole concept of ‘seat time’ for web-based training courses is meaningless – after all, there’s really no way to know whether the 4 hours that a student appears to spend on a course was actually spent on the course material, or on browsing the Internet in another window. But, some organizations still require students to take a certain number of hours training to receive continuing education credits, or retain their professional certification. So I should support this SCORM functionality just in case it’s needed.

Continue reading

Posted in Run Time Environment | 2 Comments

Step 16 – Read-Only Elements and LMSSetValue

When reading the last post, you might have wondered why I didn’t do anything about the LMSSetValue() API call and associated server-side code since cmi.core._children, cmi.core.student_name and cmi.core.student_id data elements are all specified as read-only elements.

The simple answer is that I really don’t care if the course (in contravention of the SCORM standard) sets these values. My setValue.php code will just dump the data into the scormvars database table where it will do absolutely nothing, and my getValue.php code has been set up to return the correct values – “student_id,student_name,lesson_location,credit,lesson_status,entry,score,total_time,exit,session_time”, “Addison, Steve” and “007” in my “imaginary” LMS, or values from the main LMS database if I was to use this in a real application.

Posted in Run Time Environment | 1 Comment

Step 15 – cmi.core.student_id and cmi.core.student_name

According to the SCORM specification, cmi.core.student_name and cmi.core.student_id are read-only data elements. They simply return the name of the student as stored by the LMS (in lastname, firstname format), and an ID number for the student stored by the LMS.

This is pretty easy to implement in my “imaginary” LMS since I simply modify the getValue.php code like this.

Continue reading

Posted in Run Time Environment | 1 Comment

Step 14 – cmi.core._children

When (if) the course issues the LMSGetValue(‘cmi.core._children’) call, it expects to see a value returned from the LMS. But what is that value?

The SCORM standard says that the cmi.core._children data element should store a list of the other data elements in the cmi.core.* set that are supported by the LMS. Since I’m planning to support the mandatory variables – and only the mandatory elements – that’s simply:

Continue reading

Posted in Run Time Environment | 2 Comments

Step 13 – The SCORM 1.2 Data Model

At the moment, I’m simply dumping data from the course into a database table, and reading it back from that same table without paying any attention to what the variables actually mean. And, so far, I’ve got away with it. But that can’t last … I need to look at the variables and do something with them.

So where do I find that information? Let’s look at the structure of the SCORM 1.2 documentation.

Continue reading

Posted in Run Time Environment | 1 Comment

Step 12 – Revisiting the API – Flushing the Buffers

On reflection, in Step 10 I may have been a little quick to say that I could ignore the LMSCommit() and LMSFinish() API calls. Even though I don’t have my own buffering system, I’m essentially taking advantage of AJAX to do this for me by using it in synchronous mode. So I do need to make sure that any AJAX calls are completed before the course finishes.

Continue reading

Posted in Run Time Environment | Leave a comment

Download VS SCORM Rev 0.A

I’ve finished my first test run successfully. At this time, you can download a copy of the code that I’ve written so far. However, it’s important to note that – right now – this is a VERY incomplete implementation of the SCORM standard. So I’m going to call it Rev 0.A.

You can download a zip file containing the Rev 0.A code from [this link].

Posted in Run Time Environment | 1 Comment

Step 11 – Testing It Out Again

Now I’m going to run the course again and see if my AJAX requests work. This is what I get:

Continue reading

Posted in Run Time Environment | 4 Comments