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 16:52:07 GMT 2008
Explorer 6
Windows XP Sp2
Best regards
Martin
--- Tenney Julian <Julian.Tenney at nottingham.ac.uk> escribió:
> What browser and operating system are you using?
>
> -----Original Message-----
> From: xerte-bounces at lists.nottingham.ac.uk
> [mailto:xerte-bounces at lists.nottingham.ac.uk] On Behalf Of Martín Dobovsek
> Sent: 05 February 2008 13:43
> To: Xerte discussion list
> Subject: RE: [Xerte] Scorm 1.2 packaged with Xerte 1.9 doesn´t comunicate with LMS
>
> Tenney:
>
> I just downloaded ver. 1.10 from site, uninstall ver. 1.9 and install 1.10
>
> I do from scratch the file with two pages and hack scormRLO. htm to see whether pushing
> buttons appears the alert for setValue. Scorm version 1.2
>
> No luck
>
> MainPreloader.swf modif. date 15/01/08
>
> I was looking the .js files to find timing calculation as in the old 1.5 scormRLO.htm
> (which uses // FS SCORM - fscommand adapter for ADL SCORM 1.2) and couldn´t find it
> too.
>
> Well.
> It seems is a litle more complex as i think before.
>
> Very thanks for support
>
> Martin
>
>
> --- Tenney Julian <Julian.Tenney at nottingham.ac.uk> escribió:
>
> > The correct sysntax is
> >
> > _level0.setValue(dataModelElement, value);
> >
> > So this is correct:
> >
> > _level0.setValue('cmi.core.lesson_status', 'completed');
> >
> > Let's find out whether there is a problem communicating between Flash and the html
> > page. If you put an alert in the javascript function for setvalue, do you see it when
> > you click your buttons to set the values?
> >
> > I do. I don't know why you don't. Do you have the latest MainPreloader.swf?
> >
> > -----Original Message-----
> > From: xerte-bounces at lists.nottingham.ac.uk
> > [mailto:xerte-bounces at lists.nottingham.ac.uk] On Behalf Of Martín Dobovsek
> > Sent: 05 February 2008 12:24
> > To: Xerte discussion list
> > Subject: RE: [Xerte] Scorm 1.2 packaged with Xerte 1.9 doesn´t comunicate with LMS
> >
> > Tenney:
> >
> > My LMSFinish() has been invoked --after I close the SCO manually as you.
> > Confirmation with your added script.
> >
> >
> > Please confirm sintax:
> >
> > Version Xerte 1.5
> >
> > _level0.LMSSetValue("cmi.core.lesson_status", "completed");
> >
> > Version Xerte 1.9
> >
> > _level0.setValue('cmi.core.lesson_status', 'completed');
> >
> > There are differences in command sintax and quotes.
> >
> > I test both and nothing changes.
> >
> > It seems that there isn´t comunicacion between flash and html.
> >
> > Both functions (LMSInitialize() and LMSFinish() are called from html (onload and
> > onunload) and the problem is when calling functions during events inside flash. Below
> > are
> > used files.
> >
> > Using this .rlo I got the same results old in the ADL test log (status do not change)
> >
> > Best regards and thanks for support
> >
> > Martin
> >
> > *******************************************
> > .rlo: 2 pages with 2 pages and interaction buttons to test data sending
> >
> >
> > <LO name="Learning Object">
> > <IFC name="Interface" title="My Learning Object" visuals="1">
> > <PG name="[Untitled]" title="Page Title" help="Page Help">
> > <INT name="[Untitled]" perpetual="0">
> > <RES name="[Untitled]" type="button" x="0" y="0" label="browsed" erase="1"
> > exit="0">
> > <SCR name="[Untitled]"><![CDATA[_level0.setValue('cmi.core.lesson_status',
> > 'browsed');]]></SCR>
> > <DIS name="[Untitled]" x="400" y="0" w="400" h="10"
> type="text"><![CDATA[browsed
> > ]]></DIS>
> > </RES>
> > </INT>
> > </PG>
> > <PG name="[Untitled]" title="Page Title" help="Page Help">
> > <INT name="[Untitled]" perpetual="0">
> > <RES name="[Untitled]" type="button" x="0" y="0" label="completed" erase="1"
> > exit="0">
> > <SCR name="[Untitled]"><![CDATA[_level0.setValue('cmi.core.lesson_status',
> > 'completed');]]></SCR>
> > <DIS name="[Untitled]" x="200" y="0" w="400" h="10"
> > type="text"><![CDATA[completed]]></DIS>
> > </RES>
> > </INT>
> > </PG>
> > </IFC>
> > <BIN name="Deleted Items" />
> > </LO>
> >
> > *******************************************
> > *******************************************
> > scormRLO.htm
> >
> > ********************************************
> > *******************************************
> > <html>
> > <head>
> > <script type="text/javascript" src="apiwrapper.js"></script>
> >
> > <script type="text/javascript">
> > if (navigator.appName && navigator.appName.indexOf("Microsoft") != -1 &&
> > navigator.userAgent.indexOf("Windows") != -1 && navigator.userAgent.indexOf("Windows
> > 3.1") == -1){
> > document.write('<SCRIPT LANGUAGE=VBScript\> \n');
> > document.write('on error resume next \n');
> > document.write('Sub MainPreloader_FSCommand(ByVal command, ByVal args)\n');
> > document.write(' call MainPreloader_DoFSCommand(command, args)\n');
> > document.write('end sub\n');
> > document.write('</SCRIPT\> \n');
> > }
> >
> > function MainPreloader_DoFSCommand(command, args){
> > if (command == "messageBox"){
> > alert(args);
> > return true;
> > }
> >
> > if (command == "speak"){
> > VoiceObj.Speak(args, 3); //params = 3: 1 for asynch and 2 for purge existing (see
> > below)
> > }
> >
> > if (command == "resize"){
> > document.getElementById("sco").style.width = args.substr(0,
> > args.indexOf(","))+"px";
> > document.getElementById("sco").style.height = args.substr(args.indexOf(",") + 1,
> > args.length)+"px";
> > }
> >
> > if (command == "stopTTS"){
> > VoiceObj.Speak('', 2); //params 2 to purge existing voices
> > }
> > }
> > </script>
> >
> >
> > <title>SCO Example</title>
> > <body onload = "initialise();" onunload = "finish();" style="margin:0">
> >
> > <br><div align = "center">
> > <script type="text/javascript" language="JavaScript">
> >
> > function launchwin(winurl,winname,winfeatures){
> > //This launches a new window and then
> > //focuses it if window.focus() is supported.
> > newwin = window.open(winurl,winname,winfeatures);
> > }
> >
> > function getLocation(){
> > var loc = document.location.toString();
> > loc = loc.substr(0, loc.lastIndexOf('/') + 1);
> > return loc;
> > }
> > var FileLocation = getLocation();
> >
> > rloFile = '25.rlo';
> > rloWidth = 800;
> > rloHeight = 600;
> > scorm = 'true';
> > browser = 'ie';
> > </script>
> >
> > <script type="text/javascript" src = "flash.js"></script>
> >
> > <script name="APIWRapperFunctions" type="text/javascript">
> >
> > var MainPreloader = document.getElementById("MainPreloader");
> >
> > function initialise(){
> > //find and returns the API starting with this window
> > doLMSInitialize()
> > }
> >
> > function getValue(elementName){
> > var result = String(doLMSGetValue(elementName));
> > return result;
> > }
> >
> > function setValue(elementName, value){
> > var result = doLMSSetValue(elementName, value);
> > return result;
> > }
> >
> > function finish(){
> > doLMSFinish();
> > }
> >
> > </script>
> >
> > </div>
> > </body>
> > </html>
> >
> > **********************************************************+++
> > **********************************************************
> > APIWrapper.js
> > ***********************************************************
> > ***********************************************************
> >
> > /*******************************************************************************
> > **
> > ** FileName: APIWrapper.js
> > **
> > *******************************************************************************/
> >
> > /*******************************************************************************
> > **
> > ** Concurrent Technologies Corporation (CTC) grants you ("Licensee") a non-
> > ** exclusive, royalty free, license to use, modify and redistribute this
> > ** software in source and binary code form, provided that i) this copyright
> > ** notice and license appear on all copies of the software; and ii) Licensee does
> > ** not utilize the software in a manner which is disparaging to CTC.
> > **
> > ** This software is provided "AS IS," without a warranty of any kind. ALL
> > ** EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY
> > ** IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NON-
> > ** INFRINGEMENT, ARE HEREBY EXCLUDED. CTC AND ITS LICENSORS SHALL NOT BE LIABLE
> > ** FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
> > ** DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL CTC OR ITS
> > ** LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,
> > ** INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
> > ** CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF
> > ** OR INABILITY TO USE SOFTWARE, EVEN IF CTC HAS BEEN ADVISED OF THE POSSIBILITY
> > ** OF SUCH DAMAGES.
> > **
> > *******************************************************************************/
> >
> > /*******************************************************************************
> > ** This file is part of the ADL Sample API Implementation intended to provide
> > ** an elementary example of the concepts presented in the ADL Sharable
> > ** Content Object Reference Model (SCORM).
> > **
> > ** The purpose in wrapping the calls to the API is to (1) provide a
> > ** consistent means of finding the LMS API implementation within the window
> > ** hierarchy and (2) to validate that the data being exchanged via the
> > ** API conforms to the defined CMI data types.
> > **
> > ** This is just one possible example for implementing the API guidelines for
> > ** runtime communication between an LMS and executable content components.
> > ** There are several other possible implementations.
> > **
> > ** Usage: Executable course content can call the API Wrapper
> > ** functions as follows:
> > **
> > ** javascript:
> > ** var result = doLMSInitialize();
> > ** if (result != true)
> > ** {
> > ** // handle error
> > ** }
> > **
> > ** authorware
> > ** result := ReadURL("javascript:doLMSInitialize()", 100)
> > **
> > *******************************************************************************/
> >
> > var _Debug = false; // set this to false to turn debugging off
> > // and get rid of those annoying alert boxes.
> >
> > // Define exception/error codes
> > var _NoError = 0;
> > var _GeneralException = 101;
> > var _ServerBusy = 102;
> > var _InvalidArgumentError = 201;
> > var _ElementCannotHaveChildren = 202;
> > var _ElementIsNotAnArray = 203;
> > var _NotInitialized = 301;
> > var _NotImplementedError = 401;
> > var _InvalidSetValue = 402;
> > var _ElementIsReadOnly = 403;
> > var _ElementIsWriteOnly = 404;
> > var _IncorrectDataType = 405;
> >
> >
> > // local variable definitions
> > var apiHandle = null;
> > var API = null;
> > var findAPITries = 0;
> >
> >
> > /*******************************************************************************
> > **
> > ** Function: doLMSInitialize()
> > ** Inputs: None
> > ** Return: CMIBoolean true if the initialization was successful, or
> > ** CMIBoolean false if the initialization failed.
> > **
> > ** Description:
> > ** Initialize communication with LMS by calling the LMSInitialize
> > ** function which will be implemented by the LMS.
> > **
> > *******************************************************************************/
> > function doLMSInitialize()
> > {
> > var api = getAPIHandle();
> > if (api == null)
> > {
> > alert("Unable to locate the LMS's API Implementation.\nLMSInitialize was not
> > successful.");
> > return "false";
> > }
> >
> > var result = api.LMSInitialize("");
> >
> > if (result.toString() != "true")
> > {
> > var err = ErrorHandler();
> > }
> >
> > return result.toString();
> > }
> >
> > /*******************************************************************************
> > **
> > ** Function doLMSFinish()
> > ** Inputs: None
> > ** Return: CMIBoolean true if successful
> > ** CMIBoolean false if failed.
> > **
> > ** Description:
> > ** Close communication with LMS by calling the LMSFinish
> > ** function which will be implemented by the LMS
> > **
> > *******************************************************************************/
> > function doLMSFinish()
> > {
> >
> > var api = getAPIHandle();
> > if (api == null)
> > {
> > alert("Unable to locate the LMS's API Implementation.\nLMSFinish was not
> > successful.");
> > return "false";
> > }
> > else
> > {
> > // call the LMSFinish function that should be implemented by the API
> >
> > var result = api.LMSFinish("");
> > if (result.toString() != "true")
> > {
> > var err = ErrorHandler();
> > }
> >
> > }
> >
> > return result.toString();
> > }
> >
> > /*******************************************************************************
> > **
> > ** Function doLMSGetValue(name)
> > ** Inputs: name - string representing the cmi data model defined category or
> > ** element (e.g. cmi.core.student_id)
> > ** Return: The value presently assigned by the LMS to the cmi data model
> > ** element defined by the element or category identified by the name
> > ** input value.
> > **
> > ** Description:
> > ** Wraps the call to the LMS LMSGetValue method
> > **
> > *******************************************************************************/
> > function doLMSGetValue(name)
> > {
> > var api = getAPIHandle();
> > if (api == null)
> > {
> > alert("Unable to locate the LMS's API Implementation.\nLMSGetValue was not
> > successful.");
> > return "";
> > }
> > else
> > {
> > var value = api.LMSGetValue(name);
> > var errCode = api.LMSGetLastError().toString();
> > if (errCode != _NoError)
> > {
> > // an error was encountered so display the error description
> > var errDescription = api.LMSGetErrorString(errCode);
> > alert("LMSGetValue("+name+") failed. \n"+ errDescription);
> > return "";
> > }
> > else
> > {
> >
> > return value.toString();
> > }
> > }
> > }
> >
> > /*******************************************************************************
> > **
> > ** Function doLMSSetValue(name, value)
> > ** Inputs: name -string representing the data model defined category or element
> > ** value -the value that the named element or category will be assigned
> > ** Return: CMIBoolean true if successful
> > ** CMIBoolean false if failed.
> > **
> > ** Description:
> > ** Wraps the call to the LMS LMSSetValue function
> > **
> > *******************************************************************************/
> > function doLMSSetValue(name, value)
> > {
> > var api = getAPIHandle();
> > if (api == null)
> > {
> > alert("Unable to locate the LMS's API Implementation.\nLMSSetValue was not
> > successful.");
> > return;
> > }
> > else
> > {
> > var result = api.LMSSetValue(name, value);
> > if (result.toString() != "true")
> > {
> > var err = ErrorHandler();
> > }
> > }
> >
> > return;
> > }
> >
> > /*******************************************************************************
> > **
> > ** Function doLMSCommit()
> > ** Inputs: None
> > ** Return: None
> > **
> > ** Description:
> > ** Call the LMSCommit function
> > **
> > *******************************************************************************/
> > function doLMSCommit()
> > {
> > var api = getAPIHandle();
> > if (api == null)
> > {
> > alert("Unable to locate the LMS's API Implementation.\nLMSCommit was not
> > successful.");
> > return "false";
> > }
> > else
> > {
> > var result = api.LMSCommit("");
> > if (result != "true")
> > {
> > var err = ErrorHandler();
> > }
> > }
> >
> > return result.toString();
> > }
> >
> > /*******************************************************************************
> > **
> > ** Function doLMSGetLastError()
> > ** Inputs: None
> > ** Return: The error code that was set by the last LMS function call
> > **
> > ** Description:
> > ** Call the LMSGetLastError function
> > **
> > *******************************************************************************/
> > function doLMSGetLastError()
> > {
> > var api = getAPIHandle();
> > if (api == null)
> > {
> > alert("Unable to locate the LMS's API Implementation.\nLMSGetLastError was not
> > successful.");
> > //since we can't get the error code from the LMS, return a general error
> > return _GeneralError;
> > }
> >
> > return api.LMSGetLastError().toString();
> > }
> >
> > /*******************************************************************************
> > **
> > ** Function doLMSGetErrorString(errorCode)
> > ** Inputs: errorCode - Error Code
> > ** Return: The textual description that corresponds to the input error code
> > **
> > ** Description:
> > ** Call the LMSGetErrorString function
> > **
> > ********************************************************************************/
> > function doLMSGetErrorString(errorCode)
> > {
> > var api = getAPIHandle();
> > if (api == null)
> > {
> > alert("Unable to locate the LMS's API Implementation.\nLMSGetErrorString was
> not
> > successful.");
> > }
> >
> > return api.LMSGetErrorString(errorCode).toString();
> > }
> >
> > /*******************************************************************************
> > **
> > ** Function doLMSGetDiagnostic(errorCode)
> > ** Inputs: errorCode - Error Code(integer format), or null
> > ** Return: The vendor specific textual description that corresponds to the
> > ** input error code
> > **
> > ** Description:
> > ** Call the LMSGetDiagnostic function
> > **
> > *******************************************************************************/
> > function doLMSGetDiagnostic(errorCode)
> > {
> > var api = getAPIHandle();
> > if (api == null)
> > {
> > alert("Unable to locate the LMS's API Implementation.\nLMSGetDiagnostic was not
> > successful.");
> > }
> >
> > return api.LMSGetDiagnostic(errorCode).toString();
> > }
> >
> > /*******************************************************************************
> > **
> > ** Function LMSIsInitialized()
> > ** Inputs: none
> > ** Return: true if the LMS API is currently initialized, otherwise false
> > **
> > ** Description:
> > ** Determines if the LMS API is currently initialized or not.
> > **
> > *******************************************************************************/
> > function LMSIsInitialized()
> > {
> > // there is no direct method for determining if the LMS API is initialized
> > // for example an LMSIsInitialized function defined on the API so we'll try
> > // a simple LMSGetValue and trap for the LMS Not Initialized Error
> >
> > var api = getAPIHandle();
> > if (api == null)
> > {
> > alert("Unable to locate the LMS's API Implementation.\nLMSIsInitialized()
> > failed.");
> > return false;
> > }
> > else
> > {
> > var value = api.LMSGetValue("cmi.core.student_name");
> > var errCode = api.LMSGetLastError().toString();
> > if (errCode == _NotInitialized)
> > {
> > return false;
> > }
> > else
> > {
> > return true;
> > }
> > }
> > }
> >
> > /*******************************************************************************
> > **
> > ** Function ErrorHandler()
> > ** Inputs: None
> > ** Return: The current value of the LMS Error Code
> > **
> > ** Description:
> > ** Determines if an error was encountered by the previous API call
> > ** and if so, displays a message to the user. If the error code
> > ** has associated text it is also displayed.
> > **
> > *******************************************************************************/
> > function ErrorHandler()
> > {
> > var api = getAPIHandle();
> > if (api == null)
> > {
> > alert("Unable to locate the LMS's API Implementation.\nCannot determine LMS
> error
> > code.");
> > return;
> > }
> >
> > // check for errors caused by or from the LMS
> > var errCode = api.LMSGetLastError().toString();
> > if (errCode != _NoError)
> > {
> > // an error was encountered so display the error description
> > var errDescription = api.LMSGetErrorString(errCode);
> >
> > if (_Debug == true)
> > {
> > errDescription += "\n";
> > errDescription += api.LMSGetDiagnostic(null);
> > // by passing null to LMSGetDiagnostic, we get any available diagnostics
> > // on the previous error.
> > }
> >
> > alert(errDescription);
> > }
> >
> > return errCode;
> > }
> >
> > /******************************************************************************
> > **
> > ** Function getAPIHandle()
> > ** Inputs: None
> > ** Return: value contained by APIHandle
> > **
> > ** Description:
> > ** Returns the handle to API object if it was previously set,
> > ** otherwise it returns null
> > **
> > *******************************************************************************/
> > function getAPIHandle()
> > {
> > if (apiHandle == null)
> > {
> > apiHandle = getAPI();
> > }
> >
> > return apiHandle;
> > }
> >
> >
> > /*******************************************************************************
> > **
> > ** Function findAPI(win)
> > ** Inputs: win - a Window Object
> > ** Return: If an API object is found, it's returned, otherwise null is returned
> > **
> > ** Description:
> > ** This function looks for an object named API in parent and opener windows
> > **
> > *******************************************************************************/
> > function findAPI(win)
> > {
> > while ((win.API == null) && (win.parent != null) && (win.parent != win))
> > {
> > findAPITries++;
> > // Note: 7 is an arbitrary number, but should be more than sufficient
> > if (findAPITries > 7)
> > {
> > alert("Error finding API -- too deeply nested.");
> > return null;
> > }
> >
> > win = win.parent;
> >
> > }
> > return win.API;
> > }
> >
> >
> >
> > /*******************************************************************************
> > **
> > ** Function getAPI()
> > ** Inputs: none
> > ** Return: If an API object is found, it's returned, otherwise null is returned
> > **
> > ** Description:
> > ** This function looks for an object named API, first in the current window's
> > ** frame hierarchy and then, if necessary, in the current window's opener window
> > ** hierarchy (if there is an opener window).
> > **
> > *******************************************************************************/
> > function getAPI()
> > {
> > var theAPI = findAPI(window);
> > if ((theAPI == null) && (window.opener != null) && (typeof(window.opener) !=
> > "undefined"))
> > {
> > theAPI = findAPI(window.opener);
> > }
> > if (theAPI == null)
> > {
> > alert("Unable to find an API adapter");
> > }
> > return theAPI
> > }
> >
> > ***********************************************************++
> > ***********************************************************
> > flash.js
> > ************************************************************
> > *************************************************************
> > document.writeln('<br>');
> > document.writeln('<center><div id="sco" style="width:' + rloWidth + 'px; height:' +
> > rloHeight + 'px;">');
> > document.writeln('<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
> >
>
Codebase="http://download.macromedia.com/pub/shockwave/cabs/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
More information about the Xerte
mailing list