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

Martín Dobovsek mdobovsek at yahoo.com.ar
Tue Feb 5 13:43:08 GMT 2008


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/flash/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


More information about the Xerte mailing list