Storyline 360 Suspend Data Handling

Good Day!

Being new to SCORM, I was wondering how Storyline 360 handles its suspend data. Does it affect the how it handles suspend data based on the LMS that you are using?

I have a scene that will generate a certificate for the learners upon completion. It defaults to the name that the LMS has and will auto-fill the input when the timeline starts.

One of the requirements for this is when a user changes the input to whichever name they desire, it should be saved and be retrieved upon their next visit. I used SCORM Cloud as a test LMS. My observation is that, for each relaunch of the course, it doesn't retrieve the name that I inputted from the last session through SetVar() and GetVar() methods.

I found a work-around by using lmsAPI.SetDataChunk to set the name then used lmsAPI.GetDataChunk to retrieve it. It worked well and fine but when it was deployed in our LMS it still retrieves something but, it is gibberish.

This is what I currently have by getting DataChunk:

This code will check if there were any saved names from previous sessions through GetDataChunk()

var player = GetPlayer();
var student = lmsAPI.GetStudentName();
var suspenddata = lmsAPI.GetDataChunk();
var username= player.GetVar("userName");
var displayname = "!";


if(suspenddata){
console.log("suspenddata is:"+suspenddata);
username=suspenddata;
}

if(!username){
console.log("username is null, setting to: "+student);
username=student;
}

player.SetVar("userName",username);

if(username){
displayname=" "+username+"!";
}
player.SetVar("displayName",displayname);
player.SetVar("nameInput",username);

When the user decides to change their name it will be saved to the storyline variable via SetVar() and is also passed to SetDataChunk() as shown below

var player = GetPlayer();
var nameinput = player.GetVar("nameInput");
var username = player.GetVar("userName");
var displayname = "!";

if(nameinput){
console.log("nameinput is:"+nameinput);
username = nameinput;
displayname=" "+username+"!";
player.SetVar("displayName",displayname);
player.SetVar("userName",nameinput);
lmsAPI.SetDataChunk(username);
}else{
console.log("nameinput is null");
}

This code works well when I deployed it to SCORM Cloud but as I said before, it would retrieve gibberish when deployed to our own LMS. I haven't tried deploying a version of this where it won't use DataChunk but even then the Storyline variables should be saved to the suspend data when deployed to SCORM Cloud but it doesn't. I am at my wit's end so any help would be appreciated. Thanks!

4 Replies
Michael Anderson

Are you saving the changed name to a Storyline variable? You should not have to resort to all of this javascript for this. If you saved to the changed name to a Storyline variable, that variable should be retrieved automatically when the course is resumed. You could then use that value if it is not blank(the user did not enter anything to change the default name), otherwise use the name value from the LMS. Let me know if you need more help with this.

Christian Ompad

Hello Michael,

I found a work-around for my problem but it is not as elegant as I what I had in mind. Storyline apparently stores and compresses its own variables to the suspend data only when you jump to another slide (I may be wrong). 

So basically I have a completion scene that contains one slide which users go to whenever they pass an exam. What happens here Storyline grabs the learner's name from the LMS via GetStudentName() and stores it on the SL variables. It contains a buttons to Print Certificate and Exit. The user sees this slide after they complete the course for the very first time or whenever they resume the course (only when they've passed it otherwise it resumes to the slide the are currently in) to re-print their certificate.

What I was trying to achieve is to save the name that the user entered when the user decides not to go with the LMS' retrieved name (e.g. If the LMS' name value is McTest, Test; the text input would allow them to change it to Test McTest manually) for when they decide to re-print their certificate all on this slide. Storing to SL variables would be the most logical first step, but not on this one. 

I messed around with the suspend data by using GetDataChunk and SetDataChunk to store the learner's name which was okay when you only have this slide as a course. So I've read the forums and asked for support about suspend data as Leslie mentioned and fiddled with the different lmsAPI functions. 

Solution:

I just added another slide so that SL can save my variables and users will be able to see the name that they stored before the reprint.

I come from a programming background and am new to SL and I think I might have spent much more time than I should have. Perhaps the APIs provided are a trade secret? Since they don't have proper documentation on their usage.