Skip to content

Single Pages Managed by LMS Navigation

Mark Statkus edited this page Jan 26, 2018 · 4 revisions

You may have a requirement to produce a single page SCO, that will take advantage of the next/previous buttons within the LMS. SCORM 2004 introduced the adl.nav.request which allows you to request to 'continue' or go back through 'previous'. It even supports requesting the check if the call is supported before you request it. They also allow you to call 'choice' from the SCO so you can jump around if need be. Queue the music.

Building a SCO with multiple pages means your using AJAX, a IFRAME or a Flash Movie to yield the desired result. Since this means building out all the player logic for moving forward/backward, saving (suspending), submitting (exiting) building single pages that can behave this way may save you time to market.

SCORM 2004 supports a 'controlMode' element which allows you to specify the ability for the student (and sco) to "choose" where it wants to go. Keep in mind if you state choice="false", neither the student or the SCO will be able to "jump" from SCO to SCO, and will be left with moving next or previous. If forwardOnly="true", then the student cannot go backwards. choiceExit="false" (defaults to true) will stop a student (or SCO) from being able to effectively jump past it, and can only request to 'continue'.

Sample to be placed within your <organization> within the imsmanifest.xml:

<imsss:sequencing>
    <!-- 
        Tips: 
        choice false removes the student selection 
        choiceExit false removes the ability for the student to jump past it 
        flow true tells the LMS to activate their next/previous buttons
        forwardOnly true would stop the student from going 'previous'.
    -->  
    <imsss:controlMode choice="true" choiceExit="true" flow="true" forwardOnly="false" />
</imsss:sequencing>

Where you place this in your imsmanifest.xml and organization structure matters. You may even find you need to place it at a couple levels depending on your structure. Since no tools I'm aware of exist for you to directly view the flow of your manifest file, you are left editing the XML, re-packaging, and uploading to a LMS to test.

Caveats

In order to jump around 'choice', the SCO needs to make some requests. And in order for that to happen beyond 'continue' and 'previous', this requires the page to effectively know about its other identifiers in the CAM package. You can get around this by pushing in these values in launch data so its not something you have to manually code change if you re-ordered the pages in the XML. But this means the development of these pages needs to support reading in launch data and or launch parameters to pull out behavior.

var canContinue = SB.getvalue('adl.nav.request_valid.choice.{target=PAGE-D}');
if (canContinue === 'true') {
    SB.setvalue('adl.nav.request', '{target=PAGE-D}choice'); // On Terminate LMS will auto advance
} else {
    // Failover
    canContinue = SB.getvalue('adl.nav.request_valid.continue');
    if(canContinue === 'true') {
        SB.setvalue('adl.nav.request', 'continue');
    } else {
        // choice must be 'false' or someone missed control mode on a tier in the XML
    }
}

When the SCO terminates the LMS will take this request and auto launch the next SCO in line. This can be handy even on multi-page SCO's when you want to naturally progress the student thru a lesson or unit/chapter without leaving them to push the next button.

Sample Package: One Page Progression.zip