Course communicating with LMS

Have you ever run into a situation where your course doesn’t pick up where you left off when you view it more than once on your LMS? Or maybe it does, but you’d prefer it start over from the beginning? The way your course responds when it’s relaunched is called the resume behavior. 

If your course isn’t resuming as desired, you’re probably wondering what’s going on and how to fix it. In this article, we’ll help you figure that out.

How Do I Control the Resume Behavior?  

First, let’s examine our options. If you’re using Storyline 360, Presenter 360, Quizmaker 360, or Engage 360, you can choose from three resume options:

Prompt to resume

If learners previously viewed part of the course, this option displays a prompt, asking learners if they want to pick up where they left off.

Always resume

This forces your course to open at the place where learners left off. They won’t see a prompt; it just happens automatically.

Never resume

This forces your course to always open at the beginning, even if learners completed part of the course previously. They won’t see a prompt.

 

If you’re using  Rise 360, the course will always resume from where the learner left off. 

How Does Resume Actually Work?

As a learner makes his way through a course, a compressed chunk of information—called suspend data—is sent to the LMS after each slide. This suspend data describes everything about the current state of the course, including the learner’s responses, navigation history, object states, variable values, interaction results, and more.

Course communicating information to LMS

When the learner opens the course again, it asks the LMS where they previously left off. The LMS sends the suspend data back to the course, and the course uses it to resume at the same point and in the same state as before.

LMS communicating back to course

Why Do Courses Fail to Resume?

A few things could get in the way of the resume communication process:

You exceeded the suspend data limit.

Your LMS might be imposing limits on suspend data. Older LMS specs, such as SCORM 1.2, have outdated restrictions on suspend data.

We recommend publishing for the latest edition of SCORM 2004, xAPI (Tin Can API), or cmi5. See these articles for more information:

You’re in a cross-domain environment.

If you’re hosting AICC content on a different server than your LMS, you may experience a cross-domain conflict. See this article for solutions. (Note that this doesn’t apply to Rise 360 courses.)

You already completed the course.

The resume feature might not work as you’d expect after you meet the completion requirement. Most LMSs consider a course to be in review mode after the tracking requirement has been met.

In review mode, resume data is no longer sent to the LMS, which prevents learners from accidentally changing their course status from Complete back to Incomplete. See this article for more information. (Note that this doesn’t apply to Rise 360 courses.)

Can I Examine Suspend Data?

Enable LMS debug mode to watch your suspend data flow back and forth between your content and your LMS. By doing so, you can verify that the data returned by your LMS upon resume is the same data that your content sent upon suspend—a common point of failure.

Course and LMS communicating back and forth

To help you avoid exceeding suspend data limits (see above), we compress suspend data. As a result, the suspend_data string in an LMS debug log isn’t human-readable. You won’t be able to decipher what it means, but you can see if the data sent to the LMS matches the data that comes back from the LMS.

Doesn’t My LMS Need to Read Suspend Data?

No. Only the course itself needs to be able to decompress and read suspend data. The LMS just functions as a handy place to store suspend data between attempts.

The Bottom Line

Now that you have a better understanding of how resume behavior works, you should be able to troubleshoot these issues more easily if you run into them.

Need more help troubleshooting? Check out these other resources:

60 Comments
Justin Grenier
Deborah Munitz
Deborah Munitz

Just to add a meaningful example to this. There is a bug in Google Chrome with the launching of videos. If you use more than a single parameter it can cause videos to be launched in a new tab instead of new window. For a user it seems like their lesson just disappears when the main window launches in front of their lesson in a new tab. If they don't navigate back to the hidden window and they just relaunch the lesson it resumes on screen 1 instead of where they left off. A customer service rep can clearly see that this is the situation in the Studio 9 implementation because you see that they got to screen X even when the last screen unlocked = 1. And while I have never figured out the blue moon situation where I get a user that get 3 pairs of unrecognizable characters scattered in the qui... Expand

James Jordan
Deborah Munitz
Justin Grenier

Good Morning, Stephan. The decision to compress Suspend Data is less about protecting proprietary information and more about making sure we don't exceed the data limits that some Learning Management Systems impose. Further still, we can't offer a web-based suspend data decoding tool right now since our compression/decompression routine is dependent on XML data that is unique to every project. It is not possible to decode the suspend data without first parsing the XML and then creating the correct object structure to read it. Again, we're not trying to hide anything. It's just that this model honestly isn't achievable at the moment. If you have a set of LMS Debug Logs that we can help you diagnose, please feel free to send them over and we'll be happy to take a look: https://... Expand

Steve Flowers

Hey Justin - This is a sore subject with a few of us LMS admins that double as developers:) It's less about troubleshooting and more about confirmation of progress when someone says "I finished it." The typical flow is trust but verify and with the encrypted setup, the verify step is nearly impossible. I've taken to completing a course (I have to do this anyway as an employee) to get an estimate of the suspend data volume, then comparing this with a learner's completion. Additionally, in SCORM 1.2 when suspend data overflows the limit, Storyline restores behave in a consistently bad way. I get that the restriction is based on the mechanics of how it's being saved. However, it's been pointed out in this thread that despite the compression, there are efficiencies that could b... Expand

Deborah Munitz

Justin if what you say were true then Articulate wouldn't be so shy about publishing the method. Most people will happily ignore the documentation but for those of us that want it (or feel we NEED it) we can have our developers go ahead and develop what we choose. If the routine is dependent on the XML data specific to each published lesson that's not the end of the world since we have access to that xml. Just publish the darned compression/decompression schema and let us do that which we want to do. Leaving the community guessing is problematic. You have people posting that they have figured things out or tell you to call this developer or that (who think they have solutions that will only cost $5K or what not). I have had an unmitgated disaster going to Studio '13. I have had to crea... Expand

Justin Grenier

Hi, Deborah. I understand what you're asking for, and I'm sorry to say that I can't provide an ETA for such a tool at this time. I discussed this directly with engineering and we simply can't divert the resources needed to document (and maintain documentation on) this very complex algorithm. It is on the radar with the necessary people, but unfortunately there won't be anything more that I can say on this matter for the time being. ​ I suggest we shift the focus to the root of why your Learning Management System is so susceptible to losing learner progress in the first place. Based on the behavior that you've described both here and in your private Support Case with us, I expect that the data being returned by your LMS upon resume is different from the data that your content sent to... Expand

Deborah Munitz

Justin that pretty darned assumptive of you. Our LMS isnt losing data. It takes what it gets and it stores it. I have logs and logs to prove it. We encounter problems on the client side all the time and I have very little faith that Articulate will figure it out for me. I am trying to figure out ways to deal with the vagaries of different platforms. If a user a user opens a lesson one computer and gets 99 screens in and then opens on another computer (or tablet) or whatever and that device trashes the data our LMS will send them a big suspend data strings and they will ExitAu and send nothing. I have seen it happen. Thankfully it doesn't happen a lot. The new '13 release is so much more susceptible to problems. And it give so much less feedback than it used to. And god forbid you try t... Expand

Deborah Munitz

Justin I would like to submit a request for a new feature. To be able to do this correctly would require better knowledge of what's going on with the XML data that is unique. I am thinking that since the structure of the folders in a published presentation is known, and the files with the XML compression data are known, then a routine could be included in the published output that could be called that would "know" where the lesson specific xml is located. We need two simple JavaScript functions – one will decode Articulate’s encoded data into human-readable form. The other function does the opposite. Our site supports Prototype – but we could support jQuery as well – and the best would be no JS library. We had already assumed the JS code is already in one of the .JS files that Articul... Expand

Stephan Sinka
Justin Grenier
Sara G.
Deborah Munitz
Justin Grenier
Jack Waller
Justin Grenier
Jack Waller
Justin Grenier
Robert Edgar
Robert Edgar

Hi Christine, Here is a link to a string in a Storyline thread where I explained my approach, and included a .pdf of my procedures. Note, though, that while I was able to pop up a warning dialog in SL2, that capability did not persist in Storyline 360. However, I've confirmed that the suspend data call was successful; it does save the current suspend data string to the server LMS. https://community.articulate.com/discussions/articulate-storyline/manually-invoke-lmscommit-on-slide-load-with-js?page=2 Good luck! Robert Manually invoke LMSCommit() on slide load with JS ... community.articulate.com Hi, I'd like to add "save points" to various slides within my course to ensure that learner progress is preserved as best as possible (e.g. guarding against a lost ... Robert Edgar Program Ma... Expand

Mark Tomlinson
Robert Edgar
Mark Tomlinson
Steve Flowers
Mark Tomlinson
Cathy Frost
pradeep kumar
Justin Grenier

Good Morning, Jane! I'm sorry to hear that. The best way to identify an LMS issue is to compare how your published output behaves in an industry-standard testing engine. SCORM Cloud is a free testing engine that supports AICC, SCORM, and Tin Can API (xAPI) content: https://cloud.scorm.com This video demonstrates how to use SCORM Cloud with Articulate content: http://articulate.fyi/1OHe39f You'll also find some helpful LMS-troubleshooting tips here: http://articulate.fyi/1TBEwac If your content works properly at SCORM Cloud but not in your LMS, please open a support case with your LMS provider. They’ll know how best to help with LMS-specific problems. If your content doesn't work in SCORM Cloud, we'll be glad to investigate it further. Just send me a copy of your project ... Expand

ITRC 1