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)

The idea is that Dokeos deals with SCORM contents by providing a JavaScript API (a library that can be called from the Flash) to enable SCORM features.

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.

One quick way to get there is to create your content in Dokeos, export it as SCORM, then go into the zip and into the imsmanifest.xml file and change items types from “asset” to “sco”. This will enable the Dokeos SCORM JavaScript library.
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

To do this, there is a first initial step which is to define a small library on the side of your content (along with the Flash or included into the Flash) that will communicate, in JavaScript, with Dokeos.
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.

I recommend you use this APIWrapper.js (or the one from Philip) and use it for all the calls you need to do from your Flash content. The only element I don’t know well here is how exactly you call or include the JavaScript from your Flash content. This will considerably reduce your efforts.
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.


  • Hi Yannick

    That’s a nice simple overview of SCORM packaging. I would just like to point out that the API wrapper provided by Claude Ostyn was meant to be an example, and was not meant to be ‘the’ wrapper for every SCORM course — there is no official SCORM wrapper, and (unfortunately) SCORM API wrappers have never been standardized.

    I personally found Claude’s wrapper helpful when I was starting out, but I also found it difficult to use because of the cryptic variable names and organization. I also didn’t like the fact that it lacked error-checking and used so many global variables, which is now considered a bad practice. The wrapper examples provided by the ADL suffered from the same problems.

    About a year ago, I decided to create my own wrapper that remedies these issues and make SCORM (1.2 & 2004) easier to work with. It can be found at http://pipwerks.com/lab/scorm/ (I also created a companion SCORM class for ActionScript that helps Flash users incorporate SCORM into their Flash movies). I’m not trying to plug — the wrapper is completely free, no strings attached — but hope that some of your readers may find it helpful. 🙂

    – philip

    • Wow, thanks for that. I haven’t checked the library but it’s good to know it’s already improving Claude Ostyn’s work. It might benefit from a little more visibility though, because SCORM resources are never very easy to find (good ones at least).

  • Hi Yannick,

    Thanks for this.

    SCORM compliance is both critical and complex in my experience. Supposed to be a norm but continues to generate series of problems, especially on the reporting side. To balance the fact that this norm implementation remains a matter of interpreting the sometimes obscure or vague SCORM documentation, manuals like yours favour a better collaboration between content providers and LMS vendors.

  • Furio Petrossi
    8 January, 2009 at 6:59 pm  - 

    I see that also Hot Potatoes now can export quiz to SCORM

    ——— cut here ————–
    New feature in version 6.2

    Using the Create SCORM package function on the File menu, you can now create a SCORM 1.2 zip package containing your exercise HTML file, along with any associated media files it requires. The Masher has a similar Create SCORM unit package function on its Actions menu. A SCORM package can be uploaded into a Learning Management System such as Moodle, enabling the exercise(s) to report their scores and other information to the LMS.
    by the way they (Hot Potatoes) quote a wiki page of our old friends about SCORM


    • Hola Angelo,
      Para exportar contenidos a SCORM desde Dokeos, se hace a traves de la lista de “itinerarios de aprendizaje”. Para crear SCORM en general, existen herramientas gratuitas como “Reload” o no gratuitas como Articulate.

  • Juan Carlos Raña
    6 February, 2009 at 10:50 am  - 

    Bueno, el mensaje de Yannick puede no ser lo suficientemente claro, ya que con Dokeos también se pueden crear contenidos SCORM y además exportarlos

  • Dear Sir/Madam

    My name is Fezile Mlungu. I have built a quiz from dokeos with the intention of using it on dokeos where I can see the detailed feedback page. Unfortunately I need to publish it as a SCORM file so that it can be viewed by other LMS applications. So, I added the quiz in learning path of dokeos and exported it as SCORM (zipped file). I can import from one LMS application I am using and do the quiz, however, when I click OK at the bottom, it returns the following pop up error, “The LMS does not support this feature”. Moreover it does not take me to the next page with scores and feedback. I also think it does not send the scores to the LMS. What can I do? Please help.

    • Hi Felize,

      The error message is quite clear: for some reason, the other LMS does not support this type of SCORM feature. For the export format, we use SCORM 1.2, and we use very few elements of it, but we do need them to report the score to the LMS. Please try to identify what features of SCORM are supported by your LMS. Many LMSes (including Dokeos) do not support the full range of communication messages of SCORM 1.2. This might be the case with the other LMS you are using. If you are good at debugging or have a web developer at hand, try using Firebug, a Firefox extension to debug JavaScript. Otherwise, please seek professional help.

  • Thank you Sir, my problem is sorted. Fortunately I did not have to debug but I tested my SCORM @ http://www.scorm.com and it worked from there. I think the problem is with the LMS I was using and not with my file. By the way I have downloaded Firebug and I think it rocks. I am in Cape Town, South Africa, when you are in this part of the world next year for Soccer World Cup, give me a call.

  • Hi Felize,

    I will (call you), but I’m not sure it’s going to be next year.
    I wouldn’t mind knowing the name of the other LMS, for stats.


  • HI Yannick,

    Its not a global LMS but by a training provider company based in Johannesburg, South Africa. The name of the LMS is called ConstructLMS. Is custom built.

  • Hi Yannick, I imported the same file we have been discussing above on Webct/Blackboard Version CE6 and it gives me the following error:

    “The package could not be imported because it is not compliant with SCORM content packaging requirements; imsmanifest.xml must be at the root of the package.”

    This is very strange to me because scorm.com passed it as suitable file when I tested it. The package is in SCORM 1.2 and WebCT/Blackboard supports SCORM 1.2.

  • HI Yannick, apparently I amanged to solve the imsmanifest.xml problem mentioned above. It was because the SCORM file I exorted from Dokeos had embedded subfolders in it, when I extracted them deeper my problem was solved. But I ran into which I hope you will document.

    These are errors I get when I import a SCORM PACKAGE IN WEBCT/BLACKBOARD v CE6

    “The SCORM package is not compliant with SCORM Ver 1.2 Conformance Requirements. All supporting schemas must be at the root of the package; the following schemas were not found at the root: [imsmd_rootv1p2p1.xsd , imscp_rootv1p1p2.xsd ] As a result, the package may not perform as desired. Are you sure you want to continue?”

    The whole error log looks like this:

    “The import failed.
There were 2 fatal error(s), 0 error(s) and 1 warning(s).
Content package does not match any of the configured adapters and default importer is used for this package. Some contents may not be properly imported.
    Unknown namespace used in XML file… imscp_rootv1p1p2
    The content package failed to import.”

    When I continue without sorting this problem, this is what I get, after I have completed my quiz and clicked the OK button;-

    “LMSGetValue (cmi.student.data.mastery_score) failed. Invalid argument error.”

Comments are closed.