2016-04-25 67 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