lesson_status 的 SCORM 1.2 LMSFinish 逻辑

SCORM 1.2 LMSFinish logic for lesson_status

我正在从事一个使现有 LMS SCORM 1.2 兼容的项目。我一直在使用高级分布式学习计划中名为 Sharable Content Onject Model Version 1.2 The SCORM 运行-Time Environment.

的文档

第 3-25 页讨论了当 SCO 调用 LMSFinish() 函数时必须在 LMS 中实现以设置 cmi.core.lesson_status 值的逻辑。内容如下:

Upon receiving the LMSFinish() call or the user navigates away, the LMS should set the cmi.core.lesson_status for the SCO to "completed".

实施这个逻辑对我来说似乎毫无意义,因为用户随后只需查看 SCO 的第一个 page/screen 并单击即可,我的 LMS 代码将在该按钮上将课程状态设置为"completed"。但事实上,用户并没有真正完成 SCO。如果用户实际上没有完成所有 material.

,我不希望我的 LMS 将状态设置为 "completed"

这个问题似乎也让其他人感到困惑。看: VSSCORM Step 22 - Progress and Completion - cmi.core.lesson_status

有人可以澄清一下这个问题,以便我可以编写我的 LMS 逻辑以正确反映真实情况,同时仍然符合 SCORM 1.2 标准吗?

提前致谢。

以我的阅读方式,那里缺少了一个相当明显的部分 -

Upon receiving the LMSFinish() call or the user navigates away, the LMS should set the cmi.core.lesson_status for the SCO to "completed" if it has not been changed by the SCO.

换句话说,如果在调用LMSFinish()时它仍然是“not attempted”,那么它应该被更改(因为SCO不允许将其设置为应该可以安全测试) .

我不确定是否有 1.2 的一致性文档,如果有的话,它可能会在 adlnet.gov SCORM 1.2 页面上的某个地方(有一个看起来很有希望的 zip 下载)- 我已经习惯了2004 版本,其中有一个直接的 pdf link - 那里还有 1.2 测试套件,但因为我从来没有用过它,所以我不确定它会有多少用处。

为了补充 Ryochet 的回答,LMSFinish() 是课程告诉 LMS 学习者已完成 session 的一种方式,不一定是整个课程。

课程开发的最佳做法是在课程初始化后立即设置 cmi.core.lesson_status 的值。这会立即告诉 LMS 它应该 在课程调用 LMSFinish() 时干扰课程状态的值,并且如果用户在不离开第一页的情况下快速关闭课程,将被给予incomplete.

状态

但是,如果课程作者选择 而不是 来设置 lesson_status,SCORM 文档声明 LMS 有责任将课程状态设置为 completed.这是他们在3-25中描述的,如下图。

3.3.6.1

It is the responsibility of the SCO to, at a minimum, issue LMSInitialize(“”) and LMSFinish(“”) API calls.

3.4.2

All data elements are optional for use by SCOs. SCOs are required only to use the API functions LMSInitialize("") and LMSFinish(""); they are not required to use LMSSetValue() or LMSGetValue(). SCOs may be very, very small and not be designed to be tracked in detail.

第 3-25 页

Additional Behavior Requirements: If a SCO sets the cmi.core.lesson_status then there is no problem. However, the SCORM does not force the SCO to set the cmi.core.lesson_status. There is some additional requirements that must be adhered to successfully handle these cases:

  • Upon initial launch the LMS should set the cmi.core.lesson_status to “not attempted”.
  • Upon receiving the LMSFinish() call or the user navigates away, the LMS should set the cmi.core.lesson_status for the SCO to “completed”.
  • After setting the cmi.core.lesson_status to “completed”, the LMS should now check to see if a Mastery Score has been specified in the cmi.student_data.mastery_score, if supported, or the manifest that the SCO is a member of. If a Mastery Score is provided and the SCO did set the cmi.core.score.raw, the LMS shall compare the cmi.core.score.raw to the Mastery Score and set the cmi.core.lesson_status to either “passed” or “failed”. If no Mastery Score is provided, the LMS will cmi.core.lesson_status as “completed”

换句话说,如果课程设置了 cmi.core.lesson_status 的值,只需使用他们提供的值(假设它是一个有效的标记)。如果课程 没有 提供一个值,SCORM 文档会说假设它是一个“非常非常小”的 SCO,并且“不被设计为被详细跟踪”。因此,将课程状态设置为 completed,因为 SCO 太简单了,无法自行设置值。

如果课程作者不知情并设计了一个未能设置课程状态值的大型课程——如您的场景中所述,“用户然后可以只查看 SCO 的第一个 page/screen 和点击离开”——课程作者将很快认识到他们的错误(就像我们所有人一样!)并将适当地编辑课程代码。