RE: [Xerte] Scorm 1.2 packaged with Xerte 1.9 doesn´t comunicate with LMS

Paul Swanson Paul.Swanson at harlandfs.com
Tue Feb 5 17:20:32 GMT 2008


Do you have the Google Toolbar running? A Google search on 'onunload ie6' came up with the following page that implies the onunload event is broken in IE6 when you have the Google Toolbar:

http://www.michaelteper.com/archive/2004/04/28/163.aspx

Maybe the onunload event is being invoked before the page unloads. As a quick test, remove the onunload code from the <body> tag, and see if you still have a problem communicating with the LMS. If you can communicate with the LMS then, it would indicate the problem isn't with Xerte. You could also try using Firefox with the onunload code in the <body> tag, and see if it has the same problem. It could be that the problem only exists with a particular browser version, and only if you have the Google Toolbar.

_____________________________

 Paul Swanson
 Portland, Oregon, USA
_____________________________

 

> -----Original Message-----
> From: xerte-bounces at lists.nottingham.ac.uk 
> [mailto:xerte-bounces at lists.nottingham.ac.uk] On Behalf Of 
> Martín Dobovsek
> Sent: Tuesday, February 05, 2008 8:52 AM
> To: Xerte discussion list
> Subject: RE: [Xerte] Scorm 1.2 packaged with Xerte 1.9 
> doesn´t comunicate with LMS
> 
> Explorer 6
> 
> Windows XP Sp2
> 
> Best regards
> Martin
> 
> --- Tenney Julian <Julian.Tenney at nottingham.ac.uk> escribió:
> 
> > What browser and operating system are you using? 
> > 
> > -----Original Message-----
> > From: xerte-bounces at lists.nottingham.ac.uk
> > [mailto:xerte-bounces at lists.nottingham.ac.uk] On Behalf Of Martín 
> > Dobovsek
> > Sent: 05 February 2008 13:43
> > To: Xerte discussion list
> > Subject: RE: [Xerte] Scorm 1.2 packaged with Xerte 1.9 doesn´t 
> > comunicate with LMS
> > 
> > Tenney:
> > 
> > I just downloaded ver. 1.10 from site, uninstall ver. 1.9 
> and install 
> > 1.10
> > 
> > I do from scratch the file with two pages and hack scormRLO. htm to 
> > see whether pushing buttons appears the alert for setValue.  Scorm 
> > version 1.2
> > 
> > No luck
> > 
> > MainPreloader.swf modif. date 15/01/08
> > 
> > I was looking the .js files to find timing calculation as 
> in the old 
> > 1.5 scormRLO.htm (which uses // FS SCORM - fscommand 
> adapter for ADL 
> > SCORM 1.2) and couldn´t find it too.
> > 
> > Well.
> > It seems is a litle more complex as i think before.
> > 
> > Very thanks for support
> > 
> > Martin
> > 
> > 
> > --- Tenney Julian <Julian.Tenney at nottingham.ac.uk> escribió:
> > 
> > > The correct sysntax is
> > > 
> > > _level0.setValue(dataModelElement, value);
> > > 
> > > So this is correct:
> > > 
> > > _level0.setValue('cmi.core.lesson_status', 'completed');
> > > 
> > > Let's find out whether there is a problem communicating between 
> > > Flash and the html page. If you put an alert in the javascript 
> > > function for setvalue, do you see it when you click your 
> buttons to set the values?
> > > 
> > > I do. I don't know why you don't. Do you have the latest 
> MainPreloader.swf?
> > > 
> > > -----Original Message-----
> > > From: xerte-bounces at lists.nottingham.ac.uk
> > > [mailto:xerte-bounces at lists.nottingham.ac.uk] On Behalf Of Martín 
> > > Dobovsek
> > > Sent: 05 February 2008 12:24
> > > To: Xerte discussion list
> > > Subject: RE: [Xerte] Scorm 1.2 packaged with Xerte 1.9 doesn´t 
> > > comunicate with LMS
> > > 
> > > Tenney:
> > > 
> > > My LMSFinish() has been invoked --after I close the SCO 
> manually  as you.
> > > Confirmation with your added script.
> > > 
> > > 
> > > Please confirm sintax:
> > > 
> > > Version Xerte 1.5
> > > 
> > > _level0.LMSSetValue("cmi.core.lesson_status", "completed");
> > > 
> > > Version Xerte 1.9
> > > 
> > > _level0.setValue('cmi.core.lesson_status', 'completed');
> > > 
> > > There are differences in command sintax and quotes.
> > > 
> > > I test both and nothing changes. 
> > > 
> > > It seems that there isn´t comunicacion between flash and html.
> > > 
> > > Both functions (LMSInitialize() and LMSFinish() are 
> called from html 
> > > (onload and
> > > onunload) and the problem is when calling functions during events 
> > > inside flash. Below are used files.
> > > 
> > > Using this .rlo I got the same results old in the ADL test log 
> > > (status do not change)
> > > 
> > > Best regards and thanks for support
> > > 
> > > Martin
> > > 
> > > *******************************************
> > > .rlo:  2 pages with 2 pages and interaction buttons to test data 
> > > sending
> > > 
> > > 
> > > 	<LO name="Learning Object">
> > > 		<IFC name="Interface" title="My Learning 
> Object" visuals="1">
> > > 			<PG name="[Untitled]" title="Page 
> Title" help="Page Help">
> > > 				<INT name="[Untitled]" perpetual="0">
> > > 					<RES name="[Untitled]" 
> type="button" x="0" y="0" label="browsed" erase="1"
> > > exit="0">
> > > 						<SCR 
> > > 
> name="[Untitled]"><![CDATA[_level0.setValue('cmi.core.lesson_status'
> > > ,
> > > 'browsed');]]></SCR>
> > > 						<DIS 
> name="[Untitled]" x="400" y="0" w="400" h="10"
> > type="text"><![CDATA[browsed
> > > ]]></DIS>
> > > 					</RES>
> > > 				</INT>
> > > 			</PG>
> > > 			<PG name="[Untitled]" title="Page 
> Title" help="Page Help">
> > > 				<INT name="[Untitled]" perpetual="0">
> > > 					<RES name="[Untitled]" 
> type="button" x="0" y="0" label="completed" erase="1"
> > > exit="0">
> > > 						<SCR 
> > > 
> name="[Untitled]"><![CDATA[_level0.setValue('cmi.core.lesson_status'
> > > ,
> > > 'completed');]]></SCR>
> > > 						<DIS 
> name="[Untitled]" x="200" y="0" w="400" h="10"
> > > type="text"><![CDATA[completed]]></DIS>
> > > 					</RES>
> > > 				</INT>
> > > 			</PG>
> > > 		</IFC>
> > > 		<BIN name="Deleted Items" />
> > > 	</LO>
> > > 
> > > *******************************************
> > > *******************************************
> > > scormRLO.htm
> > > 
> > > ********************************************
> > > *******************************************
> > > <html>
> > > <head>
> > > <script type="text/javascript" src="apiwrapper.js"></script>
> > > 
> > > <script type="text/javascript">
> > > if (navigator.appName && 
> navigator.appName.indexOf("Microsoft") != 
> > > -1 &&
> > > navigator.userAgent.indexOf("Windows") != -1 && 
> > > navigator.userAgent.indexOf("Windows
> > > 3.1") == -1){
> > >   document.write('<SCRIPT LANGUAGE=VBScript\> \n');
> > >   document.write('on error resume next \n');
> > >   document.write('Sub MainPreloader_FSCommand(ByVal 
> command, ByVal args)\n');
> > >   document.write(' call 
> MainPreloader_DoFSCommand(command, args)\n');
> > >   document.write('end sub\n');
> > >   document.write('</SCRIPT\> \n');
> > > }
> > > 
> > > function MainPreloader_DoFSCommand(command, args){
> > >   if (command == "messageBox"){
> > >     alert(args);
> > >     return true;
> > >   }
> > > 
> > >   if (command == "speak"){
> > >     VoiceObj.Speak(args, 3); //params = 3: 1 for asynch and 2 for 
> > > purge existing (see
> > > below)
> > >   }
> > > 
> > >   if (command == "resize"){ 
> > >     document.getElementById("sco").style.width = args.substr(0, 
> > > args.indexOf(","))+"px";
> > >     document.getElementById("sco").style.height = 
> > > args.substr(args.indexOf(",") + 1, args.length)+"px";
> > >   }
> > > 
> > >   if (command == "stopTTS"){
> > >     VoiceObj.Speak('', 2); //params 2 to purge existing voices
> > >   }
> > > }
> > > </script>
> > > 
> > > 
> > > <title>SCO Example</title>
> > > <body onload = "initialise();" onunload = "finish();" 
> > > style="margin:0">
> > >  
> > > <br><div align = "center">
> > > <script type="text/javascript" language="JavaScript">
> > > 
> > > function launchwin(winurl,winname,winfeatures){
> > >     //This launches a new window and then
> > >     //focuses it if window.focus() is supported.
> > >     newwin = window.open(winurl,winname,winfeatures);
> > > }
> > > 
> > > function getLocation(){
> > >   var loc = document.location.toString();
> > >   loc = loc.substr(0, loc.lastIndexOf('/') + 1);
> > >   return loc;
> > > }
> > > var FileLocation = getLocation();
> > > 
> > > rloFile = '25.rlo';
> > > rloWidth = 800;
> > > rloHeight = 600;
> > > scorm = 'true';
> > > browser = 'ie';
> > > </script>
> > > 
> > > <script type="text/javascript" src = "flash.js"></script>
> > > 
> > > <script name="APIWRapperFunctions" type="text/javascript">
> > > 
> > > var MainPreloader = document.getElementById("MainPreloader");
> > > 
> > > function initialise(){
> > >     //find and returns the API starting with this window
> > >    doLMSInitialize()
> > > }
> > > 
> > > function getValue(elementName){
> > >   var result = String(doLMSGetValue(elementName));
> > >   return result;
> > > }
> > > 
> > > function setValue(elementName, value){
> > >   var result = doLMSSetValue(elementName, value);
> > >   return result;
> > > }
> > > 
> > > function finish(){
> > >     doLMSFinish();
> > > }
> > > 
> > > </script>
> > > 
> > > </div>
> > > </body>
> > > </html>
> > > 
> > > **********************************************************+++
> > > **********************************************************
> > > APIWrapper.js
> > > ***********************************************************
> > > ***********************************************************
> > > 
> > > 
> /*******************************************************************
> > > ************
> > > **
> > > ** FileName: APIWrapper.js
> > > **
> > > 
> ********************************************************************
> > > ***********/
> > > 
> > > 
> /*******************************************************************
> > > ************
> > > **
> > > ** Concurrent Technologies Corporation (CTC) grants you 
> ("Licensee") 
> > > a non-
> > > ** exclusive, royalty free, license to use, modify and 
> redistribute 
> > > this
> > > ** software in source and binary code form, provided that i) this 
> > > copyright
> > > ** notice and license appear on all copies of the 
> software; and ii) 
> > > Licensee does
> > > ** not utilize the software in a manner which is 
> disparaging to CTC.
> > > **
> > > ** This software is provided "AS IS," without a warranty of any 
> > > kind.  ALL
> > > ** EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, 
> > > INCLUDING ANY
> > > ** IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR 
> > > PURPOSE OR NON-
> > > ** INFRINGEMENT, ARE HEREBY EXCLUDED.  CTC AND ITS 
> LICENSORS SHALL 
> > > NOT BE LIABLE
> > > ** FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, 
> > > MODIFYING OR
> > > ** DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES.  IN NO 
> EVENT WILL 
> > > CTC  OR ITS
> > > ** LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR 
> DATA, OR FOR 
> > > DIRECT,
> > > ** INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR 
> PUNITIVE DAMAGES, 
> > > HOWEVER
> > > ** CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, 
> ARISING OUT OF 
> > > THE USE OF
> > > ** OR INABILITY TO USE SOFTWARE, EVEN IF CTC  HAS BEEN ADVISED OF 
> > > THE POSSIBILITY
> > > ** OF SUCH DAMAGES.
> > > **
> > > 
> ********************************************************************
> > > ***********/
> > > 
> > > 
> /*******************************************************************
> > > ************
> > > ** This file is part of the ADL Sample API Implementation 
> intended 
> > > to provide
> > > ** an elementary example of the concepts presented in the ADL 
> > > Sharable
> > > ** Content Object Reference Model (SCORM).
> > > **
> > > ** The purpose in wrapping the calls to the API is to (1) 
> provide a
> > > ** consistent means of finding the LMS API implementation 
> within the 
> > > window
> > > ** hierarchy and (2) to validate that the data being 
> exchanged via 
> > > the
> > > ** API conforms to the defined CMI data types.
> > > **
> > > ** This is just one possible example for implementing the API 
> > > guidelines for
> > > ** runtime communication between an LMS and executable 
> content components.
> > > ** There are several other possible implementations.
> > > **
> > > ** Usage: Executable course content can call the API Wrapper
> > > **      functions as follows:
> > > **
> > > **    javascript:
> > > **          var result = doLMSInitialize();
> > > **          if (result != true) 
> > > **          {
> > > **             // handle error
> > > **          }
> > > **
> > > **    authorware
> > > **          result := ReadURL("javascript:doLMSInitialize()", 100)
> > > **
> > > 
> ********************************************************************
> > > ***********/
> > > 
> > > var _Debug = false;  // set this to false to turn debugging off
> > >                      // and get rid of those annoying alert boxes.
> > > 
> > > // Define exception/error codes
> > > var _NoError = 0;
> > > var _GeneralException = 101;
> > > var _ServerBusy = 102;
> > > var _InvalidArgumentError = 201;
> > > var _ElementCannotHaveChildren = 202; var _ElementIsNotAnArray = 
> > > 203; var _NotInitialized = 301; var _NotImplementedError 
> = 401; var 
> > > _InvalidSetValue = 402; var _ElementIsReadOnly = 403; var 
> > > _ElementIsWriteOnly = 404; var _IncorrectDataType = 405;
> > > 
> > > 
> > > // local variable definitions
> > > var apiHandle = null;
> > > var API = null;
> > > var findAPITries = 0;
> > > 
> > > 
> > > 
> /*******************************************************************
> > > ************
> > > **
> > > ** Function: doLMSInitialize()
> > > ** Inputs:  None
> > > ** Return:  CMIBoolean true if the initialization was 
> successful, or
> > > **          CMIBoolean false if the initialization failed.
> > > **
> > > ** Description:
> > > ** Initialize communication with LMS by calling the LMSInitialize
> > > ** function which will be implemented by the LMS.
> > > **
> > > 
> ********************************************************************
> > > ***********/
> > > function doLMSInitialize()
> > > {
> > >    var api = getAPIHandle();
> > >    if (api == null)
> > >    {
> > >       alert("Unable to locate the LMS's API 
> > > Implementation.\nLMSInitialize was not successful.");
> > >       return "false";
> > >    }
> > > 
> > >    var result = api.LMSInitialize("");
> > > 
> > >    if (result.toString() != "true")
> > >    {
> > >       var err = ErrorHandler();
> > >    }
> > > 
> > >    return result.toString();
> > > }
> > > 
> > > 
> /*******************************************************************
> > > ************
> > > **
> > > ** Function doLMSFinish()
> > > ** Inputs:  None
> > > ** Return:  CMIBoolean true if successful
> > > **          CMIBoolean false if failed.
> > > **
> > > ** Description:
> > > ** Close communication with LMS by calling the LMSFinish
> > > ** function which will be implemented by the LMS
> > > **
> > > 
> ********************************************************************
> > > ***********/
> > > function doLMSFinish()
> > > {
> > > 
> > >    var api = getAPIHandle();
> > >    if (api == null)
> > >    {
> > >       alert("Unable to locate the LMS's API 
> > > Implementation.\nLMSFinish was not successful.");
> > >       return "false";
> > >    }
> > >    else
> > >    {
> > >       // call the LMSFinish function that should be 
> implemented by 
> > > the API
> > > 
> > >       var result = api.LMSFinish("");
> > >       if (result.toString() != "true")
> > >       {
> > >          var err = ErrorHandler();
> > >       }
> > > 
> > >    }
> > > 
> > >    return result.toString();
> > > }
> > > 
> > > 
> /*******************************************************************
> > > ************
> > > **
> > > ** Function doLMSGetValue(name)
> > > ** Inputs:  name - string representing the cmi data model 
> defined category or
> > > **             element (e.g. cmi.core.student_id)
> > > ** Return:  The value presently assigned by the LMS to 
> the cmi data model
> > > **       element defined by the element or category 
> identified by the name
> > > **       input value.
> > > **
> > > ** Description:
> > > ** Wraps the call to the LMS LMSGetValue method
> > > **
> > > 
> ********************************************************************
> > > ***********/
> > > function doLMSGetValue(name)
> > > {
> > >    var api = getAPIHandle();
> > >    if (api == null)
> > >    {
> > >       alert("Unable to locate the LMS's API 
> > > Implementation.\nLMSGetValue was not successful.");
> > >       return "";
> > >    }
> > >    else
> > >    {
> > >       var value = api.LMSGetValue(name);
> > >       var errCode = api.LMSGetLastError().toString();
> > >       if (errCode != _NoError)
> > >       {
> > >          // an error was encountered so display the error 
> description
> > >          var errDescription = api.LMSGetErrorString(errCode);
> > >          alert("LMSGetValue("+name+") failed. \n"+ 
> errDescription);
> > >          return "";
> > >       }
> > >       else
> > >       {
> > >          
> > >          return value.toString();
> > >       }
> > >    }
> > > }
> > > 
> > > 
> /*******************************************************************
> > > ************
> > > **
> > > ** Function doLMSSetValue(name, value)
> > > ** Inputs:  name -string representing the data model 
> defined category or element
> > > **          value -the value that the named element or 
> category will be assigned
> > > ** Return:  CMIBoolean true if successful
> > > **          CMIBoolean false if failed.
> > > **
> > > ** Description:
> > > ** Wraps the call to the LMS LMSSetValue function
> > > **
> > > 
> ********************************************************************
> > > ***********/
> > > function doLMSSetValue(name, value)
> > > {
> > >    var api = getAPIHandle();
> > >    if (api == null)
> > >    {
> > >       alert("Unable to locate the LMS's API 
> > > Implementation.\nLMSSetValue was not successful.");
> > >       return;
> > >    }
> > >    else
> > >    {
> > >       var result = api.LMSSetValue(name, value);
> > >       if (result.toString() != "true")
> > >       {
> > >          var err = ErrorHandler();
> > >       }
> > >    }
> > > 
> > >    return;
> > > }
> > > 
> > > 
> /*******************************************************************
> > > ************
> > > **
> > > ** Function doLMSCommit()
> > > ** Inputs:  None
> > > ** Return:  None
> > > **
> > > ** Description:
> > > ** Call the LMSCommit function
> > > **
> > > 
> ********************************************************************
> > > ***********/
> > > function doLMSCommit()
> > > {
> > >    var api = getAPIHandle();
> > >    if (api == null)
> > >    {
> > >       alert("Unable to locate the LMS's API 
> > > Implementation.\nLMSCommit was not successful.");
> > >       return "false";
> > >    }
> > >    else
> > >    {
> > >       var result = api.LMSCommit("");
> > >       if (result != "true")
> > >       {
> > >          var err = ErrorHandler();
> > >       }
> > >    }
> > > 
> > >    return result.toString();
> > > }
> > > 
> > > 
> /*******************************************************************
> > > ************
> > > **
> > > ** Function doLMSGetLastError()
> > > ** Inputs:  None
> > > ** Return:  The error code that was set by the last LMS function 
> > > call
> > > **
> > > ** Description:
> > > ** Call the LMSGetLastError function
> > > **
> > > 
> ********************************************************************
> > > ***********/
> > > function doLMSGetLastError()
> > > {
> > >    var api = getAPIHandle();
> > >    if (api == null)
> > >    {
> > >       alert("Unable to locate the LMS's API 
> > > Implementation.\nLMSGetLastError was not successful.");
> > >       //since we can't get the error code from the LMS, 
> return a general error
> > >       return _GeneralError;
> > >    }
> > > 
> > >    return api.LMSGetLastError().toString(); }
> > > 
> > > 
> /*******************************************************************
> > > ************
> > > **
> > > ** Function doLMSGetErrorString(errorCode)
> > > ** Inputs:  errorCode - Error Code
> > > ** Return:  The textual description that corresponds to the input 
> > > error code
> > > **
> > > ** Description:
> > > ** Call the LMSGetErrorString function
> > > **
> > > 
> ********************************************************************
> > > ************/ function doLMSGetErrorString(errorCode) {
> > >    var api = getAPIHandle();
> > >    if (api == null)
> > >    {
> > >       alert("Unable to locate the LMS's API 
> > > Implementation.\nLMSGetErrorString was
> > not
> > > successful.");
> > >    }
> > > 
> > >    return api.LMSGetErrorString(errorCode).toString();
> > > }
> > > 
> > > 
> /*******************************************************************
> > > ************
> > > **
> > > ** Function doLMSGetDiagnostic(errorCode)
> > > ** Inputs:  errorCode - Error Code(integer format), or null
> > > ** Return:  The vendor specific textual description that 
> corresponds to the 
> > > **          input error code
> > > **
> > > ** Description:
> > > ** Call the LMSGetDiagnostic function
> > > **
> > > 
> ********************************************************************
> > > ***********/ function doLMSGetDiagnostic(errorCode) {
> > >    var api = getAPIHandle();
> > >    if (api == null)
> > >    {
> > >       alert("Unable to locate the LMS's API 
> > > Implementation.\nLMSGetDiagnostic was not successful.");
> > >    }
> > > 
> > >    return api.LMSGetDiagnostic(errorCode).toString();
> > > }
> > > 
> > > 
> /*******************************************************************
> > > ************
> > > **
> > > ** Function LMSIsInitialized()
> > > ** Inputs:  none
> > > ** Return:  true if the LMS API is currently initialized, 
> otherwise 
> > > false
> > > **
> > > ** Description:
> > > ** Determines if the LMS API is currently initialized or not.
> > > **
> > > 
> ********************************************************************
> > > ***********/
> > > function LMSIsInitialized()
> > > {
> > >    // there is no direct method for determining if the 
> LMS API is initialized
> > >    // for example an LMSIsInitialized function defined on 
> the API so we'll try
> > >    // a simple LMSGetValue and trap for the LMS Not Initialized 
> > > Error
> > > 
> > >    var api = getAPIHandle();
> > >    if (api == null)
> > >    {
> > >       alert("Unable to locate the LMS's API 
> > > Implementation.\nLMSIsInitialized()
> > > failed.");
> > >       return false;
> > >    }
> > >    else
> > >    {
> > >       var value = api.LMSGetValue("cmi.core.student_name");
> > >       var errCode = api.LMSGetLastError().toString();
> > >       if (errCode == _NotInitialized)
> > >       {
> > >          return false;
> > >       }
> > >       else
> > >       {
> > >          return true;
> > >       }
> > >    }
> > > }
> > > 
> > > 
> /*******************************************************************
> > > ************
> > > **
> > > ** Function ErrorHandler()
> > > ** Inputs:  None
> > > ** Return:  The current value of the LMS Error Code
> > > **
> > > ** Description:
> > > ** Determines if an error was encountered by the previous API call
> > > ** and if so, displays a message to the user.  If the error code
> > > ** has associated text it is also displayed.
> > > **
> > > 
> ********************************************************************
> > > ***********/
> > > function ErrorHandler()
> > > {
> > >    var api = getAPIHandle();
> > >    if (api == null)
> > >    {
> > >       alert("Unable to locate the LMS's API 
> Implementation.\nCannot 
> > > determine LMS
> > error
> > > code.");
> > >       return;
> > >    }
> > > 
> > >    // check for errors caused by or from the LMS
> > >    var errCode = api.LMSGetLastError().toString();
> > >    if (errCode != _NoError)
> > >    {
> > >       // an error was encountered so display the error description
> > >       var errDescription = api.LMSGetErrorString(errCode);
> > > 
> > >       if (_Debug == true)
> > >       {
> > >          errDescription += "\n";
> > >          errDescription += api.LMSGetDiagnostic(null);
> > >          // by passing null to LMSGetDiagnostic, we get 
> any available diagnostics
> > >          // on the previous error.
> > >       }
> > > 
> > >       alert(errDescription);
> > >    }
> > > 
> > >    return errCode;
> > > }
> > > 
> > > 
> /*******************************************************************
> > > ***********
> > > **
> > > ** Function getAPIHandle()
> > > ** Inputs:  None
> > > ** Return:  value contained by APIHandle
> > > **
> > > ** Description:
> > > ** Returns the handle to API object if it was previously set,
> > > ** otherwise it returns null
> > > **
> > > 
> ********************************************************************
> > > ***********/
> > > function getAPIHandle()
> > > {
> > >    if (apiHandle == null)
> > >    {
> > >       apiHandle = getAPI();
> > >    }
> > > 
> > >    return apiHandle;
> > > }
> > > 
> > > 
> > > 
> /*******************************************************************
> > > ************
> > > **
> > > ** Function findAPI(win)
> > > ** Inputs:  win - a Window Object
> > > ** Return:  If an API object is found, it's returned, 
> otherwise null 
> > > is returned
> > > **
> > > ** Description:
> > > ** This function looks for an object named API in parent 
> and opener 
> > > windows
> > > **
> > > 
> ********************************************************************
> > > ***********/
> > > function findAPI(win)
> > > {
> > >    while ((win.API == null) && (win.parent != null) && 
> (win.parent != win))
> > >    {
> > >       findAPITries++;
> > >       // Note: 7 is an arbitrary number, but should be 
> more than sufficient
> > >       if (findAPITries > 7) 
> > >       {
> > >          alert("Error finding API -- too deeply nested.");
> > >          return null;
> > >       }
> > >       
> > >       win = win.parent;
> > > 
> > >    }
> > >    return win.API;
> > > }
> > > 
> > > 
> > > 
> > > 
> /*******************************************************************
> > > ************
> > > **
> > > ** Function getAPI()
> > > ** Inputs:  none
> > > ** Return:  If an API object is found, it's returned, 
> otherwise null 
> > > is returned
> > > **
> > > ** Description:
> > > ** This function looks for an object named API, first in 
> the current 
> > > window's
> > > ** frame hierarchy and then, if necessary, in the current 
> window's 
> > > opener window
> > > ** hierarchy (if there is an opener window).
> > > **
> > > 
> ********************************************************************
> > > ***********/
> > > function getAPI()
> > > {
> > >    var theAPI = findAPI(window);
> > >    if ((theAPI == null) && (window.opener != null) && 
> > > (typeof(window.opener) !=
> > > "undefined"))
> > >    {
> > >       theAPI = findAPI(window.opener);
> > >    }
> > >    if (theAPI == null)
> > >    {
> > >       alert("Unable to find an API adapter");
> > >    }
> > >    return theAPI
> > > }
> > > 
> > > ***********************************************************++
> > > ***********************************************************
> > > flash.js
> > > ************************************************************
> > > *************************************************************
> > > document.writeln('<br>');
> > > document.writeln('<center><div id="sco" style="width:' + 
> rloWidth + 
> > > 'px; height:' + rloHeight + 'px;">'); document.writeln('<object 
> > > classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
> > >
> >
> Codebase="http://download.macromedia.com/pub/shockwave/cabs/fl
> ash/swflash.cab#version=8,0,0,0"
> > > WIDTH="100%" HEIGHT="100%" id="MainPreloader" ALIGN="middle">'); 
> > > document.writeln('<param name="movie" value="MainPreloader.swf" 
> > > />'); document.writeln('<param name="quality" value="high" />'); 
> > > document.writeln('<param name="scale" value="showAll" />'); 
> > > document.writeln('<param name="salign" value="T" />'); 
> > > document.writeln('<param name="bgcolor" value="#ffffff" />'); 
> > > document.writeln('<param name="allowScriptAccess" value="always" 
> > > />'); document.writeln('<param name="seamlessTabbing" value="0" 
> > > />'); document.writeln('<param name="flashVars" 
> value="File=' + rloFile + '&FileLocation='
> > +
> > > FileLocation + '&scorm=' + scorm + '&browser=' + browser 
> + '" />'); 
> > > document.writeln('<embed src="MainPreloader.swf" 
> allowScriptAccess="always"
> > > quality="high" scale="showAll" salign="T" 
> bgcolor="#ffffff"  WIDTH="100%"
> > HEIGHT="100%"
> > > NAME="MainPreloader" ALIGN="middle" 
> TYPE="application/x-shockwave-flash"
> > > PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer" 
> > > flashVars="File=' + rloFile
> > +
> > > '&FileLocation=' + FileLocation + '&scorm=' + scorm + 
> '&browser=' + 
> > > browser + '"/>'); document.writeln('</object>'); 
> > > document.writeln('</div></center>');
> > > 
> > > 
> > > 
> > > 
> > > 
> > > 
> > > --- Tenney Julian <Julian.Tenney at nottingham.ac.uk> escribió:
> > > 
> > > > That's useful info. In the log for 1.9 below, notice that 
> > > > LMSFinish is getting
> > called
> > > > before you set any data. Any idea why that is? Once 
> LMSFinish has 
> > > > been called,
> > there
> > > > can be no further communcation with the LMS.
> > > > 
> > > > I made a very simple two page file. In the first page 
> is nothing 
> > > > but a script icon
> > > with
> > > > this in it:
> > > > 
> > > > _level0.setValue('cmi.core.lesson_status', 'browsed');
> > > > 
> > > > And on the second page is this:
> > > > 
> > > > _level0.setValue('cmi.core.lesson_status', 'completed');
> > > > 
> > > > My log is here:
> > > > 
> > > > 
> > > >     SCO is searching for the API Adapter
> > > >     SCO was able to find the API Adapter
> > > >    
> > > >     LMSInitialize() has been invoked
> > > >     LMSInitialize() finished successfully
> > > > 
> > > >     LMSSetValue(cmi.core.lesson_status,browsed) has been invoked
> > > >     LMSSetValue() finished successfully
> > > > 
> > > >     LMSSetValue(cmi.core.lesson_status,completed) has 
> been invoked
> > > >     LMSSetValue() finished successfully
> > > > 
> > > >     LMSFinish() has been invoked --after I close the 
> SCO manually
> > > >     LMSFinish() finished successfully
> > > >    
> > > >     SCO is no longer initialized
> > > > 
> > > > We need to find out why your piece is calling 
> LMSFinish. My piece 
> > > > doesn't call it
> > > until
> > > > I close the SCO. Your piece appears to call it straight 
> away. In 
> > > > the web page, scormRLO.htm, can you put an 
> alert('finish') in the function finish like this:
> > > > 
> > > > function finish(){
> > > >   alert("finish called - communication will now quit");
> > > >   doLMSFinish();
> > > > }
> > > > 
> > > > And see when it gets called? The only code in the web page that 
> > > > will call finish()
> > is
> > > > the onunload handler in the body tag: are you unloading 
> that page in any way?
> > > > 
> > > > Julian
> > > > 
> > > > -----Original Message-----
> > > > From: xerte-bounces at lists.nottingham.ac.uk
> > > > [mailto:xerte-bounces at lists.nottingham.ac.uk] On Behalf 
> Of Martín 
> > > > Dobovsek
> > > > Sent: 04 February 2008 17:04
> > > > To: Xerte discussion list
> > > > Subject: RE: [Xerte] Scorm 1.2 packaged with Xerte 1.9 doesn´t 
> > > > comunicate with LMS
> > > > 
> > > > Tenney:
> > > > 
> > > > I uninstall and reinstall Xerte 1.9
> > > > 
> > > > I edit from scratch 2 (two) rlo with 2 pages, first one 
> with script:
> > > > 
> > > > Using Xerte 1.5
> > > > _level0.LMSSetValue("cmi.core.lesson_status", "browsed");
> > > > 
> > > > Using Xerte 1.9
> > > > _level0.setValue("cmi.core.lesson_status", "browsed");
> > > > 
> > > > 
> > > > Last page with script:
> > > > 
> > > > Using Xerte 1.5
> > > > _level0.LMSSetValue("cmi.core.lesson_status", "completed");
> > > > 
> > > > Using Xerte 1.9
> > > > _level0.setValue("cmi.core.lesson_status", "completed");
> > > > 
> > > > 
> > > > Compile each one with Xerte 1.9 and 1.5
> > > > 
> > > > Both SCO Tested using Advanced Distributed Learning 
> (ADL) Sharable 
> > > > Content Object Reference Model (SCORM®) Version 1.2 Test Suite 
> > > > Version 1.2.7 .
> > > > 
> > > > The result (see log below) shows no data transfer for 
> version 1.9
> > > > 
> > > > 
> > > > I use the Reload Scorm 1.2 Player ver. 1.2.1 to test 
> both SCO two 
> > > > : the same
> > result:
> > > > cmi.core.lesson_status doesn´t change using SCO compiled with 
> > > > Xertes 1.9
> > > > 
> > > > I tested Claroline 1.8.8 with ADL Test suite and was OK.
> > > > 
> > > > Thanks for your support
> > > > 
> > > > Martin
> > > > 
> > > > *********************************************
> > > > 
> > > > The result ADL log was:
> > > > 
> > > > Advanced Distributed Learning (ADL) Sharable Content Object 
> > > > Reference Model (SCORM®) Version 1.2 Test Suite Version 
> 1.2.7 Self 
> > > > Test Log
> > > >     Test Identification Information:
> > > >        Date: Lunes, 04 de Febrero de 2008 02:56:53 p.m.
> > > >        SCO Product: 
> > > >        SCO Version: 
> > > >        SCO Vendor/Developer: 
> > > >    
> > > >     Starting Self Test
> > > > 
> > > >     Loading the Sharable Content Object
> > > >     Attempting to Launch SCO
> > > >    file:///C:\15\scormRLO.htm            
> -------------------->>>>>> Xerte 1.5
> > > > 
> > > >     SCO is searching for the API Adapter
> > > >     SCO was able to find the API Adapter
> > > >    
> > > >     LMSInitialize() has been invoked
> > > >     LMSInitialize() finished successfully
> > > > 
> > > >     LMSGetValue(cmi.core.lesson_mode) has been invoked
> > > >     Value returned from LMS: [normal]
> > > >     LMSGetValue() finished successfully
> > > > 
> > > >     LMSGetValue(cmi.core.lesson_status) has been invoked
> > > >     Value returned from LMS: [not attempted]
> > > >     LMSGetValue() finished successfully
> > > > 
> > > >     LMSSetValue(cmi.core.lesson_status,incomplete) has 
> been invoked
> > > >     LMSSetValue() finished successfully
> > > > 
> > > >     LMSSetValue(cmi.core.session_time,0000:00:03.95) 
> has been invoked
> > > >     LMSSetValue() finished successfully
> > > > 
> > > >     LMSCommit() has been invoked
> > > >     LMSCommit() finished successfully
> > > > 
> > > >     LMSFinish() has been invoked
> > > >     LMSFinish() finished successfully
> > > >    
> > > >     SCO is no longer initialized
> > > > 
> > > >     SCORM 1.2 Run-Time Environment Conformant
> > > >           SCO-RTE1+Mandatory and Optional
> > > >     Features Supported:
> > > >     API Support
> > > >           Find an LMS provided API Adapter
> > > >           Execution State:
> > > >                 LMSInitialize()
> > > >                 LMSFinish()
> > > >           Data Transfer:
> > > >                 LMSGetValue()
> > > >                 LMSSetValue()
> > > >                 LMSCommit()
> > > >           State Management:
> > > >                    None Supported
> > > >     Data Model Support
> > > >           SCORM Run-Time Environment Data Model
> > > >                 cmi.core.lesson_mode
> > > >                 cmi.core.lesson_status
> > > >                 cmi.core.session_time
> > > >    
> > > >    ==========================================
> > > >    
> > > >     Loading the Sharable Content Object
> > > >     Attempting to Launch SCO: 
> > > >    file:///C:\19\scormRLO.htm         
> --------------------->>>>> XERTE 1.9
> > > > 
> > > >     SCO is searching for the API Adapter
> > > >     SCO was able to find the API Adapter
> > > >    
> > > >     LMSInitialize() has been invoked
> > > >     LMSInitialize() finished successfully
> > > > 
> > > >     LMSFinish() has been invoked
> > > >     LMSFinish() finished successfully
> > > >    
> > > >     SCO is no longer initialized
> > > > 
> > > >     SCORM 1.2 Run-Time Environment Conformant
> > > >           SCO-RTE1
> > > >     Features Supported:
> > > >     API Support
> > > >           Find an LMS provided API Adapter
> > > >           Execution State:
> > > >                 LMSInitialize()
> > > >                 LMSFinish()
> > > >           Data Transfer:
> > > >                    None Supported
> > > >           State Management:
> > > >                    None Supported
> > > >    
> > > >    ==========================================
> > > > 
> > > > 
> > > > 
> ******************************************************************
> > > > ********
> > > > 
> > > > 
> > > > 
> > > > 
> > > > 
> > > > 
> > > > --- Tenney Julian <Julian.Tenney at nottingham.ac.uk> escribió:
> > > > 
> > > > > I'm getting it working fine in the ADL test suite 1.2.7.
> > > > > 
> > > > > Did you re-package the file from scratch?
> > > > > 
> > > > > -----Original Message-----
> > > > > From: xerte-bounces at lists.nottingham.ac.uk
> > > > > [mailto:xerte-bounces at lists.nottingham.ac.uk] On Behalf Of 
> > > > > Martín Dobovsek
> > > > > Sent: 04 February 2008 12:16
> > > > > To: Xerte discussion list
> > > > > Subject: RE: [Xerte] Scorm 1.2 packaged with Xerte 
> 1.9 doesn´t 
> > > > > comunicate with
> > LMS
> > > > > 
> > > > > Julian:
> > > > > 
> > > > > I changed the pages to
> > > > > 
> > > > > _level0.setValue("cmi.core.lesson_status", "browsed"); 
> > > > > _level0.setValue("cmi.core.lesson_status", "completed");
> > > > > 
> > > > > Now the words "setValue" appears in blue in the Xerte editor.
> > > > > 
> > > > > In the LMS (Claroline 1.8.8) the status remain unchanged (NOT 
> > > > > ATTEMPTED). It
> > seems
> > > > the
> > > > > problem persists.
> > > > > 
> > > > > Thanks for support
> > > > > 
> > > > > Martin
> > > > > 
> > > > > 
> > > > > --- Tenney Julian <Julian.Tenney at nottingham.ac.uk> escribió:
> > > > > 
> > > > > > I changed the implementation to make it consistent with the 
> > > > > > implementation of
> > the
> > > > > SCORM
> > > > > > 2004 in Xerte. Try using these functions:
> > > > > > 
> > > > > > _level0.getValue(dataElement); 
> _level0.setValue(dataElement, 
> > > > > > value);
> > > > > > 
> > > > > > Julian
> > > > > > 
> > > > > >  
> > > > > > 
> > > > > > -----Original Message-----
> > > > > > From: xerte-bounces at lists.nottingham.ac.uk
> > > > > > [mailto:xerte-bounces at lists.nottingham.ac.uk] On Behalf Of 
> > > > > > Martín Dobovsek
> > > > > > Sent: 04 February 2008 10:07
> > > > > > To: xerte at lists.nottingham.ac.uk
> > > > > > Subject: [Xerte] Scorm 1.2 packaged with Xerte 1.9 doesn´t 
> > > > > > comunicate with LMS
> > > > > > 
> > > > > > Julian:
> > > > > > 
> > > > > > Scorm 1.2 packages made with Xerte 1.9 (downloaded 
> > > > > > 04/02/02008) doesn´t
> > > communicate
> > > > > > with
> > > > > > LMS.
> > > > > > 
> > > > > > I use
> > > > > > 
> > > > > > _level0.LMSSetValue("cmi.core.lesson_status", "completed");
> > > > > > 
> > > > > > in the last page to change the status in the system.
> > > > > > 
> > > > > > The same .rlo file compiled with Xertes 1.5 
> function OK: the 
> > > > > > status is well
> > > changed
> > > > > in
> > > > > > the LMS.
> > > > > > 
> > > > > > Thanks for support
> > > > > > 
> > > > > > Martin
> > > > > > 
> > > > > > 
> > > > > > 
> > > > > >       Tarjeta de crédito Yahoo! de Banco Supervielle.
> > > > > > Solicitá tu nueva Tarjeta de crédito. De tu PC 
> directo a tu casa.
> > > > > > www.tuprimeratarjeta.com.ar
> > > > > > _______________________________________________
> > > > > > Xerte mailing list
> > > > > > Xerte at lists.nottingham.ac.uk
> > > > > > http://lists.nottingham.ac.uk/mailman/listinfo/xerte
> > > > > > _______________________________________________
> > > > > > Xerte mailing list
> > > > > > Xerte at lists.nottingham.ac.uk
> > > > > > http://lists.nottingham.ac.uk/mailman/listinfo/xerte
> > > > > > 
> > > > > 
> > > > > 
> > > > > 
> > > > >       Tarjeta de crédito Yahoo! de Banco Supervielle.
> > > > > Solicitá tu nueva Tarjeta de crédito. De tu PC 
> directo a tu casa.
> > > > > www.tuprimeratarjeta.com.ar
> > > > > _______________________________________________
> > > > > Xerte mailing list
> > > > > Xerte at lists.nottingham.ac.uk
> > > > > http://lists.nottingham.ac.uk/mailman/listinfo/xerte
> > > > > _______________________________________________
> > > > > Xerte mailing list
> > > > > Xerte at lists.nottingham.ac.uk
> > > > > http://lists.nottingham.ac.uk/mailman/listinfo/xerte
> > > > > 
> > > > 
> > > > 
> > > > 
> > > >       Yahoo! Encuentros.
> > > > 
> > > > Ahora encontrar pareja es mucho más fácil, probá el 
> nuevo Yahoo! 
> > > > Encuentros 
> http://yahoo.cupidovirtual.com/servlet/NewRegistration
> > > > _______________________________________________
> > > > Xerte mailing list
> > > > Xerte at lists.nottingham.ac.uk
> > > > http://lists.nottingham.ac.uk/mailman/listinfo/xerte
> > > > _______________________________________________
> > > > Xerte mailing list
> > > > Xerte at lists.nottingham.ac.uk
> > > > http://lists.nottingham.ac.uk/mailman/listinfo/xerte
> > > > 
> > > 
> > > 
> > > 
> > >       Tarjeta de crédito Yahoo! de Banco Supervielle.
> > > Solicitá tu nueva Tarjeta de crédito. De tu PC directo a tu casa.
> > > www.tuprimeratarjeta.com.ar
> > > _______________________________________________
> > > Xerte mailing list
> > > Xerte at lists.nottingham.ac.uk
> > > http://lists.nottingham.ac.uk/mailman/listinfo/xerte
> > > _______________________________________________
> > > Xerte mailing list
> > > Xerte at lists.nottingham.ac.uk
> > > http://lists.nottingham.ac.uk/mailman/listinfo/xerte
> > > 
> > 
> > 
> > 
> >       Yahoo! Encuentros.
> > 
> > Ahora encontrar pareja es mucho más fácil, probá el nuevo Yahoo! 
> > Encuentros http://yahoo.cupidovirtual.com/servlet/NewRegistration
> > _______________________________________________
> > Xerte mailing list
> > Xerte at lists.nottingham.ac.uk
> > http://lists.nottingham.ac.uk/mailman/listinfo/xerte
> > _______________________________________________
> > Xerte mailing list
> > Xerte at lists.nottingham.ac.uk
> > http://lists.nottingham.ac.uk/mailman/listinfo/xerte
> > 
> 
> 
> 
>       Tarjeta de crédito Yahoo! de Banco Supervielle.
> Solicitá tu nueva Tarjeta de crédito. De tu PC directo a tu 
> casa. www.tuprimeratarjeta.com.ar 
> _______________________________________________
> Xerte mailing list
> Xerte at lists.nottingham.ac.uk
> http://lists.nottingham.ac.uk/mailman/listinfo/xerte
> 
> 



More information about the Xerte mailing list