Thursday, June 23, 2011
Saturday, May 14, 2011
Sunday, February 6, 2011
BlackBoard 9.1
Just had some clients needing to load content into BlackBoard 9.1. We created a very simple SCORM 2004 package for them using Simple SCORM Packager and sent it to them to post onto their LMS. They imported the content and then sent an email back to us saying that the course did not show a Table of Contents once the SCORM 2004 content package was loaded and running in the BlackBoard 9.1 LMS. We ran the package through the SCORM 2004 3rd Edition Test Suite and Sample Run-Time Environment and the course passed with flying colors. This told me that the issue was with the BlackBoard LMS. I searched the internet and came across this tutorial on how to upload content into the BlackBlard LMS "http://www.blackboard.com/quicktutorials/SCORM2004.swf". In the tutorial there is a screen that allows the admin to select whether they want to set Control Mode to Choice or Flow. It must be set to choice fi you want the student to be able to select items from the table of contents. That was the solution to the issue. I hope that you find the tutorial helpful.
Thursday, January 6, 2011
Articulate SCO to SCO SCORM 2004 sequencing
This week the question was asked "How to get sequenced Articulate published to SCORM 2004 3rd Ed flies to move from each SCO to the next SCO correctly?". This is easily accomplished within SCORM by first publishing your multi-SCO articulate package. Then when you want to move from one SCO to another SCO automatically you will have to use adl.nav.request
doSetValue("adl.nav.request","continue");
The line above will move from the current sco to the next sco in the activity tree as soon as the current sco session is terminated.
In the Articulate SCO packages set this on line 169 for the "SCORM2004Functions.js" file
blnResult = blnResult && SCORM2004_CallSetValue("adl.nav.request","continue")
UPDATE 12/13/2011
---------
Once you make the change then you will need to package up the Articulate sco packages into a single course with Simple SCORM Packager. Once do that then test it on cloud.scorm.com.
If it works on cloud.scorm.com and not on your LMS then the issue is with your LMS. If it does not work on cloud.scorm.com then you did something wrong in your code.
doSetValue("adl.nav.request","continue");
The line above will move from the current sco to the next sco in the activity tree as soon as the current sco session is terminated.
In the Articulate SCO packages set this on line 169 for the "SCORM2004Functions.js" file
blnResult = blnResult && SCORM2004_CallSetValue("adl.nav.request","continue")
UPDATE 12/13/2011
---------
Once you make the change then you will need to package up the Articulate sco packages into a single course with Simple SCORM Packager. Once do that then test it on cloud.scorm.com.
If it works on cloud.scorm.com and not on your LMS then the issue is with your LMS. If it does not work on cloud.scorm.com then you did something wrong in your code.
Friday, March 5, 2010
LMS Quirks, Issues, and Work- Arounds : LRN Learning System (part 2)
Now that we have the SCORM 1.2 package running on the LMS there has been another issues that has popped up. The issue is that the single SCO SCORM package automatically "completes with no score" in the LMS when the student launches the course. The SCORM data is clearly NOT sending cmi.core.lesson_status [see below ---SCORM DEBUG REPORT ---].
Now here is the FUN part. In this particular LMS (LRN Learning System) if you do not set the lesson status at all as soon as the course launches then the LMS ASSUMES THAT YOU WANT IT MARKED COMPLETED !!!
This kind of stuff is what makes me rant on this blog :)...
There is even a comment in the LMS javascript to this effect [see the bold text below]:
IN FILE: wrapperEscape.js
Method:persistData:
if (this.isInitialized) {
/*set the lesson status to completed if the SCO doesn't set the lesson_status*/
if(!this.isSCOSetStatus){
if(!this.prevStatus){
this.prevStatus = this.CMIDataModel["cmi.core.lesson_status"].cache;
}
this.CMIDataModel["cmi.core.lesson_status"].cache = "completed";
}
this.persistData();
this.isInitialized = false;
} else {
this.errorCode = SCORM12_ERR.NOT_INIT;
message += "failed!";
SCORM12_UTL.logAPI(message,this);
return "false";
}
--- One possible solution ---
isInitialized = doLMSInitialize();
v = doLMSGetValue("cmi.core.lesson_status");
if(v == "not attempted" || v == "" || v == "incomplete")
{
//every session you have to set the lesson_status = incomplete, failing to do this will cause the course to automatically be merked completed by the LMS doLMSSetValue("cmi.core.lesson_status","incomplete");
}
This debug report can be generated by adding ?debug=true to the end of the sco launch file name OR issuing the following command in the IE8 debugger:
top.location.href="http:/LMS_URL/lrn_start.html?debug=true&aicc_sid=xxxxxxxx&aicc_url=http://LMS_URL/app/a
icc/xscorm_handler&mode=preview&media=off&mode=preview";
---SCORM DEBUG REPORT ---
11:35:30 DEBUG - debug starting...
11:35:32 DEBUG - LMSInitialize()--succeed!
11:35:32 DEBUG - result:0--No error
11:35:32 DEBUG - LMSGetValue(cmi.core.lesson_status)--incomplete!
11:35:32 DEBUG - result:0--No error
11:35:32 DEBUG - LMSGetLastError()--0
11:35:32 DEBUG - LMSGetValue(cmi.suspend_data)--0,0,0,0!
11:35:32 DEBUG - result:0--No error
11:35:32 DEBUG - LMSGetLastError()--0
11:35:32 DEBUG - LMSGetValue(cmi.suspend_data)--0,0,0,0!
11:35:32 DEBUG - result:0--No error
11:35:32 DEBUG - LMSGetLastError()--0
11:40:09 DEBUG - LMSSetValue(cmi.core.session_time,0000:04:37.41)--succeed!
11:40:09 DEBUG - result:0--No error
11:40:09 DEBUG - LMSCommit()--succeed!
11:40:09 DEBUG - result:0--No error
Now here is the FUN part. In this particular LMS (LRN Learning System) if you do not set the lesson status at all as soon as the course launches then the LMS ASSUMES THAT YOU WANT IT MARKED COMPLETED !!!
This kind of stuff is what makes me rant on this blog :)...
There is even a comment in the LMS javascript to this effect [see the bold text below]:
IN FILE: wrapperEscape.js
Method:persistData:
if (this.isInitialized) {
/*set the lesson status to completed if the SCO doesn't set the lesson_status*/
if(!this.isSCOSetStatus){
if(!this.prevStatus){
this.prevStatus = this.CMIDataModel["cmi.core.lesson_status"].cache;
}
this.CMIDataModel["cmi.core.lesson_status"].cache = "completed";
}
this.persistData();
this.isInitialized = false;
} else {
this.errorCode = SCORM12_ERR.NOT_INIT;
message += "failed!";
SCORM12_UTL.logAPI(message,this);
return "false";
}
--- One possible solution ---
isInitialized = doLMSInitialize();
v = doLMSGetValue("cmi.core.lesson_status");
if(v == "not attempted" || v == "" || v == "incomplete")
{
//every session you have to set the lesson_status = incomplete, failing to do this will cause the course to automatically be merked completed by the LMS doLMSSetValue("cmi.core.lesson_status","incomplete");
}
This debug report can be generated by adding ?debug=true to the end of the sco launch file name OR issuing the following command in the IE8 debugger:
top.location.href="http:/LMS_URL/lrn_start.html?debug=true&aicc_sid=xxxxxxxx&aicc_url=http://LMS_URL/app/a
icc/xscorm_handler&mode=preview&media=off&mode=preview";
---SCORM DEBUG REPORT ---
11:35:30 DEBUG - debug starting...
11:35:32 DEBUG - LMSInitialize()--succeed!
11:35:32 DEBUG - result:0--No error
11:35:32 DEBUG - LMSGetValue(cmi.core.lesson_status)--incomplete!
11:35:32 DEBUG - result:0--No error
11:35:32 DEBUG - LMSGetLastError()--0
11:35:32 DEBUG - LMSGetValue(cmi.suspend_data)--0,0,0,0!
11:35:32 DEBUG - result:0--No error
11:35:32 DEBUG - LMSGetLastError()--0
11:35:32 DEBUG - LMSGetValue(cmi.suspend_data)--0,0,0,0!
11:35:32 DEBUG - result:0--No error
11:35:32 DEBUG - LMSGetLastError()--0
11:40:09 DEBUG - LMSSetValue(cmi.core.session_time,0000:04:37.41)--succeed!
11:40:09 DEBUG - result:0--No error
11:40:09 DEBUG - LMSCommit()--succeed!
11:40:09 DEBUG - result:0--No error
Wednesday, February 24, 2010
ADL Test Suite 1.2.7 Bug cmi.core.score
Leaving off the .raw from cmi.core.score.raw does not result in an error in the ADL Test Suite 1.2.7. The operation LMSSetValue('cmi.core.score','100'); should returnthe following errors.
But instead in the ADL Test Suite 1.2.7 it returns:
LMSSetValue(cmi.core.score,100) has been invoked
LMSSetValue() finished successfully
Package is SCORM Version 1.2 ADLCP-PIF1 Conformant
LMSSetValue('cmi.core.score', '100') returned 'false'
CheckForSetValueError (cmi.core.score, 100, cmi.core.score, , )
SCORM ERROR FOUND - Set Error State: 201 - The parameter 'cmi.core.score' is not recognized.
LMSGetLastError() returned '201'
LMSGetErrorString('201') returned 'Invalid argument error'
But instead in the ADL Test Suite 1.2.7 it returns:
LMSSetValue(cmi.core.score,100) has been invoked
LMSSetValue() finished successfully
Package is SCORM Version 1.2 ADLCP-PIF1 Conformant
Sunday, February 7, 2010
Mantis Bug Tracker IE 8 Accelerator
I just took a few minutes and wrote an IE 8 accelerator that post data to Mantis. It is fairly rudimentary, but it is a good example and it gets the job done. To make it better I think it would be good to add a PHP page to the Mantis install that asks for a little more information like project, assign to, and maybe a more descriptive summary.
NOTE: This accelerator does not contain a login script so for seamless execution you should already be logged into Mantis.
Below is the code to create a link to install the accelerator:
<button id="myButton"
onclick="window.external.AddService('http://www.jcasolutions.com/bugtracker/mantis_ie_accelerator.xml')">
Post bug to mantis</button>
Below is the XML for the accelerator:
[file name: mantis_ie_accelerator]
<os:openservicedescription xmlns:os="http://www.microsoft.com/schemas/openservicedescription/1.0">
<os:homepageurl>http://www.your_site.com/bugtracker</os:homepageurl>
<os:display>
<os:name>Post Issue to Mantis</os:name>
<os:icon>http://www.your_site.com/bugtracker/images/favicon.ico</os:icon>
<os:description>Quick way to post an issue to Mantis.</os:description>
</os:display>
<os:activity category="Bug Tracker">
<os:activityaction context="selection">
<os:execute action="http://www.your_site.com/bugtracker/bug_report_advanced_page.php" method="post">
<os:parameter name="summary" type="text" value="{selection}">
<os:parameter name="description" type="text" value="{selection}">
</os:parameter>
</os:parameter>
</os:execute>
</os:activityaction></os:activity></os:openservicedescription>
NOTE: This accelerator does not contain a login script so for seamless execution you should already be logged into Mantis.
Below is the code to create a link to install the accelerator:
<button id="myButton"
onclick="window.external.AddService('http://www.jcasolutions.com/bugtracker/mantis_ie_accelerator.xml')">
Post bug to mantis</button>
Below is the XML for the accelerator:
[file name: mantis_ie_accelerator]
<os:openservicedescription xmlns:os="http://www.microsoft.com/schemas/openservicedescription/1.0">
<os:homepageurl>http://www.your_site.com/bugtracker</os:homepageurl>
<os:display>
<os:name>Post Issue to Mantis</os:name>
<os:icon>http://www.your_site.com/bugtracker/images/favicon.ico</os:icon>
<os:description>Quick way to post an issue to Mantis.</os:description>
</os:display>
<os:activity category="Bug Tracker">
<os:activityaction context="selection">
<os:execute action="http://www.your_site.com/bugtracker/bug_report_advanced_page.php" method="post">
<os:parameter name="summary" type="text" value="{selection}">
<os:parameter name="description" type="text" value="{selection}">
</os:parameter>
</os:parameter>
</os:execute>
</os:activityaction></os:activity></os:openservicedescription>
Subscribe to:
Posts (Atom)