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

Tenney Julian Julian.Tenney at nottingham.ac.uk
Wed Feb 6 08:56:12 GMT 2008


What version of the Flash Player have you got? ExternalInterface needs version 8 or higher... 

-----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 17:20
To: Xerte discussion list
Subject: RE: [Xerte] Scorm 1.2 packaged with Xerte 1.9 doesn´t comunicate with LMS

Tenney:

Thanks for your kind support!

I used your file.

In my LMS time and COMPLETED or BROWSED not informed. (same as before)

I use demo Claroline to change servers (i use the same last version in my site)

http://www.claroline.net/demo/claroline180/claroline/learnPath/learningPathList.php?cmd=delete&del_path_id=1


The results are the same as in my server: nothing change in the lesson status nor lesson
time

Here si my local ADL test suit report:

    Test Identification Information:
       Date: Martes, 05 de Febrero de 2008 03:08:19 p.m.
       SCO Product: 
       SCO Version: 
       SCO Vendor/Developer: 
   
    Starting Self Test

    Loading the Sharable Content Object
    Attempting to Launch SCO
   file:///C:\ADL\TestSuite1_2_7\TestSuite\LMSRTE\Courses\scoTest\scormRLO.htm

    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.session_time,0000:00:22) has been invoked
    LMSSetValue() finished successfully

    LMSFinish() has been invoked
    LMSFinish() finished successfully
   
    SCO is no longer initialized

    SCORM 1.2 Run-Time Environment Conformant
          SCO-RTE1+Mandatory
    Features Supported:
    API Support
          Find an LMS provided API Adapter
          Execution State:
                LMSInitialize()
                LMSFinish()
          Data Transfer:
                LMSSetValue()
          State Management:
                   None Supported
    Data Model Support
          SCORM Run-Time Environment Data Model
                cmi.core.session_time



It seems, in my case for this moment i need to edit rlo using Xerte 1.10 then package and
export using Xerte 1.5 changing the scripts to the new sintaxis. I will investigate about
flash permissions. I use administrator account in my PC.

Excelent tool to write flash and e-learning content!. This problem seems not important
against the value of this kind of tool.

Best regards.

Martin




    Test Identification Information:
       Date: Martes, 05 de Febrero de 2008 03:08:19 p.m.
       SCO Product: 
       SCO Version: 
       SCO Vendor/Developer: 
   
    Starting Self Test

    Loading the Sharable Content Object
    Attempting to Launch SCO
   file:///C:\ADL\TestSuite1_2_7\TestSuite\LMSRTE\Courses\scoTest\scormRLO.htm

    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.session_time,0000:00:22) has been invoked
    LMSSetValue() finished successfully

    LMSFinish() has been invoked
    LMSFinish() finished successfully
   
    SCO is no longer initialized

    SCORM 1.2 Run-Time Environment Conformant
          SCO-RTE1+Mandatory
    Features Supported:
    API Support
          Find an LMS provided API Adapter
          Execution State:
                LMSInitialize()
                LMSFinish()
          Data Transfer:
                LMSSetValue()
          State Management:
                   None Supported
    Data Model Support
          SCORM Run-Time Environment Data Model
                cmi.core.session_time











--- Tenney Julian <Julian.Tenney at nottingham.ac.uk> escribió:

> Download this file, unzip it and run it in your test suite:
> 
> It works fine for me in the test suite, and it includes the session_time stuff in the
> APIWrapper.js. If it doesn't work for you, then the problem is not with Xerte. It must
> be something else.
> 
> http://www.nottingham.ac.uk/~cczjrt/scoTest.zip
> 
> Does your file work when uploaded into an LMS? It might be that local security settings
> are causing a problem.
> 
> I'm not sure how I can help further. Try googling for 'security settings
> externalInterface fails' and see if that leads anywhere. The old files (1.5) used
> fscommand. The new files use ExternalInterface (because it's cross platform). Maybe you
> need certain security settings in the flash player to allow ExternalInterface to call
> .js functions on your local machine. If you access the content as a normal user would
> (i.e. through the LMS itself) does it work?
> 
> Are you trusting local folders for development? Look here: you should trust a drive or
> folder you develop in - perhaps that's it:
> 
>
http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.html
> 
> 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: 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/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
> _______________________________________________
> 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