Tracking Student Responses? [Articulate Storyline]

Hi there

I'm trying to get the full quiz data sent to my LMS (moodle, for the record). There was a post relating to this over here (https://articulate.com/support/article/quiz-data-sent-to-an-lms-in-articulate-storyline); I figured this feature would have been fed down the line to the latest '360' version of storyline, but in some preliminary testing, it seems not the case. 

Is anyone able to confirm this for me? Or am I doing something wrong?  :) 

I've tested SCROM 1.2 & SCORM 2004 (2nd, 3rd, and 4th edition).

Thanks!

29 Replies
Matthew Bibby

Yes, that would explain it Kris.

Add a result slide to the end of your course (even a blank result slide is fine) as it is only when that slide is accessed that all of the details are passed to the LMS.

Some data is passed to the LMS before that slide is accessed, but a result slide is definitely required. If you can't get it working, feel free to share a sample .story file here and I'll take a look.

Kris N

Hi Matthew -

Excellent! That was definitely it (I had hoped it was collecting data in the background, and pushing it to the database; but I can see why the results page is needed to bring all the data together, and send it to the DB at that point).

I just did a test with every 'graded quiz' possible. object based ones report the object IDs (which makes sense), so tracking student responses won't be too hard; one thing I found though is that the fill-in-the-blank and the numeric graded quizes don't seem to pass the student response through (see attachment); any thought?


(I can't tell if this is because the right/ wrong is determined at the time of the quiz and if it's unable to pass the value because it's the wrong data-type being passed to the DB? )

 

Dan Marsden

could also be a bug with Moodle preventing that from being saved - it looks like you are using a SCORM 2004 package. Moodle doesn't provide full support for SCORM 2004 - I'd suggest you run the SCORM debugger in Moodle and run through the quiz keeping an eye on what happens when it saves the learner_resonse for that question.

Kris N

Hi Dan,

Thanks for that; took a bit of time to get Moodle SCORM debugging happening - but got it now.
Unfortunately, it's not really any more detailed than the standard Moodle report;
I tried using SCORM 1.2, especially since this 2014 post corroborates your comment about Moodle SCORM support.

I also tested this same package in SCORMcloud. I've attached its debug / output below the moodle one - but it's also not showing any 'data' being passed thru.

Part of me is wondering if the value isn't being passed properly (or at all) - or if it is, is it being passed as an 'object' rather than a properly value (int / string). I've seen this sort of weirdness with JS before, particularly when it's not cast properly. 

 

Debug report from Moodle is below:

*****
Textual Fill-in
*****

Mon, 21 Nov 2016 02:56:41 GMT: LMSGetValue("cmi.interactions._count") - 4 => 0
Mon, 21 Nov 2016 02:56:41 GMT: LMSSetValue("cmi.interactions_4.id", "Scene1_Slide6_FillInTheBlank_0_0") => 0
Mon, 21 Nov 2016 02:56:41 GMT: LMSSetValue("cmi.interactions_4.type", "fill-in") => 0
Mon, 21 Nov 2016 02:56:41 GMT: LMSSetValue("cmi.interactions_4.student_response", "") => 0
Mon, 21 Nov 2016 02:56:41 GMT: LMSSetValue("cmi.interactions_4.correct_responses_0.pattern", "[object Object],[object Object],[object Object]") => 0
Mon, 21 Nov 2016 02:56:41 GMT: LMSSetValue("cmi.interactions_4.result", "wrong") => 0
Mon, 21 Nov 2016 02:56:41 GMT: LMSSetValue("cmi.interactions_4.weighting", "1") => 0
Mon, 21 Nov 2016 02:56:41 GMT: LMSSetValue("cmi.interactions_4.latency", "0000:01:13.39") => 0
Mon, 21 Nov 2016 02:56:41 GMT: LMSSetValue("cmi.interactions_4.objectives_0.id", "Simple1_test5") => 0
Mon, 21 Nov 2016 02:56:41 GMT: LMSSetValue("cmi.interactions_4.time", "13:56:41") => 0
Mon, 21 Nov 2016 02:56:52 GMT: LMSSetValue("cmi.core.score.raw", "18.18") => 0
Mon, 21 Nov 2016 02:56:52 GMT: LMSSetValue("cmi.core.score.max", "100") => 0
Mon, 21 Nov 2016 02:56:52 GMT: LMSSetValue("cmi.core.score.min", "0") => 0
Mon, 21 Nov 2016 02:56:52 GMT: LMSGetValue("cmi.interactions._count") - 5 => 0


******
Numerical Fill-in
******

Mon, 21 Nov 2016 02:57:29 GMT: LMSGetValue("cmi.interactions._count") - 9 => 0
Mon, 21 Nov 2016 02:57:29 GMT: LMSSetValue("cmi.interactions_9.id", "Scene1_Slide11_Numeric_0_0") => 0
Mon, 21 Nov 2016 02:57:29 GMT: LMSSetValue("cmi.interactions_9.type", "fill-in") => 0
Mon, 21 Nov 2016 02:57:29 GMT: LMSSetValue("cmi.interactions_9.student_response", "") => 0
Mon, 21 Nov 2016 02:57:29 GMT: LMSSetValue("cmi.interactions_9.correct_responses_0.pattern", "Correct Response is equal to 42") => 0
Mon, 21 Nov 2016 02:57:29 GMT: LMSSetValue("cmi.interactions_9.result", "wrong") => 0
Mon, 21 Nov 2016 02:57:29 GMT: LMSSetValue("cmi.interactions_9.weighting", "1") => 0
Mon, 21 Nov 2016 02:57:29 GMT: LMSSetValue("cmi.interactions_9.latency", "0000:02:01.34") => 0
Mon, 21 Nov 2016 02:57:29 GMT: LMSSetValue("cmi.interactions_9.objectives_0.id", "Simple1_test5") => 0
Mon, 21 Nov 2016 02:57:29 GMT: LMSSetValue("cmi.interactions_9.time", "13:57:29") => 0

--------

SCORMcloud Debug Data:

*****
Textual Fill-in
*****

- [16:09:42.649] LMSGetValue('cmi.interactions._count') returned '4' in 0 seconds
[16:09:42.649] CheckForGetValueError (cmi.interactions._count, cmi.interactions._count, , )
[16:09:42.649] Call is error free.
[16:09:42.649] RetrieveGetValueData (cmi.interactions._count, cmi.interactions._count, , )
[16:09:42.649] Element is: interactions._count
[16:09:42.649] LMSGetLastError() returned '0' in 0 seconds
- [16:09:42.649] LMSSetValue('cmi.interactions.4.id', 'Scene1_Slide6_FillInTheBlank_0_0') returned 'true' in 0.001 seconds
[16:09:42.649] CheckForSetValueError (cmi.interactions.4.id, Scene1_Slide6_FillInTheBlank_0_0, cmi.interactions.n.id, 4, )
[16:09:42.649] Element is: interactions.id
[16:09:42.649] Call is error free.
[16:09:42.649] StoreValue (cmi.interactions.4.id, Scene1_Slide6_FillInTheBlank_0_0, cmi.interactions.n.id, 4, )
[16:09:42.649] Element is: interactions.id
[16:09:42.649] Adding new interaction at position 4
- [16:09:42.650] LMSSetValue('cmi.interactions.4.type', 'fill-in') returned 'true' in 0 seconds
[16:09:42.650] CheckForSetValueError (cmi.interactions.4.type, fill-in, cmi.interactions.n.type, 4, )
[16:09:42.650] Element is: interacitons.type
[16:09:42.650] Call is error free.
[16:09:42.650] StoreValue (cmi.interactions.4.type, fill-in, cmi.interactions.n.type, 4, )
[16:09:42.650] Element is: interacitons.type
- [16:09:42.650] LMSSetValue('cmi.interactions.4.student_response', '') returned 'true' in 0 seconds
[16:09:42.650] CheckForSetValueError (cmi.interactions.4.student_response, , cmi.interactions.n.student_response, 4, )
[16:09:42.650] Element is: interactions.student_response
[16:09:42.650] Call is error free.
[16:09:42.650] StoreValue (cmi.interactions.4.student_response, , cmi.interactions.n.student_response, 4, )
[16:09:42.650] Element is: interactions.student_response
- [16:09:42.650] LMSSetValue('cmi.interactions.4.correct_responses.0.pattern', '[object Object],[object Object],[object Object]') returned 'true' in 0.001 seconds
[16:09:42.650] CheckForSetValueError (cmi.interactions.4.correct_responses.0.pattern, [object Object],[object Object],[object Object], cmi.interactions.n.correct_responses.n.pattern, 4, 0)
[16:09:42.650] Element is: interactions.correct responses.pattern
[16:09:42.650] Call is error free.
[16:09:42.650] StoreValue (cmi.interactions.4.correct_responses.0.pattern, [object Object],[object Object],[object Object], cmi.interactions.n.correct_responses.n.pattern, 4, 0)
[16:09:42.650] Element is: interactions.correct_responses.pattern
- [16:09:42.651] LMSSetValue('cmi.interactions.4.result', 'correct') returned 'true' in 0 seconds
[16:09:42.651] CheckForSetValueError (cmi.interactions.4.result, correct, cmi.interactions.n.result, 4, )
[16:09:42.651] Element is: interactions.result
[16:09:42.651] Call is error free.
[16:09:42.651] StoreValue (cmi.interactions.4.result, correct, cmi.interactions.n.result, 4, )
[16:09:42.651] Element is: interactions.result
- [16:09:42.651] LMSSetValue('cmi.interactions.4.weighting', '1') returned 'true' in 0 seconds
[16:09:42.651] CheckForSetValueError (cmi.interactions.4.weighting, 1, cmi.interactions.n.weighting, 4, )
[16:09:42.651] Element is: interactions.weighting
[16:09:42.651] Call is error free.
[16:09:42.651] StoreValue (cmi.interactions.4.weighting, 1, cmi.interactions.n.weighting, 4, )
[16:09:42.651] Element is: interactions.weighting
- [16:09:42.651] LMSSetValue('cmi.interactions.4.latency', '0000:00:37.40') returned 'true' in 0.001 seconds
[16:09:42.651] CheckForSetValueError (cmi.interactions.4.latency, 0000:00:37.40, cmi.interactions.n.latency, 4, )
[16:09:42.651] Element is: interactions.latency
[16:09:42.651] Call is error free.
[16:09:42.651] StoreValue (cmi.interactions.4.latency, 0000:00:37.40, cmi.interactions.n.latency, 4, )
[16:09:42.651] Element is: interactions.latency
- [16:09:42.652] LMSSetValue('cmi.interactions.4.objectives.0.id', 'Simple1_test6-SCORM_12') returned 'true' in 0 seconds
[16:09:42.652] CheckForSetValueError (cmi.interactions.4.objectives.0.id, Simple1_test6-SCORM_12, cmi.interactions.n.objectives.n.id, 4, 0)
[16:09:42.652] Element is: interactions.objectives.id
[16:09:42.652] Call is error free.
[16:09:42.652] StoreValue (cmi.interactions.4.objectives.0.id, Simple1_test6-SCORM_12, cmi.interactions.n.objectives.n.id, 4, 0)
[16:09:42.652] Element is: interactions.objectives.id
+ [16:09:42.652] LMSSetValue('cmi.interactions.4.time', '16:09:42') returned 'true' in 0 seconds
[16:09:42.797] Beginning prerequisites evaluation of activity Simple1_test6-SCORM_12_ORG
[16:09:42.798] Beginning prerequisites evaluation of activity Simple1_test6-SCORM_12_ORG
[16:09:42.798] Beginning prerequisites evaluation of activity Simple1_test6-SCORM_12_SCO

 

******
Numerical Fill-in
******

- [16:10:17.123] LMSGetValue('cmi.interactions._count') returned '9' in 0 seconds
[16:10:17.123] CheckForGetValueError (cmi.interactions._count, cmi.interactions._count, , )
[16:10:17.123] Call is error free.
[16:10:17.123] RetrieveGetValueData (cmi.interactions._count, cmi.interactions._count, , )
[16:10:17.123] Element is: interactions._count
[16:10:17.123] LMSGetLastError() returned '0' in 0 seconds
- [16:10:17.123] LMSSetValue('cmi.interactions.9.id', 'Scene1_Slide11_Numeric_0_0') returned 'true' in 0.001 seconds
[16:10:17.123] CheckForSetValueError (cmi.interactions.9.id, Scene1_Slide11_Numeric_0_0, cmi.interactions.n.id, 9, )
[16:10:17.123] Element is: interactions.id
[16:10:17.123] Call is error free.
[16:10:17.123] StoreValue (cmi.interactions.9.id, Scene1_Slide11_Numeric_0_0, cmi.interactions.n.id, 9, )
[16:10:17.123] Element is: interactions.id
[16:10:17.123] Adding new interaction at position 9
- [16:10:17.124] LMSSetValue('cmi.interactions.9.type', 'fill-in') returned 'true' in 0 seconds
[16:10:17.124] CheckForSetValueError (cmi.interactions.9.type, fill-in, cmi.interactions.n.type, 9, )
[16:10:17.124] Element is: interacitons.type
[16:10:17.124] Call is error free.
[16:10:17.124] StoreValue (cmi.interactions.9.type, fill-in, cmi.interactions.n.type, 9, )
[16:10:17.124] Element is: interacitons.type
- [16:10:17.124] LMSSetValue('cmi.interactions.9.student_response', '') returned 'true' in 0 seconds
[16:10:17.124] CheckForSetValueError (cmi.interactions.9.student_response, , cmi.interactions.n.student_response, 9, )
[16:10:17.124] Element is: interactions.student_response
[16:10:17.124] Call is error free.
[16:10:17.124] StoreValue (cmi.interactions.9.student_response, , cmi.interactions.n.student_response, 9, )
[16:10:17.124] Element is: interactions.student_response
- [16:10:17.124] LMSSetValue('cmi.interactions.9.correct_responses.0.pattern', 'Correct Response is equal to 42') returned 'true' in 0.001 seconds
[16:10:17.124] CheckForSetValueError (cmi.interactions.9.correct_responses.0.pattern, Correct Response is equal to 42, cmi.interactions.n.correct_responses.n.pattern, 9, 0)
[16:10:17.124] Element is: interactions.correct responses.pattern
[16:10:17.124] Call is error free.
[16:10:17.125] StoreValue (cmi.interactions.9.correct_responses.0.pattern, Correct Response is equal to 42, cmi.interactions.n.correct_responses.n.pattern, 9, 0)
[16:10:17.125] Element is: interactions.correct_responses.pattern
- [16:10:17.125] LMSSetValue('cmi.interactions.9.result', 'wrong') returned 'true' in 0 seconds
[16:10:17.125] CheckForSetValueError (cmi.interactions.9.result, wrong, cmi.interactions.n.result, 9, )
[16:10:17.125] Element is: interactions.result
[16:10:17.125] Call is error free.
[16:10:17.125] StoreValue (cmi.interactions.9.result, wrong, cmi.interactions.n.result, 9, )
[16:10:17.125] Element is: interactions.result
- [16:10:17.125] LMSSetValue('cmi.interactions.9.weighting', '1') returned 'true' in 0 seconds
[16:10:17.125] CheckForSetValueError (cmi.interactions.9.weighting, 1, cmi.interactions.n.weighting, 9, )
[16:10:17.125] Element is: interactions.weighting
[16:10:17.125] Call is error free.
[16:10:17.125] StoreValue (cmi.interactions.9.weighting, 1, cmi.interactions.n.weighting, 9, )
[16:10:17.125] Element is: interactions.weighting
- [16:10:17.125] LMSSetValue('cmi.interactions.9.latency', '0000:01:11.87') returned 'true' in 0.001 seconds
[16:10:17.125] CheckForSetValueError (cmi.interactions.9.latency, 0000:01:11.87, cmi.interactions.n.latency, 9, )
[16:10:17.125] Element is: interactions.latency
[16:10:17.126] Call is error free.
[16:10:17.126] StoreValue (cmi.interactions.9.latency, 0000:01:11.87, cmi.interactions.n.latency, 9, )
[16:10:17.126] Element is: interactions.latency
- [16:10:17.126] LMSSetValue('cmi.interactions.9.objectives.0.id', 'Simple1_test6-SCORM_12') returned 'true' in 0 seconds
[16:10:17.126] CheckForSetValueError (cmi.interactions.9.objectives.0.id, Simple1_test6-SCORM_12, cmi.interactions.n.objectives.n.id, 9, 0)
[16:10:17.126] Element is: interactions.objectives.id
[16:10:17.126] Call is error free.
[16:10:17.126] StoreValue (cmi.interactions.9.objectives.0.id, Simple1_test6-SCORM_12, cmi.interactions.n.objectives.n.id, 9, 0)
[16:10:17.126] Element is: interactions.objectives.id
- [16:10:17.126] LMSSetValue('cmi.interactions.9.time', '16:10:17') returned 'true' in 0.001 seconds
[16:10:17.127] CheckForSetValueError (cmi.interactions.9.time, 16:10:17, cmi.interactions.n.time, 9, )
[16:10:17.127] Element is: interactions.time
[16:10:17.127] Call is error free.
[16:10:17.127] StoreValue (cmi.interactions.9.time, 16:10:17, cmi.interactions.n.time, 9, )
[16:10:17.127] Element is: interactions.time
- [16:10:22.230] LMSGetValue('cmi.interactions._count') returned '10' in 0 seconds
[16:10:22.230] CheckForGetValueError (cmi.interactions._count, cmi.interactions._count, , )
[16:10:22.230] Call is error free.
[16:10:22.230] RetrieveGetValueData (cmi.interactions._count, cmi.interactions._count, , )
[16:10:22.230] Element is: interactions._count
[16:10:22.230] LMSGetLastError() returned '0' in 0 seconds

 

Kris N

Thanks Dan -- that was my thoughts / feelings too! 
Although I'm debating as to whether it's passing an empty value, or the wrong [data]type of value. Either case - hopefully something the Articulate staff can help me out with :) 

Leslie - I've attached it (unless you would like me to send it another way? ).

Jacqueline Bates

Hi I am having the same problem. I am trying to get quiz result data sent to my LMS (Launch & Track: Brightwave) - published as SCORM 1.2.

My Articulate Storyline 360 story has a results screen at the end of the quiz screens followed by a course completion page with a course exit button (all created from 360 template library slides). Results screen is used for Tracking and Report status to LMS is set to Passed/Incomplete (have also tried Passed/failed).

Completion mark is default 80% - the course retains completion mark and results in each slide but does not pass results to LMS.

I didn't have this issue with Storyline 2.