Step 25 – Review Table of Mandatory Data Elements

Time to review the list of mandatory SCORM 1.2 data elements that I created in Step 19. The table shows:

  • the name of the data element;
  • is it readable;
  • is it writeable;
  • the format of the data; and
  • the initial value for the element.

You’ll see that I’ve added a ‘dummy’ element called adlcp:masteryscore to store the value (if any) set in the IMS manifest file that’s used when setting cmi.core.lesson_status after LMSFinish() is called. You could argue that this should really be stored in the (optional) cmi.student_data.mastery_score data element, but I don’t want to support any of the optional data elements right now.

Continue reading

Posted in Run Time Environment | 3 Comments

Download VS SCORM 1.2 RTE Rev 0.B

I’ve made quite a bit of progress since the last code bundle that I made available. So I thought that it might be a good time to release another snapshot. Once again, however, it’s important to note that this is an incomplete implementation of the SCORM standard. So I’m going to call it Rev 0.B.

Continue reading

Posted in Run Time Environment | 2 Comments

Step 24 – cmi.suspend_data and cmi.launch_data

Nearly there! If you take a look at the table of mandatory data elements that I presented in Step 19, you’ll see that I only have 2 elements left in my list:

  • cmi.suspend_data
  • cmi.launch_data

These elements store the information that the SCO (again, if you don’t know what an SCO is, please refer to this page) needs to re-start after being suspended, and start for the first time respectively.

Continue reading

Posted in Run Time Environment | 1 Comment

Cheating on SCORM Courses – It’s Not Difficult

Since I’ve spent much of the last 10 years working in the slightly paranoid world of information security, I’ve always been concerned about SCORM’s dependence on JavaScript for communicating with a LMS. It’s always seemed to me that it would be very vulnerable to being hacked. And, a couple of months ago, Philip Hutchison at pipwerks created a stir by demonstrating one way to do this.

Continue reading

Posted in Further Reading | 1 Comment

Step 23 – More About cmi.core.lesson_status

OK … time to implement the handling of cmi.core.lesson_status as I discussed in Step 22.

I’ve already covered the initialization of cmi.core.lesson_status in Step 20, so I don’t have to worry about that. So most of my changes will be to the finish.php code that’s used when LMSFinish() is invoked by the SCO (if you don’t know what a SCO is, please see my last post). Just as a reminder, here’s the logic flow that I’m going to follow.

Continue reading

Posted in Run Time Environment | 10 Comments

Courses and SCOs

Reader ‘jcasolutions’ recently posted this comment:

When you make this statement “course (or ‘SCO’ in SCORM terms)” it is incorrect. There is no such thing as a course in SCORM. What most people consider a course is equal to a content aggregation in SCORM. A content aggregation can contain multiple activities that launch multiple SCOs. To say a course is a SCO or even to say a content aggregation is a SCO is assuming a 1 to 1 relationship when in fact there is a 1 to many relationship. When you make the assumption that a course is equal to a SCO then that limits you to tracking only one SCO per course and the database should be set up so that you can track “n” number of SCOs per Content Aggregation and that data should be stored per user / per session.

And he’s absolutely right – I’d just been hoping to avoid discussing this for a while. But, since it’s been raised, I guess it’s time to start thinking about the SCORM 1.2 Content Aggregation Model (or CAM for short).

Continue reading

Posted in Content Aggregation Model, Run Time Environment | Leave a comment

Step 22 – Progress and Completion – cmi.core.lesson_status

The process by which cmi.core.lesson_status is determined is quite complex. So, with a deep breath, let’s see if I can figure it out. Here – as far as I can tell – are the basic rules.

Continue reading

Posted in Run Time Environment | 8 Comments

Step 21 – Progress and Completion – Setting Values

The course can change any of the following elements that relate to course progress and completion tracking:

  • cmi.core.lesson_location
  • cmi.core.lesson_status
  • cmi.core.exit

In other words, it can tell the LMS where it is, whether the course is completed/passed/failed/incomplete … and how the course was exited. Nothing for me to do here – this is all handled by the LMSSetValue() API call and the associated setValue.php script on the server.

Note that the cmi.core.entry element isn’t listed here because it can’t be changed by the course. However, it could be changed by the LMS when the LMSFinish() API call is invoked. This element tells the course how it should re-start when the student next returns.

Continue reading

Posted in Run Time Environment | 6 Comments

Step 20 – Progress and Completion – Initialization

I’m going to get started on the mandatory ‘progress and completion’ elements:

  • cmi.core.lesson_location
  • cmi.core.credit
  • cmi.core.lesson_status
  • cmi.core.entry
  • cmi.core.exit

Of these, only the 3 shown above in bold need to be initialized with specified values. So I’ll modify my initialize.php code to include the following lines:

Continue reading

Posted in Run Time Environment | Leave a comment

Step 19 – Quick Review of the Mandatory Data Elements

OK … I’m going to take a quick look to see how far I’ve got through the mandatory data elements. Here’s a list abstracted fron the SCORM 1.2 standard that shows (from left to right):

  • if I’ve addressed it;
  • the name of the data element;
  • is it readable;
  • is it writeable;
  • the format of the data; and
  • the initial value for the element.

Continue reading

Posted in Run Time Environment | Leave a comment