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 12:24:27 GMT 2008


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 


More information about the Xerte mailing list