Multiple Quizes in one articulate.

Jun 07, 2016

So here's the scenario:

We have one elearning course and a user may be able to take one of 6 different paths through the course. At the end of the course, they need to pass a test (let's say 10 questions and get 8/10 correct in order to pass).

The problem is, the test questions must relate to the journey they took through the elearning. So essentially, we need 6 different quizzes. Not a problem, Storyline handles that. 

However, each learner can only take 1 path through the elearning. So each learner will only take 1 quiz (the quiz that relates to their learning path).


If we create 6 separate tests, and the user takes only one of them, they will only have achieved 1/6th of the total number of points available to them, and the reporting in the LMS will look weird.

To put it another way, if a user scores 80/100 on their quiz, Storyline will report that they scored 80/600 (or 13.3%) to the LMS. Can anyone think of a solution that would work?

22 Replies
Ryan O'Connell

Hey both, the LMS needs to track the score that the user achieves in the test that they take.

Each of the six tests will be standard, so let's say 10 questions with an 80% pass-rate. So because a user can only take one quiz, we want the LMS to report that they got 80%. If we can't do that, then it's fine to say they got a score of 80 out of 100 (doesn't need to be a percentage). The one thing we don't want passing over to the LMS is a score of 13.3% or 80/600. Does that make sense?

Phil Mayor

You can use the code in the example I posted to send a score to the LMS, Steve commented all of the Javascript so it is easy to edit.

Just make sure that the course cannot overwrite you score or completed state, simple way to do this is to track by slides and ensure that you cannot achieve the total to pass (perhaps have a hidden scene that cannot be accessed).


Ryan O'Connell

Thanks very much for that. That is helpful. I tested on SCORM Cloud, and it worked perfectly from my desktop, so seemed a great solution. However, when I tested it on my iPad, it didn't work at all (returned a score of 0%).

I accessed via Safari for iPad and ensured that JavaScript was enabled on that browser. Is there anything I can do to make this work on an iPad?

Ryan O'Connell

Hi Phil, thanks for this. It worked really well on both iPad and PC. I did find one problem though:

I set up a course where I used the JavaScript in the last link you sent. I set up four options:

  • Status = failed Score = 30 (minimum score is 0, maximum score is 100)
  • Status = completed Score = 80 (minimum score is 0, maximum score is 100)
  • Status = completed Score = 90 (minimum score is 0, maximum score is 100)
  • Status = completed Score = 100 (minimum score is 0, maximum score is 100)

If I failed the first session, when I went back to the LMS it said I'd failed with a score of 30%. Perfect.

If I then opened the course again, and chose the option to get 90%, when I went back to the LMS it said I had completed with a score of 90%. Perfect.

The problem is if I tried to do the above in one session. So if I executed the JavaScript to tell the LMS that I had failed, with 30%, and then went back and executed the JavaScript to tell the LMS that I had completed, with say 90%, then what would happen is the LMS (SCORM Cloud) shows a status of Failed and a score of 90%.

Is there anything I can do to force a course status change if I've already changed the status once in the same session?

I've added my .story file in case that helps.

Guido Roessling

If I understood the problem correctly, there are multiple "final quizzes" (which collect their points in their own variables). However, you cannot tell in advance what the "actual quiz" will be.

I believe that the following might achieve what you are looking for:

  • Create a new Result slide
  • Manipulate the value of the "result of this slide" to be (sum or max of all quiz results possible) - exactly one of these values should be better than 0, the others should be 0.
  • On export for an LMS (or whatever), choose this "final result slide" as the "result slide".
Steve Flowers

Looking at the file, I'd probably work to make sure that the slide that grades the output is set to reset to initial state, along with each of the layers. 

I see that you're asking the user to click the button after confirming score. That's cool. If it doesn't matter that the score submits automatically, I'd use something like this and move that trigger back to the base slide and send in the currentscore value:

//get LMS API
var player=GetPlayer();
var currentscore=player.GetVar("currentscore");
var lmsAPI = parent;

//set score; the first number is the score
lmsAPI.SetScore(currentscore, 100, 0);

Storyline *really* wants to use its own logic to send completions. I've started completely suppressing Storyline's score submission whenever I want to trigger my own submissions. This prevents Storyline from behaving in ways I don't want. The extra unreachable slide should get it in most cases. However, I have seen it fail when using things like question banks. Because each pull that includes a new question will actually ADD to the slide count.

I add this to a JS trigger on the master slide at the root:

//since we don't want Storyline to overwrite our scoring... let's overwrite that $#it.

With this in place, there isn't any way for Storyline to send any kind of completion to the LMS. The other side-effect of completely overriding this is you can now use a results slide to capture every single question's response without worrying about how things track within the published output.

Running a few tests with your example file to see if any of these could be the culprit. 


Steve Flowers

Wacky. None of the stuff I have above is really relevant to this case. I still recommend overwriting Storyline's tracking call. More reliable than using extra slides.

In my tests, the second SetStatus call isn't applying at all:

Steve Flowers

OK. Within the same session, it looks like the SCORM API won't accept a completed status while the status is failed. I manually triggered a passed change BEFORE calling another completed and it appeared to behave just fine.

//get LMS API
var lmsAPI = parent;
//set score; the first number is the score
lmsAPI.SetScore(100, 100, 0);
//set status; possible values: "completed","incomplete", "failed", "passed"

I would still blow out Storyline's ReportStatus function. The other workarounds still leave space for Storyline to sabotage your custom behavior.


Ryan O'Connell

Hey, so this is great, and has given me an idea:

We can give the learner a couple of attempts and have the elearning pass incomplete if they fail the test. Then if they don't pass on the third attempt, we can mark it as failed and have them exit the course and come back the next day, which means they will be in a new session so if/when they pass the course, it should pass complete.

What do the folks think of that? Good idea or not?

Thanks for everyone's input by the way - this is truly great!

This discussion is closed. You can start a new discussion or contact Articulate Support.