2016-04-25 62 views
3

我在SCORM Cloud推出了SCORM 2004(第3版)軟件包。我通過了80%的考試,但結果不存儲。我附加沙盒註冊狀態結果。爲什麼SCORM 2004第3版的SCORM雲中沒有存儲通過的分數?

Satisfied: true 
**Completed: unknown** 
Progress Status: true 
Attempts: 1 
Suspended: true 
Activity Objective #1 
    Id: 
    Measure Status: false 
    **Normalized Measure: unknown** 
    Progress Measure: true 
    Satisfied Status: true 
Runtime Data 
    **cmi.completion_status: unknown** 
    cmi.credit: Credit 
    cmi.entry: Resume 
    cmi.exit: Suspend 
    cmi.learner_preference 
     cmi.learner_preference.audio_level: 1 
     cmi.learner_preference.language: 
     cmi.learner_preference.delivery_speed: 1 
     cmi.learner_preference.audio_captioning: 0 
    **cmi.location: 2_8 
    cmi.mode: Normal 
    cmi.progress_measure: 
    cmi.score_scaled: 
    cmi.score_raw: 80** 
    cmi.score_min: 
    cmi.score_max: 
    **cmi.total_time: 0000:00:28** 
    Total Time Tracked by SCORM Engine: 0000:00:29.12 
    cmi.success_status: Passed 
    cmi.suspend_data: 
    Static Data 
     cmi.completion_threshold: 
     cmi.launch_data: 
     cmi.learner_id: [email protected] 
     cmi.learner_name: Test Test 
     cmi.max_time_allowed: 
     cmi.scaled_passing_score: 
     cmi.time_limit_action: Undefined 

當我在SCORM 1.2版本相同的課程試過,我可以看到SCORM雲中的所有結果。我不知道,這是什麼問題。

在這裏,我附上劇本也

function getResults(correct_count, answers_key, total, grade) { 
     var form_result = $('form').serializeArray(); 
     $.each(form_result, function(i, val) { 
      if(answers_key[i] == val.value) { 
       correct_count += 1; 
      } 
     }); 
     var score = Math.round(parseFloat(parseFloat(correct_count, 10) * 100)/ parseFloat(total, 10)); 

     setScore(score); 
     if(score >= grade) { 
      setPassFail('passed'); 
     } else { 
      setPassFail('failed'); 
     } 
    } 


    function setPassFail(sPassFail) { 
     /* see if this SCORM 2004 */ 
     if (_sAPI == "API_1484_11") { 
      /* it is SCORM 2004, set the success status */ 
      scormSetValue("cmi.success_status", sPassFail+""); 
     } else if (_sAPI == "API") { 
      /* it is SCORM 1.2,set the completion status */ 
      scormSetValue("cmi.core.lesson_status", sPassFail+""); 
     } 
    } 

    function setScore(sScore) {  /* see if this SCORM 2004 */ if (_sAPI == "API_1484_11") {  /* it is SCORM 2004, set the scaled score data */ //  scormSetValue("cmi.score.scaled", sScore+"");  scormSetValue("cmi.score.raw", sScore+"");  scormCommit(); } else if (_sAPI == "API") {  /* it is SCORM 1.2, set the min and max scores 
*/  scormSetValue("cmi.core.score.raw", sScore+"");  } } 
    function scormSetValue(name, value) { 
     var API = getAPI(); 
     if (API == null) 
      return "true"; 

     /* call the correct SCORM function */ 
     if (_sAPI == "API") 
      var result = API.LMSSetValue(name, value); 
     else 
      var result = API.SetValue(name, value); 
     return result; 
    } 

function scormCommit() { 
    var API = getAPI(); 
    if (API == null) 
     return "false"; 

    /* call the correct SCORM function */ 
    if (_sAPI == "API") 
     var result = API.LMSCommit(""); 
    else 
     var result = API.Commit(""); 
    return result; 
} 

請幫助我,什麼是錯誤/問題是那裏的代碼。

謝謝!

嗨, 我做了所有更改,並在SCORM Cloud中獲得了結果。但是我沒有拿到該課程的總分。有什麼我想補充的嗎?

enter image description here

回答

1

我得到了問題的修復按照您的指導,並做了一些[R & d自己的代碼。

1)更新了幾個名字空間和值:使用在所有的地方namesapce「completion_status」,而不是「success_status」

例:

function setPassFail(sPassFail) { 
    /* see if this SCORM 2004 */ 
    if (_sAPI == "API_1484_11") { 
     /* it is SCORM 2004, set the success status */ 
//  scormSetValue("cmi.success_status", sPassFail+""); 
     scormSetValue("cmi.completion_status", sPassFail+""); 
    } else if (_sAPI == "API") { 
     /* it is SCORM 1.2,set the completion status */ 
     scormSetValue("cmi.core.lesson_status", sPassFail+""); 
    } 
} 

2)增加支持名稱空間:計算從分數的百分比值,並在「cmi.score.scaled」命名空間通過它和另外加入「cmi.score.raw」命名空間,根據你的指導。

function setScore(sScore) { 
    /* see if this SCORM 2004 */ 
    if (_sAPI == "API_1484_11") { 
     /* it is SCORM 2004, set the scaled score data */ 
//  scormSetValue("cmi.score.scaled", sScore+""); 
     var scaled_score = (sScore/100); 
     scormSetValue("cmi.score.scaled", scaled_score+""); 
     scormSetValue("cmi.score.raw", sScore+""); 
     scormCommit(); 
    } else if (_sAPI == "API") { 
     /* it is SCORM 1.2, set the min and max scores */ 
     scormSetValue("cmi.core.score.raw", sScore+""); 
    } 
} 

3)最後,加入score.min和score.max值並計算grede:

function getResults(correct_count, answers_key, total, grade) { 
     var form_result = $('form').serializeArray(); 
     $.each(form_result, function(i, val) { 
      if(answers_key[i] == val.value) { 
       correct_count += 1; 
      } 
     }); 
     var score = Math.round(parseFloat(parseFloat(correct_count, 10) * 100)/ parseFloat(total, 10)); 

     setScore(score); 
     scormSetValue("cmi.score.min", "0"); 
     scormSetValue("cmi.score.max", "100"); 

     if(score >= grade) { 
      //setPassFail('passed'); 
      var sPassFail = 'passed'; 
      scormSetValue("cmi.completion_status", sPassFail+""); 
      scormSetValue("cmi.success_status", sPassFail+""); 
      setPassFail('completed'); 
     } else { 
      //setPassFail('failed'); 
      var sPassFail = 'passed'; 
      scormSetValue("cmi.completion_status", sPassFail+""); 
      scormSetValue("cmi.success_status", sPassFail+""); 
      setPassFail('incomplete'); 
     } 
    } 

感謝你的幫助,朋友們!

2

爲了節省數據集對你必須爲了救學生嘗試調用數據或API.Commit('')API.LMSCommit('') API。

我會從那裏開始。提交數據可以通過導航按鈕(如保存按鈕)完成,但您也可以在終止SCO之前執行此操作。有些甚至在翻頁或每2分鐘自動保存一次。

+0

我在setScroe之後添加了API.Commit('')。但是,我無法獲得結果數據。我錯過了什麼?還有其他更改嗎? –

+0

我也有一個小書籤,可以幫助您在LMS中獲取SCO的當前運行時狀態。如果有什麼事情你不知道的話,它也可能會拿起一些LMS神器。 https://www.cybercussion.com/bookmarklets/SCORM/。這至少會讓你看到正在運行的SCORM版本,或者同時運行多個SCORM版本(這實際上發生在野外)。讓我知道這是否有幫助。 – Mark

+0

謝謝你的幫助,馬克! –

0

Mark的回答與API.Commit()很重要,SCORM 2004版本是否缺少commit語句?

此外,您的1.2代碼使用cmi.score.score.raw而您的2004代碼使用cmi.score.scaledscaled不一定是raw的替代替代品,我建議在SCORM 2004中堅持使用cmi.score.raw,除非您真正理解使用cmi.score.scaled的內容。 (cmi.progress_measure,影響你的清單可能對cmi.score.scaled等)

+0

我使用API​​.Commit()將cmi.score.scaled更新爲cmi.score.raw,但是我得到「Completed:unknown」。我編輯了您提到的最近更改的帖子。修復的下一步將做什麼? –

+1

有很多事情可能會影響你的課程。這段代碼很難說清楚。例如,您可能在您的清單中有設置來覆蓋從SCO發送的數據。我注意到你的日誌缺少score.min和score.max的值。當您啓動課程時,您需要設置這些內容 - 如果score.raw爲80,但最小和最大值未定義,那麼LMS如何知道80意味着80%? – pipwerks

+0

菲爾完全正確。例如,如果您設置了完成閾值或縮放合格分數,LMS也可以控制設置合格/不合格和/或完成或不完整。另外,如果你想設置完成/不完整,你需要使用'cmi.completion_status'設置SCORM 2004在第一次啓動時不完整。然後將其設置爲「完成」或「不完整」。這通常取決於進度與得分。 SCORM 1.2只有'cmi.core.lesson_status',所以你不能分解它。 – Mark