imsmanifestファイルの3階層構造の履歴について

imsmanifestファイルの3階層構造の履歴について

- 田中 タカシ の投稿
返信数: 3

お世話になります。
当方scormコンテンツ制作を請け負っているのですが、お客様の環境がmoodle(バージョン等不明です)でして挙動に不具合があり調査をしているのですがどうしても分からず投稿させて頂きました。

imsmanifest.xmlで3階層で設定したコースなのですが、学習開始と同時にレッスンステータスにincompleteを送出しているのですが
コース開始時に1SCO目(3階層にある)が開くと、最終のSCOのレッスンステータスがincompleteになり、自信(1SCO目)のレッスンステータスは変化しません。

おかしいと思い、2階層で設定すると、自信のSCOのレッスンステータスが正しく更新されました。
(1階層でも同様で正しい挙動でした)
当方の調査では3階層で設定すると履歴の送出が正しく動作していない様に見受けられるのですが、コース設定等で何か必要な項目があるのでしょうか? (皆様3階層教材はきちんと動作しているのでしょうか?)
moodleに関しては浅い知見で大変恐縮ですが、何卒宜しくお願い致します。

田中 タカシ への返信

Re: imsmanifestファイルの3階層構造の履歴について

- Mitsuhiro Yoshida の投稿
画像 Developers 画像 Particularly helpful Moodlers 画像 Translators

Moodle 3.5.9+ (Build: 20191122) の /mod/scorm/locallib.php の関数「scorm_simple_play()」内の1067行目あたりを読みます限り、SCORMモジュールの設定画面で「新しい受験を強制する」が「常に」(SCORM_FORCEATTEMPT_ALWAYS) に設定されていない場合、最終のSCOのレッスンステータスが「incomplete」とされるようです。

function scorm_simple_play($scorm, $user, $context, $cmid) {
    global $DB;

    $result = false;

    if (has_capability('mod/scorm:viewreport', $context)) {
        // If this user can view reports, don't skipview so they can see links to reports.
        return $result;
    }

    if ($scorm->updatefreq == SCORM_UPDATE_EVERYTIME) {
        scorm_parse($scorm, false);
    }
    $scoes = $DB->get_records_select('scorm_scoes', 'scorm = ? AND '.
        $DB->sql_isnotempty('scorm_scoes', 'launch', false, true), array($scorm->id), 'sortorder, id', 'id');

    if ($scoes) {
        $orgidentifier = '';
        if ($sco = scorm_get_sco($scorm->launch, SCO_ONLY)) {
            if (($sco->organization == '') && ($sco->launch == '')) {
                $orgidentifier = $sco->identifier;
            } else {
                $orgidentifier = $sco->organization;
            }
        }
        if ($scorm->skipview >= SCORM_SKIPVIEW_FIRST) {
            $sco = current($scoes);
            $result = scorm_get_toc($user, $scorm, $cmid, TOCFULLURL, $orgidentifier);
            $url = new moodle_url('/mod/scorm/player.php', array('a' => $scorm->id, 'currentorg' => $orgidentifier));

            // Set last incomplete sco to launch first if forcenewattempt not set to always.
            if (!empty($result->sco->id) && $scorm->forcenewattempt != SCORM_FORCEATTEMPT_ALWAYS) {
                $url->param('scoid', $result->sco->id);
            } else {
                $url->param('scoid', $sco->id);
            }

            if ($scorm->skipview == SCORM_SKIPVIEW_ALWAYS || !scorm_has_tracks($scorm->id, $user->id)) {
                if ($scorm->forcenewattempt == SCORM_FORCEATTEMPT_ALWAYS ||
                   ($result->incomplete === false && $scorm->forcenewattempt == SCORM_FORCEATTEMPT_ONCOMPLETE)) {

                    $url->param('newattempt', 'on');
                }
                redirect($url);
            }
        }
    }
    return $result;
}
添付 moodle_SCORM.png
Mitsuhiro Yoshida への返信

Re: imsmanifestファイルの3階層構造の履歴について

- 田中 タカシ の投稿

ご返信ありがとうございます。

ステータスの初期値という意味あいではなく、起動時の"3階層化されたSCO"が自身の履歴操作(imcomplete or complete)を行いますと自身ではなく最後のSCOのレッスンステータスが変更されてしまうようなので、SCO自身が自分の場所を見失っている気がします。

もし改善方法にお心当たりありましたら是非共、ご教授の程宜しくお願いいたします。

田中 タカシ への返信

Re: imsmanifestファイルの3階層構造の履歴について

- Mitsuhiro Yoshida の投稿
画像 Developers 画像 Particularly helpful Moodlers 画像 Translators

以下、Moodle in Englishのフォーラム投稿Moodle Tracker (バグ報告) を探してみましたが、現在のところ、「imsmanifest.xmlで3階層で設定したコース」のレッスンステータスが変化しない問題に関する報告は見当たらないようです。

[Moodle in English: Hierarchical SCORM]
https://moodle.org/mod/forum/discuss.php?d=28002

[Search:"SCORM hierarchy" Issue Navigator - Moodle Tracker]
https://tracker.moodle.org/browse/MDL-33053?jql=text%20~%20%22SCORM%20hierarchy%22

[Search:"SCORM hierarchical" Issue Navigator - Moodle Tracker]
https://tracker.moodle.org/browse/MDL-12447?jql=text%20~%20%22SCORM%20hierarchical%22

恐らく、Moodleのバグだと思います。

以下をご提供頂けましたら、さらに調査しやすくなるかと思います。

  • MoodleのSCORMモジュールで正常に動作しない「imsmanifest.xmlで3階層で設定したコース」のサンプル
  • Moodleのバージョン情報 (例 Moodle 3.5.9+)