SCORM1.2 APIアダプタの状態遷移とSCOのメソッド

SCOとLMS間のデータのやり取りは、「SCORM1.2 ランタイム環境の概要」で説明したように、SCOは、APIアダプタに接続してデータの送受信を行います。SCOは、APIアダプタに対して次のJavaScriptのメソッドを利用することができます。これらのメソッドは、LMSが用意するものです。

APIメソッド
意味
LMSInitialize() LMSとの通信セッションを開始する
LMSFinish() LMSとの通信セッションを終了する
LMSGetValue() LMSから値を取得します
LMSSetValue() LMSに値をセットします
LMSCommit() すべてのデータを永続化(サーバー側に保存)します
LMSGetLastError() 最後のAPIの呼び出しに起因するエラーコードを返します
LMSGetErrorString() 指定されたエラーコードの文字列を返します
LMSGetDiagnostic() 最後に発生したエラーについての詳細情報を返します



APIアダプタとSCOとの通信は、3つの状態遷移からなります。

  • 未接続
  • 接続中
  • 切断

それぞれの状態で、利用できるメソッドが異なります。

仕様書では、Not Initialized、Running、Terminatedという風にAPIアダプタの状態遷移が分かれています。
findAPI() は、擬似コードです。APIアダプタのメソッドではありません。


未接続 APIアダプタへの接続処理

学習者がSCOを選択しようとしたとき、そのSCOはAPIアダプタに対して、まだ未接続状態です。接続状態になるには、次の2つの処理が必要です。

  • APIアダプタのJavaScriptの階層パスを取得する
  • LMSInitialize()を実行して接続を確立する

SCOがAPIアダプタに接続しようとするとき、まだLMSInitialize()を実行することはできません。実行するうえで、SCOはLMSのLMSInitialize()メソッドの階層パスが分らないためです。そのため、階層パスを調べ、場所が分った段階で、LMSInitialize()を実行します。そうすることで、「未接続」から「接続中」へと状態を遷移させることができます。

SCORMコンテンツを作成するうえで、APIアダプタのパスの取得は、つまづき易いポイントだと思います。


通信セッション中

「接続中」の状態になったら、LMSGetValue()、LMSSetValue()を使いLMSとデータのやり取りができるようになります。どのようなデータを取得、セットするかは、データモデル要素を利用していきます。

とくに、LMSSetValue()は、APIアダプタに対して値をセットするもので、クライアント側の処理となります。必ずしもサーバー側にデータがセットされるとは限りません。そのため、きちんとサーバー側にデータを渡すように、LMSSetValue()を実行した後に、LMSCommit() を実行すると、その時点、クライアント側に溜まっている情報が、サーバ側に渡ります。プッシュする確定ボタンみたいなものです。

通信セッションの終了処理

SCOを終了するときは、LMSFinish()を実行して「切断」します。仕様上では、LMSFinish()を実行すると内部では、LMSCommit()が自動的に実行されます。そのため、むやみに?データをセットしたからといって、LMSCommit()をする必要はそれほどありません。※ただLMSのデフォルトの動作は、LMS依存を引き起こす原因に繋がるため、安心ではありますが。

「切断」状態は、LMSFinish()を実行したときの戻り値により実行できるメソッドです。

エラー情報の取得

LMSGetValue()などを実行したとき、存在しないデータモデル要素や、型が間違っていると、LMSは、エラーコードを戻します。LMSGetLastError()、LMSGetErrorString()、LMSGetDiagnostic()の引数に、そのエラーコードを渡すと、詳細情報など知ることができます。