Thursday, November 14, 2013

Articulate Storyline: SCORM Reporting from WebObject to LMS

The sample zip file posted here in articulate community contains an example of WebObject sending SCORM variable to LMS. Published output has two javascript files. WebObject uses these two files.
  1. story_content/custom.js: This file acts as bridge between Storyline variables and WebObject. WebObject uses custom.js file to communicate with LMS and also to update the Storyline variables on slide for display.
  2. webobject/scripts/main.js: WebObject uses main.js for all its internal logics. 

// custom.js
// JavaScript Document

var findAPITries = 0;
var lmsAPI;
var gameScore = 0;

function findAPI(win){
while ((win.objLMS == null) && (win.parent != null) && (win.parent != win))
{
findAPITries++;
// Note: 7 is an arbitrary number, but should be more than sufficient
if (findAPITries > 7) 
{
alert("Error finding API -- too deeply nested.");
return null;
}
win = win.parent;
}
return win.objLMS;
}
function getAPI()
{
   var theAPI = findAPI(window);
   if ((theAPI == null) && (window.opener != null) && (typeof(window.opener) != "undefined"))
   {
      theAPI = findAPI(window.opener);
   }
   if (theAPI == null)
   {
    if (_Debug) // BMD added
      alert("Unable to find an API adapter");
   }
   return theAPI
}
function init(){
lmsAPI = getAPI();
}
function GetPlayer()
{
var player = parent.GetPlayer();
return player;
}
function setVariable(varName, varValue){
var player = GetPlayer();
player.SetVar(varName, varValue);
setScormScore();
}
function getVariable(varName){
var player = GetPlayer();
gameScore = player.GetVar(varName);
console.log("gameScore=" + gameScore);
console.log("cmi.core.score.raw=" + getScormScore());
}
function setScormScore(){
var blnResult;
blnResult = lmsAPI.SetScore(gameScore, 100, 0);
console.log("Returning " + blnResult);
return blnResult;
}
function getScormScore(){
var sLearnerScore = lmsAPI.GetScore();
return sLearnerScore;
}
init();
// custom.js ends here
------------------------------------
// main.js
// JavaScript Document

function setGameScore(score){
gameScore = score;
setVariable("gameScore", gameScore);
}
function getGameScore(){
getVariable("gameScore");
}

No comments: