Why might Scorm not record total time?

Hi Guys,

I have 2 colleagues that produce scorm packs in storyline and run them inside moodle (different moodles also on different servers with different hosts). Both have been experiencing the same problem when reporting on the scorm activity completion.

The scorms have been tested in Scorm Cloud and we have tested them in the moodles with API debugging switched on. No errors are reported when we test.

Then after the Scorms have been used for a period of time by students, we ran a report on the database to extract the cmi.total_time for each users Scorm attempt. It was then that we noticed that some records didn't have an entry for cmi.total_time.

When ending the Scorm our testing shows that if we close the scorm using 'exit activity' or by forcing the browser to close, we see that cmi.total_time is written to the database. So why do we have some user records where cmi.total_time is not recorded?

Our testing records and those without cmi.total_time all have the following records in the database:

x.start.time

cmi.completion_status

cmi.exit

cmi.session_time

cmi.suspend_data

 

 

 

 

 

11 Replies
Zoran Jancic

3 years later, some problem here. Moodle 3.8, Storyline 360. Most of users get cmi.total_time recorded as expected but some users don't (on the same Moodle and on the same Articulate SCORM package). About 2% of users don't get cmi.total_time recorded. we tested the particular SCORM 1.2 package on that same Moodle in IE, Edge, Firefox and Chrome. Records cmi.total_time very well so we can't reproduce the problem but some users sometimes have the problem in recording cmi.total_time. It's very frustrating because we can't reproduce and can't figure out what's causing the problem. 

Zoran Jancic

I figured it out in our LMS (Moodle) but didn't solve the problem yet. The content often sends cmi.core.session_time to LMS. That's some kind of temporary value because we don't know if the user finished his SCORM session or not. When SCORM session ends, Moodle reads the last cmi.core.session_time recieved from the SCORM in that session and adds that to the  cmi.core.total_time in the database. Each SCORM package (and each SCO) has it's own cmi.core.total_time. The problem is that sometimes a user doesn't close the browser window or the content window and just closes the laptop. Laptop goes to sleep but html session doesn't  end so Moodle doesn't recieve the info that the user finished the SCORM. When the user turns the laptop on again wakeing it from the sleep, html session is already gone and Moodle never gets the info that user's SCORM session ended so it never adds cmi.core.session_time to the cmi.core.total_time. The solution would be that the LMS (Moodle in my case) adds first cmi.core.session_time to cmi.core.total_time when SCORM sends the cmi.core.session_time for the first time in the session. Later, for each subsequent cmi.core.session_time recieved from the content, LMS would have to calculate the difference between this one and the previous cmi.core.session_time received in the same SCORM session and add that difference to the cmi.core.total_time. So, cmi.core.total_time would be updated correctly each time the content sends the new cmi.core.session_time. If the user doesn't close the content window or the browser window and the LMS never receives the info that SCORM session ended, cmi.core.session_time is still recorded in the database using all cmi.core.session_time values received from the content during that SCORM session. 

I'm not sure if some kind of solution can be done from the content side also, but I doubt it.