Forum Discussion
Storyline Suspend Data Compression
Good day!
As some of us know SCORM 1.2 only limits its suspend data for up to 4096 characters. Storyline (360) compresses its data (e.g. SL variables and such) in order to fit the limitations of the suspend data. There must be an underlying decompression algorithm or its own unique reader on SL to read the suspend data.
My question is when this compressed suspend data becomes decompressed, would there be a possibility of it hitting the 4096 limit?
- ZoAguilar-010a1Community Member
Hi Christian...
Could you solve it? Certainly, the options offered by articulate are not an option.
I interested in your option 3 - "Only set important slides' setting to resume"
Regards!
- ChristianOmpadCommunity Member
Hello Zoe,
Since our LMS only uses SCORM 1.2, I had to make do with the 4096 character limit (unless you republish to SCORM 2004 3rd or 4th edition). While the solution in #3 worked for me, there is no actual workaround with the limit. So basically what happened is, I found out that Storyline's Slide Setting "Resume to saved state" takes up additional suspend data and all I did was to limit its usage.
I highly discourage using it on slides that are "media-rich"; that is, slides that have a lot of video, graphics or sounds in them. Instead, for these kind of slides I used the "Reset to initial state" option this helped me save some of those precious suspend data.
- DarioDabbiccoCommunity Member
Thanks a lot David, very brilliant! Have you managed to test it in a production environment?
- DavidHansen-b20Community Member
Uh, yes. We have been using this patch in production for about 6 months now on all of our Articulate-authored courses (both for our courses that are hosted on Cloud Scorm as well as for a number of customer-hosted LMS systems. The customer-hosted LMS systems were the primary instigation for creating this patch since we seem to encounter quite a few of them that either do not support SCORM 2004 (where the suspend_data default size was increased to 32kb) and/or they do not have the ability to override the default size for suspend_data. FWIW, the Rustici SCORM driver does allow configuring/overriding the suspend_data size. However, we have a couple of courses that were resulting in suspend_data sizes exceeding 50kb. After compression. these courses were then saving suspend_data that was just barely under 4k!
- DarioDabbiccoCommunity Member
Thank you again David! I hope that Articulate can implement something like that: also in my experience, it is a big problem with customers' LMSes, and I had to go very deep in troubleshooting / tweaking my course to have that infamous string go under 4096 bytes :)
- NathanHartwickCommunity Member
Thanks for info David. Was this patch created in part to help solve freezing or forever loading screens upon resume? Have you tested this in a version of Moodle? Something I run into occasionally when using SCORM 1.2 in Moodle is situation where the activity won't load (loading dots) when trying to pull the resume data back in so then the attempt in Moodle needs to be reset to unlock the activity. I can't really recreate the issue consistently enough to troubleshoot and it only happens to maybe 1 in 100 users. Still very frustrating.
- DavidHansen-b20Community Member
Oh, and I can say that I have run into issues like you describe with the stuck loading prompt in the past. Usually it has turned out to be some odd event that failed upon resuming. One of the best troubleshooting things in this situation is to have the user who experienced the problem (loading stuck) open their browser developer console (usually Ctrl-Shift-I on most browsers or right click then inspect). All the browser errors are logged to that console, and though there are often lots of warnings and other errors going on, there may be a tell-tale error message that could help you down the path to a solution (or at least with what's going on that's preventing it from completing the resume).
- NathanHartwickCommunity Member
Thanks for the in-depth answer. I'm definitely going to test the compression patch for suspend data in Moodle using SCORM 1.2. As for the odd loading event, I was able to inspect a frozen activity and in console I was shown an error that was not thrown in the same activity that's loading for another student. I'm currently chasing this down and it seems promising. Might fix a bug that has been an annoyance for some time.
- NiteshKumar-34eCommunity Member
Hi David,
If I am using pako.min.js. and follow the same procedure what have you suggested.
My module is removing the resume behavior, it run always from the first slide.
con you suggest me why it is happening.
I am using classic player and exporting in SCORM 1.2
- DavidHansen-b20Community Member
Well, I would think one of two possibilities is going on: either the LMS is truncating or corrupting your suspend_data; or you may have made a very small typo or error in your implementation of the above.
The first thing to check would be to open the browser developer console and then check for any errors. If you accidentally made any mistakes when patching the above files, those errors would be reported in the developer console.
The other thing you can do to help debug, is to look at the LMS interface debug window. To see the LMS debug window, you simply have to make a couple of changes in the file
lms/Configuration.js
. First, make sure the first line hasblnDebug = true;
If it's false, then just change it to true. Then scroll down to or search forSHOW_DEBUG_ON_LAUNCH = false;
and change that to true. You will then need to re-zip the package and re-upload it to the LMS. This simple change will then cause an additional window to open up when you launch the course that has all the debug logs for the LMS interface.Note: if
blnDebug
is already set to true, then you can also open the debug window from the browser developer console of an already launched course. To do that, go to the console section of the developer console, and type:window.SearchParentsForContentRoot().ShowDebugWindow();
Within the debug window, what you need to do is to find and compare the value of the suspend_data when SetDataChunk() is called versus the value when resuming from GetDataChunk(). If these values are different then your LMS is likely truncating or corrupting the data.
I hope that helps with your debugging.
- samerCommunity Member
Thank you David for your help and advice!
I have now successfully implemented the code and tested it on SCORM CLOUD and on our LMS (Webanywhere) Moodle version 1.6.
However this is to be implemented on my clients system who use SAP success factors.
I am slightly apprehensive to give a 100% guarantee that the problem won't occur on their system but am struggling to find out the exact specification of the LMS but I believe it is a custom based solution (if anyone reading this knows?)
I have suggested that they complete a test but my team want to just offer a solution.
I have explained that although we have tested, it still needs to be tested on the Clients LMS as the
LMS can still truncate the data
Would this be a fair analysis? I appreciate your advice, although i'm confident with editing the package, when it comes to API's I am reaching my depths of understanding.
I'm still unclear as to whether this is specific to Articulate Storyline or this happens with any software of this type?
Thanks in advance
regards
Thanks in advance
- DavidHansen-b20Community Member
I do have a bit of experience dealing with customers using SAP Success Factors. It has definitely been one of the more pain-in-the-derrière LMS systems. And yes, SuccessFactors seems to be fixed in time on SCORM 1.2 (and doesn't even support recording interaction data). Anyway, this fix should still help and work fine. But like you, and with my previous SuccessFactors experiences, I would be hesitant to give a 100% guarantee, at least without someone first testing your course on your client's specific version of SuccessFactors. Though, I do know that by using base64 encoding, the suspend_data itself should be fine with SuccessFactors as long as it's not truncated. What would cause me reservation is just the broad number of issues I've encountered with SuccessFactors.
As to whether the suspend_data actually gets truncated or not, that should depend solely on whether your course creates more than 4096 bytes of compressed data. What we usually do is test our courses on cloud.scorm through to the last slide and then exit (causing a suspend). We then look at the registration data on cloud.scorm and examine the size of the suspend_data (typically, you can just copy the result into a web-based byte/string counter and see how long it is). If it's close to 4096, then we have concerns. If it's smaller by at least a 10% margin, then we feel more confident that everything will be fine. Otherwise, we have to figure out how to trim out some of the items that cause saved state to be larger (typically we pair down the number of interactions).
I hope that helps! And good luck!
- VictorMadisonCommunity Member
David, counting the bytes in the suspend data using the SCORM Cloud registration info is great. This is the closest method I have seen for measuring the suspend data for a course. It may not be exact, but it at least gives you an idea of where you are. Thank you very much.
- samerCommunity Member
Thanks David for your help and advice. It has been tested on SuccessFactors and has no issues so far!
I have also tested on SCORM cloud.
However we have just uploaded a replacement module on Webanywhere (moodle 1.6) and got the attached error?
The first test we did worked ok. Have you seen this before?
regards
sharon
Hi Sharon,
I agree with Dario.
Try zipping the content from the Publish Successful dialog window to see if it alleviates the issue you're seeing.
- ValeriaVillarroCommunity Member
Hi Folks - would this code work with a SCORM 2004 3rd ed as well?
- DavidHansen-b20Community Member
Yes, this will also work on 2004 published courses. The code change is in lms/API.js which is common to both the SCORM 1.2 and the SCORM 2004 interfaces.
- AndreaBrigan523Community Member
I read this long post and this story is something that perhaps Articulate can consider to improve the software. I am not a developer but I wonder if articulate can do something to bypass this limitation. I don't know....I found this script inside the file scormdriver.js of the course published in SCORM 1.2... What does this mean? Is articulate chunking the volume of suspend data as soon as the y reach 4096? However, is it possible to make something to ignore that limit keeping the SCORM 1.2 format?
if(USE_STRICT_SUSPEND_DATA_LIMITS==true) {
if(strData.length > 4096) {
WriteToDebug("SCORM_SetDataChunk - suspend_data too large (4096 character limit for SCORM 1.2)");
return false;
}else{
return SCORM_CallLMSSetValue("cmi.suspend_data", strData);
}
}else{
return SCORM_CallLMSSetValue("cmi.suspend_data", strData);
}
}- DavidHansen-b20Community Member
"I wonder if articulate can do something to bypass this limitation." - unfortunately, the limitation of 4096 bytes comes from the SCORM 1.2 specification itself. Depending on the LMS system, some will adhere to the specification very strictly and others will make accommodations where it makes sense. Eg, many LMS systems will allow the administrator to configure the maximum size of suspend_data regardless of the spec (all variants of the Rustici driver support this). However, Articulate is bound by whatever implementation of the specification the LMS's has and can not just bypass that.
Note: The really simple solution is actually just to use any variant of SCORM 2004 where it was quickly recognized that 4096 bytes was insufficient and increased the specification maximum to 32768 bytes (as well as many other improvements to the specification). SCORM 1.2 is from 2000-2001, almost 20 years ago! It's unbelievable to me that we are still struggling to get out from under a specification from that long ago! Unfortunately, they did not build in a plan for obsolescence to force progression to newer standards (many standards today do this). About all I can say is there must be a clear desire for simplicity and that is one of the driving reasons why so many people continue to use SCORM 1.2 - it is "simpler".
In regard to your question about that piece of source code, that is designed for the few LMS systems that will potentially crash your course if you attempt to send more than 4096 bytes. If you happen to have one of those rare LMS systems, then you can simply set the USE_STRICT_SUSPEND_DATA_LIMITS variable in the Configuration.js file. Most LMS systems that strictly support 4096 bytes will merely drop the portion that is over 4096. This will often result in your Articulate course resuming some place prior to where you actually left off. With the setting above, if you get to a point that suspend_data exceeds the 4096, all suspend_data will be dropped and you will be resumed to the beginning of the course.