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
source : ANEMA SEG04

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 :

  1. Rechercher l’API placée dans le DOM par le LMS
  2. Initialisation de la communication
  3. Fin de la communication
Exemple :
// 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