Getting the learner name from the LMS is a nice wee trick to personalise a course (used sparingly!)
Using whatever API (in this instance I was using Pipwerks SCORM 1.2 demo shell),
var learnerName = get('cmi.core.student_name');
The SCORM standard stores the name as LastName, FirstName MiddleInitial, so the name comes out as ‘Blair, Lawrence’ for example. You need to javascript it out:
function parseName(learnerName) {
var arr = learnerName.split(",");
var firstName = arr[1];
var lastName = arr[0];
}
If your system stores a middle name you’ll need to lob the last initial off too.
A neat wee trick, aye %firstName%!
Here’s another example using javascript in Storyline, using the Storyline API, getting the learner name:
var player = GetPlayer();
var myName = lmsAPI.GetStudentName();
var array = myName.split(',');
var newName = array[1] + ' ' + array[0];
player.SetVar("studentFirstName", array[1]);
player.SetVar("studentLastName", array[0]);
player.SetVar("studentName", newName);
Then you can just use those name variables in your module. Sweet!
Updated one for SL2:
var player = GetPlayer();
lmsAPI=parent;
var myName = lmsAPI.GetStudentName();
var array = myName.split(',');
var newName = array[1];
player.SetVar("newName", newName);
Articulate 360/HTML5 update (need to target lmsAPI)
Thanks https://community.articulate.com/discussions/articulate-storyline/lmsapi-functionality-in-html5-output
var player = GetPlayer();
function findLMSAPI(win) {
// look in this window
if (win.hasOwnProperty("GetStudentID")) return win;
// all done if no parent
else if (win.parent == win) return null;
// climb up to parent window & look there
else return findLMSAPI(win.parent);
}
var lmsAPI = findLMSAPI(this);
var myName = lmsAPI.GetStudentName();
var array = myName.split(',');
var newName = array[1] + ' ' + array[0];
player.SetVar("newName", newName);
And here’s CP7 (thanks Jim Leichliter) – I just added additional first and last name variables to his code.
/* Calling a self-invoked function to not pollute the global scope and immediately destroy the scope chain */
(function(){
/* Initialize JS Variable to hold the student name */
var sName='';
var sFirstName = '';
var sLastName = '';
/* Obtain the student name from the LMS and put it into a JavaScript variable called sName */
if (typeof window.GetStudentName==='undefined'){
sName='Name Not Found';
} else {
sName=GetStudentName();
if(sName==''){
sName='Name Not Found';
} else {
/* Uncomment the below line to show the name in 'First Last' format */
/* sName=sName.split(', ')[1] + ' ' + sName.split(', ')[0]; */
sFirstName = sName.split(", ")[1];
sLastName = sName.split(", ")[0];
}
}
/* Check for HTML5 vs. SWF output */
if (typeof window.cp==='undefined') {
/* We have SWF output, so Get the Captivate Object */
var objCp=document.getElementById('Captivate');
/* Set the studentName Captivate User variable with the JavaScript variabe, sName */
if(objCp && objCp.cpEISetValue){
objCp.cpEISetValue('m_VarHandle.studentName', sName);
objCp.cpEISetValue('m_VarHandle.studentFirstName', sFirstName);
objCp.cpEISetValue('m_VarHandle.studentLastName', sLastName);
}
} else {
/* We have HTML5 output */
if(cp.vm && cp.vm.setVariableValue){
cp.vm.setVariableValue('studentName', sName);
cp.vm.setVariableValue('studentFirstName', sFirstName);
cp.vm.setVariableValue('studentLastName', sLastName);
}
}
})();
Leave a Reply