[来源:scormexplorer.com]
在 SCORM 标准中, SCO 与 LMS 的通讯是由 API Adapter 来完成的。
在 SCORM1.2 的标准中, API 定义了 8 个主要的 function ,分别是 LMSInitilize, LMSFinish, LMSSetValue, LMSGetValue, LMSCommit, LMSGetLastError, LMSGetErrorString, LMSGetDiagnostic ,其中又以 LMSGetValue 和 LMSSetValue 最为复杂,以下的流程图是主要几个 function 的逻辑流程。

LMSInitialize :
LMSInitialize 负责启动 SCO ,当学习者进入开始阅读一个 SCO 时, SCO 第一步就是先要呼叫 LMSInitialize , LMSInitialize function 判断该学员之上课记录,当学员第一次阅读该门课的该 SCO 时, LMSInitialize 就会将设定初值至相关的环境变量;若学习者并不是第一次阅读该 SCO , LMSInitialize 则必须将该学习者之前的上课记录取出,并存入环境变量中,如此即完成启动 SCO 之动作。
Example:
var result = LMSInitialize("")
if (result == "false")
{
// Do some error handling
}
else
{
// continue with the execution of the SCO
}
LMSFinish :
当学习者阅读完并要离开一个 SCO 时,在结束时 SCO 便会将呼叫 LMSFinish , LMSFinish 主要负责将环境变量重设,并判断该 SCO 是否在结束之前己经有呼叫 LMSCommit 将所有记录回存至 LMS ,若尚未储存,则会自动呼叫将所有学习者在该 SCO 的上课记录回存。
Examples:
var result = LMSFinish("");
LMSSetValue :
在 LMSSetValue 是相当复杂的 Function ,负责储存所有相关的学习记录,当 SCO 呼叫欲将某个 data model 回存时, LMSSetValue 第一步先判断所欲回存之 data model ,判断该 data model 是否可以 set( 写入 ) ,其次判断其型别,当型别错误时,记录其 Error Code ,当型别检查通过时,则依 SCORM 1.2 RTE 所订定该 data model 的处理规则,并将数据存入内存中。
Examples:
var result = LMSSetValue("cmi.core.score.raw","95");
LMSGetValue :
LMSGetValue 主要负责将数据由 LMS 取出,当 SCO 呼叫 LMSGetValue 时, LMSSetValue 会先判断 data model 是否可以读取,若不可读取,则写入其错误代码;若该 data model 是可以读取,则进取出其值并回传给 SCO 。但在设计时,如同 LMSSetValue 并没有直接和 receiver 相连,所以是将数据由暂存的内存中取出。
Examples:
var value = LMSGetValue("cmi.core.student_name")
A typical return value might be "Hyde, Jackson ".
var value = LMSGetValue("cmi.core.lesson_status")
A typical return value might be "incomplete".
var value = LMSGetValue(“cmi._version”)
LMSCommit :
相较于 LMSSetValue 和 LMSGetValue , LMSCommit 可以说简单多了,其主要负责将所有暂存在内存中的学习记录,回存到 LMS ,在设计时应用了 XMLHTTP 之技术,所以当 LMSCommit 被呼叫时,会将所有之暂存数据组成 XML 文件,再应用 XMLHTTP 对象将数据 POST 到 Receiver ,当 Receiver 收到这个 Request 时,就会解译所传入之 XML 文件,再将 XML 文件中的数据直接存入数据库中。
Examples:
var result = LMSCommit("");
LMSGetLastError
该函数将返回一个错误代码,每次 API function 呼叫后,该函数的值将被重置。( LMSGetErrorString 及 LMSGetDiagnostic 除外)。
Examples:
var errorCode = LMSGetLastError();
LMSGetErrorString
Examples:
var errorString = LMSGetErrorString("403");
LMSGetDiagnostic
Examples:
var moreInfo = LMSGetDiagnostic("403");
图 2 : SCO 与 LMS 通讯示意图 |