Articulate Studio '13 compresses suspend data to avoid exceeding data limits imposed by some learning management systems. As a result, the suspend_data string in an LMS debug log isn't human-readable. That is, you won't be able to decipher it as you can see in that example. I'm not familiar with the Dokeos platform, but have you checked in with the Dokeos LMS team already to see what they were able to determine?
i'm a programmer. I have same problem with you. and it trouble me for days. but do you know how to decipher suspend data in articulate studi 13. I need it to calculate learner's progress.
Having recently upgraded to Articulate Studio '13, I had to figure out a way to get the viewed slides/last slide viewed data from the compressed suspend data to lock/unlock tabs on several embedded flash files. I'm sure there is a nicer/better/cleaner way to get this data, but if you're interested, here is the script in AS3. I haven't tested it thoroughly, but so far it seems to be working on our LMS.
import flash.external.ExternalInterface; if(ExternalInterface.available){ var getData= ExternalInterface.call("parent.SCORM_GetDataChunk"); var susDta = String(getData); var patrn1:RegExp = /1+[0-9a-fA-F]+110+/gi; var getDta:Array = susDta.match(patrn1); var toStr:String = getDta.toString(); var patrn2:RegExp = /110/gi; var vwdArr:Array = toStr.split(patrn2); for (var i=0; i vwdArr[i] = vwdArr[i].substr(1,2); vwdArr[i] = parseInt(vwdArr[i],16); vwdArr[i] = vwdArr[i]+1; } var remLas:String = vwdArr.pop(); var remDup:Array = vwdArr.filter(function(noDup:*, Dupl:int, vwdArr:Array):Boolean { return vwdArr.indexOf(noDup) == Dupl; }); var vwdSld = "Viewed Slides: "+remDup; var lasSld = "Last Slide Viewed: "+vwdArr[vwdArr.length-1]; trace(vwdSld); trace(lasSld); }
I also need to get the last slide viewed from the suspend_data. Nelson's code sample suggests it's possible to do this. However, I don't know Action Script. I would need to do it in javascript or PHP.
It looks to me like at the heart of Nelson's script are some regular expressions that divide the string into various parts, but I'm not sure I could translate the code. Can anyone explain in English what's happening in that code... more specifically than I have?
I find it odd that this (seemingly) isn't documented anywhere. Don't people writing web apps want to know how far someone has progressed through an SCO?
10 Replies
Hi Andre and welcome to Heroes!
Articulate Studio '13 compresses suspend data to avoid exceeding data limits imposed by some learning management systems. As a result, the suspend_data string in an LMS debug log isn't human-readable. That is, you won't be able to decipher it as you can see in that example. I'm not familiar with the Dokeos platform, but have you checked in with the Dokeos LMS team already to see what they were able to determine?
hi andre
i'm a programmer. I have same problem with you. and it trouble me for days. but do you know how to decipher suspend data in articulate studi 13. I need it to calculate learner's progress.
Hi Liu!
I'm not sure if Andre is subscribed to this thread, so you may want to try to send him a private message.
Having recently upgraded to Articulate Studio '13, I had to figure out a way to get the viewed slides/last slide viewed data from the compressed suspend data to lock/unlock tabs on several embedded flash files. I'm sure there is a nicer/better/cleaner way to get this data, but if you're interested, here is the script in AS3. I haven't tested it thoroughly, but so far it seems to be working on our LMS.
import flash.external.ExternalInterface;
if(ExternalInterface.available){
var getData= ExternalInterface.call("parent.SCORM_GetDataChunk");
var susDta = String(getData);
var patrn1:RegExp = /1+[0-9a-fA-F]+110+/gi;
var getDta:Array = susDta.match(patrn1);
var toStr:String = getDta.toString();
var patrn2:RegExp = /110/gi;
var vwdArr:Array = toStr.split(patrn2);
for (var i=0; i
vwdArr[i] = vwdArr[i].substr(1,2);
vwdArr[i] = parseInt(vwdArr[i],16);
vwdArr[i] = vwdArr[i]+1;
}
var remLas:String = vwdArr.pop();
var remDup:Array = vwdArr.filter(function(noDup:*, Dupl:int, vwdArr:Array):Boolean {
return vwdArr.indexOf(noDup) == Dupl;
});
var vwdSld = "Viewed Slides: "+remDup;
var lasSld = "Last Slide Viewed: "+vwdArr[vwdArr.length-1];
trace(vwdSld);
trace(lasSld);
}
Thanks for sharing Nelson.
I also need to get the last slide viewed from the suspend_data. Nelson's code sample suggests it's possible to do this. However, I don't know Action Script. I would need to do it in javascript or PHP.
It looks to me like at the heart of Nelson's script are some regular expressions that divide the string into various parts, but I'm not sure I could translate the code. Can anyone explain in English what's happening in that code... more specifically than I have?
I find it odd that this (seemingly) isn't documented anywhere. Don't people writing web apps want to know how far someone has progressed through an SCO?
Thank you
Take a look at this previous post
Hi,
Sorry, I didn't subscribed to the thread. So, I tough nobody was answering :( I'm glad it's not the case.
Thanks everybody, I'll read carefully what you wrote. :)
Has anyone developed javascript that can handle the decompression/compression?
I did it in PHP - with some encouragement, I might also write it in Javascript
https://www.richeyweb.com/blog/23-personal-blog/130-a-brain-exercise-scorm-xapi
This discussion is closed. You can start a new discussion or contact Articulate Support.