Blog

Categorised by 'SCORM'.

  • One the drawbacks of using SCORM 1.2 is the inability of being able to read a “cmi.interaction.n.student_response” reference. In my mind this is very strange. Why allow a value to be written to but not read? Being able to read a users response to a question is an important feature. If anyone knows the answer to why this is the case, then please leave a comment.

    I guess under normal circumstances having a student_response reference that is write only would suffice. Unfortunately, my SCORM content required user’s to review all questions along with their submitted answers.

    Even though SCORM 2004 has corrected its previous error of misjudgement, what are developers who are forced into using SCORM 1.2 (like me) to do? Thankfully, there is a really useful reference called “cmi.suspend_data” that allows us to store any string value we want (up to 4096 characters). This is what I will use to store all users responses. I created a “semi-colon delimited string” to parse into the suspend_data reference. For example:

    q1=a;q2=1,4,7;q3=d;q4=air;q5=c
    

    The following code can be used to add/update values within the suspend_data:

    /*******************************************************************************
    **
    ** Functions to Add/Update CMI.suspend_data field
    **
    *******************************************************************************/
    function EditSuspendData(suspendId, suspendValue) {
        var suspendData = doGetValue("cmi.suspend_data");
    
        if (!SuspendDataExists(suspendId)) {
            AddSuspendData(suspendId, suspendValue, suspendData);
        }
        else {
            UpdateSuspendData(suspendId, suspendValue, suspendData);
        }
    }
    
    function AddSuspendData(suspendId, suspendValue, sdList) {
        if (sdList == null || sdList.length == 0) {
            sdList = suspendId + "=" + suspendValue;
        }
        else {
            sdList += ";" + suspendId + "=" + suspendValue;
        }
    
        doSetValue("cmi.suspend_data", sdList);
    }
    
    function UpdateSuspendData(suspendId, suspendValue, sdList) {
        var sdArr = sdList.split(';');
    
        for (i = 0; i < sdArr.length; i++) {
            pieces = sdArr[i].split('=');
            if (pieces[0] == suspendId) {
                pieces[1] = suspendValue;
                sdArr[i] = pieces[0] + '=' + pieces[1];
                break;
            }
        }
    
        //put the string back together;
        var sdList = '';
    
        for (i = 0; i < sdArr.length; i++) {
            marker = (i == 0) ? '' : ';';
            sdList += marker + sdArr[i];
        }
    
        doSetValue("cmi.suspend_data", sdList);
    }
    
    function GetSuspendDataValue(suspendId) {
        var sdArr = doGetValue("cmi.suspend_data").split(';');
    
        var answer = "";
    
        if (sdArr != "") {
            for (i = 0; i < sdArr.length; i++) {
                var qPieces = sdArr[i].split('=');
    
                if (qPieces[0] == suspendId) {
                    answer = qPieces[1];
    
                    NavButtonInactive("submit-button", false);
                    break;
                }
            }
        }
    
        return answer;
    }
    
    function SuspendDataExists(suspendId) {
        var sdArr = doGetValue("cmi.suspend_data").split(';');
    
        var sdFound = false;
    
        for (i = 0; i < sdArr.length; i++) {
            var qPieces = sdArr[i].split('=');
    
            if (qPieces[0] == suspendId) {
                sdFound = true;
                break;
            }
        }
    
        return sdFound;
    }
    

    You can now easily add/update/get your question values or any other values you store in your suspend_data. The functions you will need to use are:

    • GetSuspendDataValue() – to retrieve a value.
    • EditSuspendData() – to add/update a value.
  • Published on
    -
    3 min read

    SCORM - Point of View From A Novice

    Being a developer, I am always open to learning new platforms (to a point) and coding languages. I am currently involved in a project with one key requirement: build a web-based e-learning system. Sounds simple enough. First thing that came to my mind was to build this online learning platform in ASP.NET. However, to keep in line with the clients current method of learning, the build will have to be carried out using a SCORM platform.

    What Is SCORM?

    There are many articles on the web that discusses what is SCORM. Since being my first post on the subject, it seems like a good idea to take a high-level view of this platform. Wikipedia defines it as:

    “A collection of standards and specifications for web-based e-learning. It defines communications between client side content and a host system called the run-time environment, which is commonly supported by a learning management system (LMS).”

    I interpret SCORM as being a compliant way to build reusable e-learning objects, re-assuring organisations that new courses will run with existing courses already developed on their system. SCORM is important because there are so many people developing e-learning and deploying it on different systems that ensuring compatibility between these systems and courseware is vital. This is SCORM!

    All custom built SCORM content sits in a piece of software called an Learning Management System (LMS) that administrates, documents, tracks and reports all training programmes. Once a course is built, user’s will log into the LMS and take it.

    Where Do I Start?

    As the title of this post suggests,  I’m a newcomer to the world of SCORM and building my first course wasn’t short of a few obstacles from choosing a development tool to the know-how on creating the content. One of the most difficult aspects of building custom SCORM content is the lack of online information.

    There seems to be many people asking questions but not many SCORM experts to answer them. Your best luck in getting the basic know-how is to search various sites and forums. One of the best sites I found is http://www.scorm.com. The guys on this site really know what they are doing and are the best SCORM experts out there. Dare I say they probably know more about SCORM than the original creators.

    Building Your First SCORM Package

    1. Look through all examples to get a technical understanding on the basic principles of SCORM. You may not 100% understand what is going on. But these examples are an invaluable source for any SCORM novice. You can even re-use these examples to build your own custom SCORM content.
    2. Use a SCORM player to run packaged content you create. The best one I’ve used is SCORM Cloud. It provides an ideal environment to ensure all your custom content works correctly. What’s even better, the service is free for basic usage. Click here to signup and read more on what SCORM Cloud has to offer.
    3. Download a SCORM package template containing manifest and schema definition files. Without these, your content will not work.
    4. Get an understanding of SCORM Runtime references.
    5. Development tool – Even though there are e-learning development tools available online, you probably won’t need them. Personally, I found the development tools more of a hindrance than an asset. If you do not plan on learning how to build SCORM content from scratch or not too fussed on the layout, then there are many WYSIWYG tools at your disposal. Be warned, it’s more than likely these WYSIWYG tools render your content in Flash or dirty HTML. I use Visual Studio or Programmers Notepad, giving me the added benefit of having total control over how I want my SCORM content to look and feel.