API
Par Anema, 09 janvier 2008 - Articles SCORM - Lien permanent - lu 1183 fois
L’API est un ensemble de méthodes publiques, fournies par le LMS, que le SCO peut utiliser pour communiquer avec le LMS.
Toute la communication SCORM est à l’initiative exclusive du SCO. Le LMS a quant à lui la responsabilité de placer l’API SCORM dans le DOM qui est accessible au SCO
L’API SCORM® est écrite en ECMAScript (plus connu sous le nom de JavaScript). Le SCO utilisera également ce langage pour rechercher l’API et appeler les méthodes. Le SCO peut utiliser un ensemble de fonctions génériques prédéfinies (SCORMGenericLogic.js, minisco.js) pour communiquer avec l’API.
La communication entre l’API SCORM® et le LMS n’est pas définie par les spécifications SCORM® et est donc laissé au choix des plate-formistes.
De même, lors de la réception de
l’appel de fin de communication, SCORM® ne définit pas
si le LMS doit reprendre le contrôle ou si le SCO doit rester afficher à l’écran.
Dans la version GANESHA 4, nous utilisons la technologie AJAX pour
communiquer entre l’API et le LMS. Dans les versions précédentes nous
utilisions les Services Web pour réaliser cette communication.
Lors de l’implémentation de cette API dans GANESHA, nous avons fait le
choix de reprendre le contrôle de l’écran après réception de la fin de communication.
Un SCO est donc défini comme étant l’élément pédagogique le plus petit pouvant communiquer avec un LMS. Il doit effectuer obligatoirement au minimum 3 actions :
- Rechercher l’API placée dans le DOM par le LMS
- Initialisation de la communication
- Fin de la communication
// For SCORM 2004 only
var gAPI = null;
var gnScormSessionState = 0; // 0=not initialized; 1=initialized; 2=terminated
function ScanForAPI(win) {
var nFindAPITries = 500;
while ((win.API_1484_11 == null) && (win.parent != null) && (win.parent != win)){
nFindAPITries--;
if (nFindAPITries < 0) return null;
win = win.parent;
}
return win.API_1484_11;
}
function GetAPI(win){
if ((win.parent != null) && (win.parent != win)){
gAPI = ScanForAPI(win.parent);
}
if ((gAPI == null) && (win.opener != null)){
gAPI = ScanForAPI(win.opener);
}
}
function ScormInitialize(){
if (gnScormSessionState == 0){
GetAPI(window);
if ((gAPI != null) && (gAPI.Initialize("") == "true")){
gnScormSessionState = 1;
}
}
}
function ScormTerminate(){
if (gnScormSessionState == 1){
gAPI.SetValue("cmi.completion_status", "completed");
if (gAPI.Terminate("") == "true") gnScormSessionState = 2;
}
}
Source : http://ostyn.com/standards/docs/Eye_Of_The_SCORM_draft.pdf - Claude Ostyn
Nous avons vu que le SCO doit impérativement indiquer la fin de communication pour valider les informations remontées vers le LMS. Pour assurer l’appel de cette méthode, il est préconisé de la placer dans l’événement onunload de la page HTML du SCO. Idem pour l’appel d'initialisation de la communication et l’événement onload.
Exemple :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Claude's simplest SCO</title>
<script type="text/javascript" src="minisco.js">
</script>
</head>
<body onload=ScormInitialize() onunload=ScormTerminate()>
<em>... as simple as possible, but not simpler.</em><br />Albert Einstein
</body>
</html>
Source : http://ostyn.com/standards/docs/Eye_Of_The_SCORM_draft.pdf - Claude Ostyn
- En savoir plus :
www.anema.fr/inter/
comprendre AICC/SCORM