Forum Discussion
How to send quiz results via mail automatically via Javascript
Hi all,
until now I am able to let create a mail with the results of 5 quizzes automatically.
But the learner could adapt that mail text and has to hit the "Send"-button in his mail client.
How to send the mail automatically?
What I did to let it work so far:
1. Created 5 global variables (r1, r2,...r5) in which the resultvalues are stored
2. Created 5 events ("r1 = Results.ScorePercent", "r2 = Results1.ScorePercent"...) to store the result values in these global variables
3. Assigned this Javascript code to a button:
var player = GetPlayer();
var status=player.GetVar("completion");
var email = 'recepientsmailaddress@here.com';
var r1 = player.GetVar('r1');
var r2 = player.GetVar('r2');
var r3 = player.GetVar('r3');
var r4 = player.GetVar('r4');
var r5 = player.GetVar('r5');
var subject = 'My quiz results of XYZ Quiz';
var emailBody = 'My quiz results:' + " " + r1 + ", " + r2 + ", " + r3 + ", " + r4 + ", " + r5;
window.location.href='mailto:'+email+'?subject='+subject+'&body='+encodeURIComponent(emailBody);
- MeeraLynnCommunity Member
The email does not show the quiz results sadly. It shows the following:
My quiz results: null, null, null, null, null
Ideally, I would want it to show a table with the name of the quiz taker + the quiz questions with the User's answers and of course their final score.
Help, please?
Thanks.
- RhondaLendt-201Community Member
Hi Meera Lyn,
Your issue is very similar to mine. Did you ever figure out how to send the results via email?
Thanks kindly,- MeeraLynnCommunity Member
Hi Rhonda
Articulate Support recommended that the company has the course hosted on their LMS (Learning Management System) - LMS will send out notifications like this, and therefore, Articulate does not need to have this functionality (shame really).
As a workaround, what we did is to have a Print button on the Results slide. When the user clicks Print, it loads the final A4 portrait slide which has Javascript containing: the course title + the date of the course + the score the user got (you could also set up a user name parameter at the beginning of your course to get the user to enter their name before they start the course - this name field can then also be entered on the afore-mentioned final slide that contains their score).
When the user clicks the Print button on the Results slide, Javascript launches the print dialogue screen allowing the User to print this A4 portrait slide for their record, or if they wish to save it in their local drive they can simply amend the "Destination" drop-down to PDF format and save it that way.
Our print button Javascript is:
var styles = `@media print {
body, * { visibility: hidden; }
html, body { overflow: hidden; transform: translateZ(0); }
#slide {
transform: scale(1.1) !important;
}
#wrapper {
transform: scale(1) !important;
}
#slide,#wrapper {
width: 100% !important;
height: 100% !important;
overflow: visible !important;
}
#frame {
overflow: visible !important;
}
.slide-transition-container {
overflow: visible !important;
}
@page {size: A4 portrait;max-height:99%; max-width:99%}
.slide-container, .slide-container * {
visibility: visible !important;
margin-top: 0px !important;
margin-left: 0px !important;
}
#outline-panel {
display: none !important;
}
}
}`
var stylesheet = document.createElement('style');
stylesheet.type = 'text/css';
stylesheet.innerText = styles;
document.head.appendChild(stylesheet);
window.print();Best wishes.
- RhondaBearCommunity Member
Thank you so much for sharing! What a great Articulate community! Very
much appreciated!I will try that out for sure :)
Best regards,
Rhonda
- JoshDean-9a3016Community Member
I tested the code above after I created a few variables (r1,r2, etc.) to match yours.
I would remind that JavaScript only runs when the project is published. You can also add a JavaScript alert to generated a popup to display a value to check how things are working. With this approach you can see the value of variables along the way. console.log can help with this too if you need many alerts.
alert("The value of results at this point is " + results.toString())
Your code worked well for me so I'd guess your variables aren't getting assigned from your quiz results in the earlier step.
I also updated your version a little using an Array.toString() function that easily lists a series of variables. Hopefully it's useful to someone.
var player = GetPlayer();
var status=player.GetVar("completion");
var email = 'recepientsmailaddress@here.com';
results = [
player.GetVar('r1'),
player.GetVar('r2'),
player.GetVar('r3'),
player.GetVar('r4'),
player.GetVar('r5')
];
alert("The value of results at this point is " + results.toString())
var subject = 'My quiz results of XYZ Quiz';
var emailBody = 'My quiz results:' + results.toString();
window.location.href='mailto:'+email+'?subject='+subject+'&body='+encodeURIComponent(emailBody); - RhondaLendt-201Community Member
Thank you very much for your reply! I will try it out!
- RhondaLendt-201Community Member
Ah, I see that this will print the 'Results.ScorePercent'. But what I am hoping for is the actual quiz showing the user's answers and score. If we use the Print button it will print a great report.html. But how do we get that in an email without users having to download and locate file to email? Still digging, but if anyone knows, I would love to hear! Trying to find an easy way for Learners to submit their quiz records. Thanks! :)
- JoeBrewer-5f583Community Member
Does anyone know how to do this? We need the report.html emailed automatically without downloading the results. The report generated in Storyline using the Print button is already amazing, so we need that data submitted. Thanks heroes!
- CadenHarte-cdbfCommunity Member
How do you set up the 5 events?
- KarinHuditzCommunity Member
Hello, is there still no way to send the detailled results (answers and questions) via Javascript per mail to someone? Thanks a lot. :)
- TH-bf52b1b3-f6fCommunity Member
Dear Karin and all,
this javascript is definitely working and showing each quiz question result (true means the questions was answered incorrectly)
I created for each Question a variable like "Q5_2" what means Questions Number 2 of the 5th Chapter in the module. So I know what questions it is.
Then the 5 events are created on the very final result slide when timeline starts by "if variable changes then assign the Score Percentage to the variable r1" and so on.
So I am just filling all 5 variables with the 5 score percentages as I have 5 result slides within my module. You perhaps need just one.
Then in the end the learner hits the button, the javascript starts and creates the email with subject, and email text. Email text contains after Validation Code 1 the passing percentages. But I somekind of pasted filling figures to not let the learner understand that these are his final results. So he is not able to modify them.
After validation code 2 each question results are shown with the number of the question. true means a correct answer. False an incorrect answer.
See attached screenshot (German) of an example of a generated email. This is created after the learner hits a button that starts the following javascript.
Good Luck ;) - KarinHuditzCommunity Member
Thanks! :) It could be a way, but still not the final wish I would have. :D
There is no way to also get the given answers. I can only send if the question is right or wrong, but not which answers were chosen?
- TH-bf52b1b3-f6fCommunity Member
Uhhhh...this is going to get big.
Actually it should work, getting the answers. But it would mean you have to create on each answer a hotspot. Then create for each hotspot a variable. Then you have to create a trigger that starts with timeline start of the slide. That trigger says "on click on hotspot 1 assign value of variable 1 to true". So you would see which of the hotspots have been clicked.'
And of course you have to add these variable to the javascript.
But this only works if you turn off the randomization of the order of the answers. They have to be static.Thorsten