Easy SCORM 1.2 creation – Extending the Dokeos export
Today I had to explain to a customer how to register time and completeness in a SCORM learning path, considering he’s got Flash content and he doesn’t know anything about SCORM.
This is what I answered (with little changes)
To enable this, there are various steps that need to be taken…
1. Your content should be a SCORM package.
2. Each step of your content should send a LMSInitialize() call to the Dokeos SCORM API when opened.
3. Each step of your content should send a LMSSetValue(‘cmi.core.lesson_status’,’completed’) upon reaching the end of the last slide
4. Each step of your content should send a LMSFinish() call upon closure (or change of page), or could do it directly after the LMSSetValue() call
Now each of these steps require a considerable amount of time to execute. This is why I didn’t enter into the details previously. This is the cost to pay to have a fully-trackable course (think that you’ll have to do that only once and you’ll be able to track all your learners’ progress)
1. Your content should be a SCORM package
Although there ae ways to go around this, they are all more or less as complicated as making your package SCORM compliant. I am attaching a very simple SCORM course. The important thing is that you understand that you need a directory to include an XML file (called the imsmanifest.xml) and that that XML file needs to give a list of all elements in your package. Finally, you have to zip this directory and this will be a (acceptable but not compliant) SCORM package.
Before you do that, make sure you define your prerequisites in Dokeos. This will save you some time later on.
If you need help on the format of your SCORM package, look for the SCORM 1.2 CAM document (Content Aggregation Model).
2. Each step of your content should send a LMSInitialize() call
As you will find in various websites (one interesting resource is http://www.ostyn.com/resscormtech.htm ), and in the APIWrapper.js file coming from a public SCORM course, you need to define in your Flash a way to get an attachment point to the SCORM library on the Dokeos side. This is done, in the APIWrapper.js, by the function getAPIHandle().
There is an alternative version of the APIWrapper.js available here: http://pipwerks.com/lab/scorm/ which has been improved starting from the basic version linked above and MIT-licensed (= you’re pretty much free to do anything with it), as Philip kindly told me in a comment to this article.
Once you’ve done that, you need to ensure that you content sends the LMSInitialize() call, which is done, using APIWrapper.js, by calling doLMSInitialize().
3. Call LMSSetValue(‘cmi.core.lesson_status’,’completed’)
You can do this, using APIWrapper.js, by issuing a call like this:
This will set the lesson as completed. However, you might as well want to set the time used for this entire Flash. To do that, you can use:
There are multiple other calls that you can do to get or set other values, but I won’t go into the details here.
4. Call the LMSFinish()
Finally, you have to call LMSFinish() to finish the process of your SCORM. Technically, you have to call LMSCommit() first (to save your changes to the Dokeos database).
This is it. After following these steps, your content should be SCORM-compliant (or almost so) and record both the time and the status.
Now if you want the second step to be dependent on the completeness of the first, then the imsmanifest.xml should define such dependency.
Normally, it is already the case because you exported your content from Dokeos *after* defining pre-requisites.
You should now be able to import your course into Dokeos again, but this time as SCORM, with time and status tracking included.