0
votes

I am working on a project to make an existing LMS SCORM 1.2 compliant. I have been using the document from the Advanced Distributed Learning Initiative called Sharable Content Onject Model Version 1.2 The SCORM Run-Time Environment.

On page 3-25, is talks about the logic that must be implemented in the LMS for setting the cmi.core.lesson_status value when the SCO calls the LMSFinish() function. It reads as follows:

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

Implementing this logic seems to make no sense to me in that a user could then just view the first page/screen of the SCO and click away, upon which my LMS code will set the status of the course to "completed". But in truth, the user has not actually completed the SCO. I do not want my LMS to set the status to "completed" if the user has not actually stepped through all the material.

This issue seems to be something that is confusing others as well. See: VSSCORM Step 22 - Progress and Completion - cmi.core.lesson_status

Can somebody possibly provide some clarity on the matter so that I can code my LMS logic to properly reflect the real situation while still being SCORM 1.2 compliant?

Thanks in advance.

2

2 Answers

2
votes

To my way of reading there's a rather obvious part of that missing there -

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.

In other words, if it's still "not attempted" when LMSFinish() is called, then it should be changed (as the SCO is not allowed to set it to that it should be safe to test).

I'm not sure if there's a conformance doc for 1.2, it'll probably be somewhere on the adlnet.gov SCORM 1.2 page if so (there's a zip download that looks promising) - I'm used to the 2004 version where there's a direct pdf link - there's also the 1.2 test suite on there, but as I've never had to use it I'm not sure how much use it'll be.

2
votes

To add to Ryochet's answer, LMSFinish() is meant to be a way for the course to tell the LMS that the learner has completed a session, not necessarily the entire course.

The best practice for course development is to set the value for cmi.core.lesson_status as soon as the course is initialized. This immediately tells the LMS it should not interfere with the value of lesson status when the course invokes LMSFinish(), and a user who quickly closes the course without leaving page one will be given a status of incomplete.

However, if the course authors choose not to set lesson_status, the SCORM docs state it is the LMS's responsibility to set the lesson status to completed. This is what they describe in 3-25, as shown below.

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.

p 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”

In other words, if the course sets the values for cmi.core.lesson_status, just go with the value they provided (assuming it's a valid token). If the course does not provide a value, the SCORM docs are saying to assume it's a "very very small" SCO, and "not be designed to be tracked in detail". As such, set the lesson status to completed since the SCO is too simple to set the value itself.

If the course authors are uninformed and design a large course that fails to set the lesson status value -- as described in your scenario where "a user could then just view the first page/screen of the SCO and click away" -- the course authors will learn their mistake very quickly (as we all have!) and will edit the course code appropriately.