Connect Pro User Community


Send this page





Bookmark and Share

Home >  Learning Center >  Tutorials >  Tracking Adobe Captivate and Adobe Presenter Results in a Proprietary System

Tracking Adobe Captivate and Adobe Presenter Results in a Proprietary System

Andrew Chemey, Adobe Systems

March 2009

Expertise Level: Advanced

  
3 Votes

This document describes a mechanism that could be used to track results of Adobe Captivate and Adobe Presenter in a non-standard tracking system. By non-standard, I mean a system that does not follow the AICC or SCORM standards. The process described in this document can be used to send data to a proprietary database tracking system, such as the score and status of the content. It can also be used to retrieve the same data from the tracking system (if warranted and available by the same system) to be able to return the learner to the page they left off and remember state data or what pages were viewed and how they answered individual questions.

There may be a number of reasons that an AICC or SCORM LMS is not used to store data. In some cases, the results just need to be sent to some Administrator, so they can receive a notification that someone completed the content. Typically, I see this request by folks attempting to use the e-mail feature of Captivate. The solution that is presented in this will not explain how to build a tracking system or send the data. The purpose of this document is to explain how to capture the data from Adobe Captivate and Presenter. What is done with the data and how, is up to you (or perhaps a future article).

There are several ways that have already been documented (just Google them or search Adobe.com), but I felt there were drawbacks for each of them. This is a solution that I have demonstrated since Captivate 1. I feel that the tracking mechanism provided by Captivate and Presenter is awesome, though I may have a bias. This document will just explain how to extend the tracking for proprietary reasons.

Note: The process described in this article modifies the existing HTML Templates that Captivate and Presenter use create the published content files. Modifying the HTML Template files (or replacing these files) is something that I have described in other articles I have written on extending or using Adobe Captivate and Presenter for various purposes. These changes are not cumulative. Which means the changes required to modify the HTM files for this proprietary system do not already reflect the changes, for example, of using a customized report in Adobe Captivate/Presenter as described in another recent article. The changes in the articles are independent of each other and may require manual changes to the HTM file to build your own solution based on the functionality that is required. The HTML Templates that are provided with this solution are not final. They are only used as an example for how to capture the data. What you do with the data is really up to you.

Requirements

  • Adobe Captivate or Adobe Presenter is required
  • Familiarity with JavaScript is recommended
  • Adobe Acrobat Connect Pro account is recommended (for LMS integration)
  • Sample Files associated with this document are available for download (briefly described in the Sample Files section, below). These files may be compressed in .zip format and may require you to install an extraction program such as 7-Zip available from http://www.7-zip.com.

Overview

Capturing data from Adobe Captivate and Presenter is, in my opinion, actually quite easy. In fact, I would surmise that capturing data from most SCORM-compliant tools is quite easy. Whats more difficult is potentially determining what to do with the data.

Note: The reference to SCORM is because the mechanism described in this article depends on the SCORM output from Adobe Captivate and Presenter to capture the data. There are potentially other means to capture this data, from these tools, but its the use of SCORM published files that is used in this article.

This article is focused simply on capturing data from Captivate and Presenter. The data that can be captured includes:

  • Score (Raw score, Maximum score, Minimum score)
  • Status
  • Interaction Data (how learners answered individual questions)
  • Suspend Data (also known as Resume Data, Core_Lesson or Session Data)

Additional data can include:

  • Time (in content)
  • Location (where the learner left off slide number)

Again, there are many reasons that developers are reviewing this article for capturing data from Captivate and Presenter. I would hope that anyone looking for a process to capture learner data from these tools for reporting purposes have done appropriate due-diligence with various LMS products. This would include products like Adobe Connect or other AICC and/or SCORM-compliant LMS vendors. It is often more effective to purchase an existing tool that provides reporting capabilities than to build one.

More than likely, a number of developers reading this article are interested in capturing data and sending the results via e-mail to some administrator. This will be covered briefly, because this is a common use-case. However, sending data via e-mail is problematic and the while a solution *may* be provided in this article and in the example files, it may not fit the needs of everyone.

What is possible is to use some of this article and some of the examples to support a proprietary tracking mechanism to both send AND retrieve data. This will support resuming the Captivate and Presenter content where learners left off, if the Suspend Data is stored and properly retrieved.

What makes Proprietary Tracking so difficult

The word attempt has been used multiple times throughout the article (or should have been). The reason is because capturing the data is quite easy. Please review Sample 1 of each of the examples, below, or you can launch an example that was developed in Presenter, in a new window, by clicking on this link: Click here to see a Presenter demonstration. As you progress through the file the data is sent to JavaScript variables which store the data until the file is closed. Once closed, the data is displayed in an Alert box. Thats easy (capturing the data). However, actually doing something meaningful with the data is more difficult.

The examples in this article have the potential to send the data in an e-mail or store the data in a database. But more-than-likely, to actually review these examples, you need to host the files on a web-server and configure the web-server to support even basic e-mail or database functionality. The number of web-server technology out there is a bit overwhelming. Even configuring standard IIS (Microsoft Web Server), PHP (server technology that runs on most server environments or UNIX servers is a lot of work, due to versions and security.

This presentation attempts to bookmark using a Microsoft Access Database and PHP.

Currently, I have taken the cheap way out and hope that you are able to use these examples either as-is or with minimal configuration get them to work in your environment. I did want to point out at least one thing with the behavior of the example files.

The example files that have been provided use a relative reference to the ASP file for E-Mail and Database communication. This might be a reference to the ASP file found in one of the examples:

var strEmailURL = "../scripts/sendMail.asp";

This expects the ASP file to be found in a folder called scripts with the files that were used to launch the content. It *might* be possible to change the reference to fully-qualified server URL to allow the content to be taken locally (instead of launched from a webserver) such as:

var strEmailURL = "http://www.learningconsulting.com/ASP/sendMail.asp";

This may not work in all environments or cases, but it may be something to research.

Note: Launching files locally may require a security setting change for the Flash Player. This may have to be completed on EACH client. See a quick walkthrough of this here. You may want to research this security setting before making any changes.

Proprietary Tracking for Captivate and Presenter

The HTML Templates provided with this article are not finished. The templates are used to communicate with the Adobe Captivate and Presenter published content to retrieve data as the learner progresses through the file. However, they do not actually do anything with the data. The data is stored in local properties (or variables) for developers to then modify to communicate to their own proprietary tracking mechanism. The HTML Templates are essentially a model that developers can modify for their own purposes.

The mechanism used by the example files, the HTML Templates and sort-of described in this article all use content published from Captivate and Presenter using the SCORM standard. The SCORM standard is a JavaScript implementation. This means that all data that needs to be sent to the LMS has to go through JavaScript, which means it goes through the HTM file that launches the content (more or less). The type and amount of data sent to a SCORM-compliant LMS, specifically by Captivate and Presenter, is quite substantial. What I have done is to make Captivate and Presenter believe that the content has been launched via a SCORM 1.2-compliant LMS. Thus, Captivate and Presenter send data via the launching HTM file (and/or a support file called scorm_support.js) and is captured by custom variables.

When the HTM file is launched, the JavaScript immediately attempts to determine if there is a SCORM-compliant LMS available. It does this by looking for the SCORM-API. If it does not find the SCORM-API, the SWF file is launched and already knows the LMS is not available. Since the content is NOT going to be launched from a SCORM-compliant LMS, we need to modify the HTM/JS so it makes the content believe its communicating with the LMS.

The first area is to force a variable g_objAPI to some value. This tells the content that the SCORM-API has been found. In the example files, this is done by simply setting the variable to anything (or in the specific cases of the examples, its set to the window object):

g_objAPI = window;

Then when the content is launched (the actual SWF file) a few parameters are passed which indicates to the content what LMS type is supported and whether the browser that launched it is IE (or not IE). A one line change towards the bottom of the examples makes the content believe it found the SCORM-API and describes the version of SCORM (either SCORM 1.2 or SCORM 2004) and then also indicates whether the browser supports FSCommand or not (IE or not IE):

strURLParams += (strURLParams==""?"?":"&") + "SCORM_API=0.2&SCORM_TYPE=" + g_intAPIType;

Now that the content believes the API has been found, Captivate and Presenter still attempt to communicate with the API and retrieve values it then uses throughout the content. This is done by a series of calls that follow the SCORM standard which ask the API:

  • Are you initialized?
  • What CORE data values does the LMS support?
  • What are the values for individual data-types?

I really dont want to get too much into the SCORM standard, nor copy/paste the entire code that has been modified. A full list of the changes can be found by clicking here. Whats most interesting about all of the changes is this one location:

} else if (strFSArg1.indexOf("suspend_data") > -1) {
strErr = "";

Its this section in the HTM file that launches the content that supports resume. The data that is used by Captivate and Presenter to remember where learners left off and how they answered individual questions in the quiz is all stored in one field. The suspend_data field.

If you launched this specific content, you will automatically be taken to a slide in the middle of the presentation. By navigating backwards, youll notice that I answered the first question correctly and the second question incorrectly. This content has a hard-coded response in the HTM file that sets the return data to suspend_data to this:

} else if (strFSArg1.indexOf("suspend_data") > -1) {
strErr = "D0Enone%24nP0Enone%24nP0Enone%24nP0Enone%24nP1Enone%24nP1Enone%24nP1Enone%24nP1Enone%24nP001BA000CBA%7E%24%5FR%2Ag4hT0110BKEGchoice%2DQ%5F1answerText%5F3%3BQ%5F1answerText%5F2%3BQ%5F1answerText%5F1%3BQ%5F1answerText%5F0DnilDnilDnilBDB0B0EBCB0B0EBBB1B1EBAB0B0ECB%7E%24%5FR%2ArliT0100BKCKtrue%2DfalseDnilDnilDnilDnilBBB1B0EBAB0B1E";

This is the key area for supporting resume in Captivate and Presenter. Its this area to review specifically in the Sample 4 examples.

Sample Files

The sample files provided with this article probably provide more meaningful information than this article. The samples all share some common code to make Adobe Captivate and Presenter believe it is communicating with a SCORM-compliant LMS. This is what allows the properties (also known as variables) to capture and store the data in the HTM file. None of these files will actually launch and track from a SCORM-compliant LMS, since they have been modified.

The samples attempt to send an e-mail or store the data in a database, but this might not work in your specific environments. You may need to work with either your internal IT or some consultants to help configure your environments for the functionality in either the examples or in your specific published files to work.

This section provides a brief description of each of the sample files

Note: The samples are provided in both Adobe Captivate and Adobe Presenter formats. While there might be 8 total samples, there are only four unique TYPES of samples.

Sample1_Alert

This sample contains the code to make the content believe it is communicating with a SCORM-compliant LMS. As a learner progresses through the content, local variables store the data received from the content.

When the content is closed, the data is displayed in a single Alert statement.

Sample2_Email_withHTML_Login

This sample contains the code to make the content believe it is communicating with a SCORM-compliant LMS. As a learner progresses through the content, local variables store the data received from the content.

An HTML login page is presented when the content is first launched. When the content is closed, the data is sent to an ASP page (server-side script) that attempts to send an e-mail to the address provided during log-in.

Sample3_Email_withFlash_Login

This sample contains the code to make the content believe it is communicating with a SCORM-compliant LMS. As a learner progresses through the content, local variables store the data received from the content.

A Flash-based log-in page is embedded within the content. When the content is closed, the data is sent to an ASP page (server-side script) that attempts to send an e-mail to the address provided during log-in procedure.

Sample4_DatabaseTracking

This sample contains the code to make the content believe it is communicating with a SCORM-compliant LMS. As a learner progresses through the content, local variables store the data received from the content.

An HTML login page is presented when the content is first launched. The learner is prompted to enter a name. At the log-in procedure the name is checked against a Microsoft Access Database (MDB file) via a server-side ASP page. If the communication occurs properly, the content resumes where the learner left off (assuming they have launched the content in previous sessions). The data is sent to the database when the content is closed.

Conclusion

These prototype files are provided as-is, though I expect to be making changes to them. Feel free to contact me with any updates and suggestions you might have for this article and associated files.



Member Comments

Share your thoughts. Tell us what you think about this tutorial.

APRIL 17, 2009
Thanks Andrew for posting this tutorial.

It was very helpful
uneelaka

MAY 18, 2009
Hi Andrew,

Sorry but I'm having some problems. Sample 1 I have simply copied to a web server and seems to work OK but when it pops up the javascript alert it has all the labels but no values.
Is this a communication problem between the captivate swf and the htm javascript?

Cheers,
Rob.
robo

MAY 19, 2009
Hi Andrew,

The problem appears to be that I am running it in FireFox, sorry if I missed a mention of that in the article. If I remove the IE conditions in Sample1.htm it works fine for FireFox so why is it IE specific?

Cheers,
Rob.
robo

MAY 19, 2009
I don't think I indicated I only made the changes for IE. I have updated files for you to test in FF. Can you contact me, directly?
AChemey

Log in to leave comments


<< Back to Tutorials main menu.