August 11, 2010

Reporting the Quiz Results to a local server

One of the most requested features in Adobe Captivate was the ability to store the course results on the local servers or database. Adobe Captivate 5 comes with an all new reporting workflow, being highlighted as Alternate Reporting, which enables its users to store and track their course results using their own servers and database.

Alternate Reporting allows the users to integrate their content with their own webservers. Let us see how…in a very few steps…

Step I: Set-up the Web server

For integrating the course with a web server, first the user needs to setup a web server. Here, I will take an example of integrating the Captivate course with WAMP server (PHP-enabled server).

WAMP server is an open source project and a free to use web server. It can be downloaded from www.wampserver.com/en/downloads.php.

Tutorials for installing WAMP server can be found at: http://www.tagbytag.org/tutorials/getting-started/web-design-software/wamp-guide

Step II: Create a Reporting Script

Since some of the users want the results to be stored on their local servers and some want to be stored on some database, Adobe Captivate 5 provides a template script file – InternalServerReporting.php, which is available at the following location – [InstallDirectory]/Adobe Captivate 5/Templates/Publish/. Users can use this script file and modify it accordingly to solve their purpose. Also, there is no restriction on the scripting language used for the reporting script. Users can use any scripting language like PHP or ASP.

Once the script file is ready, you just need to place this file in the root folder of the web server. To check whether the script is correct and accessible or not, please try accessing it using the web browser.

For eg : If the server is on local machine, you can try the following link in your web browser : http://localhost/InternalServerReporting.php.

No error should be displayed in the browser.

Step III: Set the Quiz Reporting Preferences in Adobe Captivate 5

After the server is up and running, and the script file is in place, you need to set the preferences in Adobe Captivate 5, so that the results get reported to the web server.

Adobe Captivate 5 comes with two new reporting options available in the Reporting preferences of Quiz.

For tracking the results using the web server, you need to select and configure Internal Server as the reporting option.

Step IV: Configure the Internal Server

Now, user needs to configure the internal server to his own web server. For this, you should provide the link to the script file in the Server text area of the Alternate Reporting dialog. Also, you should provide the names of the Institute, Department and Course name in the respective fields. All these fields are mandatory and are used to store the course results in a formal structure.

And now, your course is integrated with your web server.

Whenever a student will take this course he will see a Post Results button on the result slide. Once the student uses this button to post the results, the results get posted on your web server.

How can you store the results on a database?

You can anytime modify your script file to connect to a database. Now whenever the results are passed to this script, the code in the script would directly store the results onto the database.

Hence, you can see how easy it is to store the course results on your own web servers/database using Alternate Reporting feature of Adobe Captivate 5.

I’ll give some more highlights on the code in the script in my further blog posts. So keep tuned.

Posted by Chinmay Baid12:04 PM
  • Elizabeth

    2 questions: I would like to have the date the quiz was taken displayed when viewing results from the Quiz Results Analyzer but I don’t see it. Am I missing something? How can I have them display?

    Also, my IT guys tell me the scripts shipped with Captivate don’t work with Linux without customization. Will this be offered soon?

    • Rheba

      I second the request for date information. Is there a solution?

      • tagur gautham

        Hiii…I am unable to view the results that are being stored in the local databse.I have gone though the above steps but i am inable to figure it out where exactly i am going wrong…Can any one help me out clearly.I am doing it using sql server and .net..Help will be appriciated… Kindly let me know through my mail id…”tagurgautham@gmail.com”

  • Mike

    Is there any way to auto-post the test data? Learners my not know that they have to take this extra step to save their score.

    Thanks,
    Mike

    • Tristan

      This would be really helpful – is there a solution?

  • http://www.stayinfront,com Kousalya

    I am trying to Create a Reporting Script using asp instead of php. How do I do this? How do I translate php code into asp? DO I need to translate internalserverread.php also to asp file?
    I tried printing Request.form(“Company”) – it returns nothing.

    Thank you.

  • Pingback: Adobe Captivate Quiz Result Analyzer « The Adobe Captivate Blog

  • Rob

    Just a note for those hosting on an Internal Server – in the Quiz results analyser you must specify the Internal Server location of http:///internalServerRead.php, rather than http:///InternalServerReporting.php. Wish I’d known that 3 hours ago. ;)

  • Rob
    • NoMan

      *IF YOU ARE HAVING PROBLEMS ON AN INTERNAL SERVER, READ THIS*

      Sorry to shout for your attention, but sometimes it’s necessary. :)

      Sorry, but that’s wrong Rob. You will not get an error back if you do that, but you will also not get any information back either. (Since it doesn’t do anything when it runs the script, no error message.) If they do that, then they will get nothing back from the report.

      Here’s the secret sauce that is missing for most people:

      For most servers, you need to specify a value for the mkdir function. Open up the internalServerReporting.php file in a text pad or Dreamweaver. If you don’t have Dreamweaver and are on Windows, I recommend Notepad ++. Go to line 36. It will say:

      “mkdir($ResultFolder);”

      Remove the quotations. But that’s wrong for most servers. This is because there is no permission setting specified, and most servers by default do not allow just anyone to start writing files and making directors on them. To fix this, type this in:

      “mkdir($ResultFolder, 0777);”

      This gives you permission to write into that folder and file. Now, if you’re running it locally, the configuration will be:

      http://localhost/(folder_you_name)/internalServerReporting.php

      Add in the permissions, point to the correct php script, and you’ll get back an XML file.

  • http://www.nursecontinuinged.com Eddie

    I currently have a website that uses Captivate 3 and I post the results to a database on my website server using the post results by email tutorial and sending to a database. The issue that I have is that I need the full test posted which includes the questions and answers to the questions along with if they are right or wrong.
    Rihgt now I only get the results which includes the letter before the answer and a C or W if right or wrong.
    Will Captivate 5 fix this issue? If so, then I will upgrade

  • Tameka Brown

    Our training group has the same question as Mike’s August 13th post. Is there a way to have the student’s results posted automatically?

  • Tameka

    Initially we were able to use the alternate quiz reporting feature successfully. There is currently an error code that comes up when we try to post results after a quiz.. “Unknown Error’ is shown after the student name and email address are entered. Is there a way to trace back what this error message means?

  • Kathleen

    I have followed the instructions for the internal server and even though I publish to the local folder, I don’t see the “automatic folder” appearing for Captivate Results. Please advise!! I’m in a hurry! 206-992-4446 Thank you!!

  • Bruce

    Captivate 4 only supported the Send Email button if the course was viewed in html.
    Will Captivate 5 Alternate Reporting work if the student views the course in PDF?

  • Rachel

    We are thinking of using the WAMP server for our internal training program which will need to process requests and store results from about 150 users. We would like to know whether or not the WAMP server with default configurations can handle such load and process the requests successfully. Also, can we rely on this opensource WAMP sever for our proffessional use?

    • Brian

      @Rachel
      The WAMP(or XAMPP) suggestion is for a developer configured setup of a PHP/MySQL/Apache server. I wouldn’t advise using this outside of a secure internal network. I run a XAMPP server locally on my computer as well as on a test server in our companies network. If planning on deploying a production server (internal or external) with a PHP/MySQL/Apache setup I would consult an IT professional. Most web hosting packages are based on a PHP/MySQL setup the other being ASP/MSSQL.

      MySQL isn’t the end all be all for databases. My IT department uses Microsoft SQL. It all depends on the connection string given to PHP or ASP in which database the script talks to. Some commands within the script may have to change to accommodate the database of choice.

  • Bruce

    No, the Send Email button (in the pdf doc) didn’t work for us in Captivate 5, either.

  • Syl

    I am new to Captivate 5 and still learning.
    While creating the Quiz was pretty easy, how do we also capture the learners name or id so we know “who” answered the quiz?

    • Dan Harrison

      In Quiz Preferences, you are going to indicate wheter you will create results at Acrobat.com or and Internal server. Once the quiz is taken, you can view results utilizing the Quiz Results Analyzer. That will give you the information you are looking for.

      • Anthony Lee

        I’m curious, how will it give information the quiz itself doesn’t ask for? If the user is taking this via a browser, I don’t understand how it’s going record any personal information about the taker. I need the user and department information on my quizzes. Previously I used Cap 3 and dumped results to a DB. In that case I used a pop up html page to have the user enter their information before hitting a submit button.

        • http://btconferencing.com Annie

          @Anthony, I wondered this as well. I published to acrobat.com at first to see what the output would be and it only assigned displayed the users by their adobeID. I don’t want my users to have to sign up for Adobe just to be able to post their results so I’ve decied to go the internal server route. What I ended up doing to identify the test taker was creating an ungraded question where the users could enter in their personal info. This would allow the responses to this question to be populated with the rest of the course test results. I hope this helps although I know I’m seeing this quite late!

  • Dan Harrison

    like so many, i have worked thru a couple of challenges to get Results to and from a local server. The results do post, and can be verified as on the server. However, when I attempt to retrieve them via the Quiz Analyzer, I get a ” Download could not be completed” error. Any ideas as to how to correct??

  • http://djhsecondnature.me David Howard

    Does anyone know of the script that the Post Results button calls so it could be automated to run on screen exit?

    Or perhaps a way of customising the Post Results popup box?

  • Curt Staubach

    Has anyone tried saving the quiz data via ColdFusion? Specifically, I’m wondering what are the Captivate quiz parameters that are passed out of Captivate to the cfc or cfm page.

    • Justin

      Has anyone ever given you a pointer on how to send the data to a CFC or CFM page?

      • stephen

        Been trying using Coldfusion and cannot get it to post data. but I also cannot get it to work with the provided PHP example either. It just says “Connecting…” when trying use the PHP and No Connection when tryin to use the CFM file. ug… So frustrating, wish there was some help on this.

    • stephen

      Hey Curt or anyone, does this work with ColdFusion? I cant get it to even post to the cfm page at all.

  • Derek

    I am wondering how I can capture the users name when capturing the results and sending them the this web server??

    Can anybody help me here??

    • http://btconferencing.com Annie

      Hi Derek, what I’ve done is created an ungraded quiz question that prompts the user to enter in their personal information. This way it will populate their info with the rest of the quiz results.

      This is the only solution I’ve come up with so far…hope this helps!

  • Kevin

    I have modified the interserverReporting.php script that ships with Captivate 5 to report the results to a MySQL database with some success. The problem I’m having has to do with the message that displays to the user when the click the Submit button. i would like to customize the text that appears in the popup and somehow disable the submit button after the user clicks it so that they don’t resubmit multiple times. Anyone have ideas on where to look to do this?

    • Paul

      Hi Kevin,

      You say that you have had some success modifying the interserverReporting.php script to report the results to a MySQL database. Can you give me some pointers on this, i am a complete novice when it comes to scripting!!

      • leo

        can you give as a sample script

    • Abu

      Hi Kevin..Please could you explain better on how you setup the results to be posted to a mysql database. please it is really urgent. I will appreciate your cooperation, cheers

  • Pranaam

    Can anyone help me with the solution to disable/ customize the ‘Post Resuts(prompting to enter name and email)’ popup that comes after a Quiz is taken ?

  • Sharad

    I have used the Internal Server option and can see my results in the xml file. When the Post results option is selected, a popup comes up asking for the user id and email address. This information can be seen in the resulting xml too.
    But because this quiz will be made available through our internal website where the user would have to login – we already have the user information – and hence would not like him to enter the information twice.
    How do we disable the popup?

    Also the control from the Post Results button goes to Action Script? We have AS3 programming capability in the team – Is that something we can modify in a way that every quiz we publlish using Captivate has the same functionality behind the Post Results button? If yes, can I get some pointers on how to approach this?

    Sharad

    • Sankar

      Hi Sharad,

      Can you please share me the internalreporting.php. I need to check my results through internal server. Can you please help me regarding this.

    • Scottdahl

      Did you ever find a solution to disable the popup? We’re having the same issue.

  • Terra

    I have been trying to get the quiz results to post to my acrobat.com account with little success. When others post their quiz results they are requested to enter the email address and password to my account at acrobat.com. Is this how the reporting is suppose to work when using acrobat.com?

    • http://blogs.adobe.com/captivate/ Allen Partridge

      Hi Terra. When learners take the quiz the system asks them for ‘their’ Adobe ID to login to acrobat.com – not for yours. The system will post to your account, but asks them for their login info. You can use alternate reporting if you want to avoid forcing your learners to have Aadobe ID’s. In the alternate reporting paradigm, you put the php scripts provided on your own server, and the data is loaded to your custom server. Users are prompted in that model for a login email rather than an Adobe ID. Hope this helps, Allen.

      • Terra

        Hi Allen. I thought there was a way for my acrobat.com account to be saved like a default. That way when individuals report they just hit the report button and it automatically goes to my acrobat.com account without them entering anything. Is there a way to do this? If so, can you please instruct me how to do it? I really don’t want a huge amount of individuals having to sign up for acrobat.com just for this. Thanks for your help. Terra

  • Nicole

    How large will the results files be? We have about 200 users and I need to make sure my web server will be able to store all of the results.

    • http://blogs.adobe.com/captivate/ Allen Partridge

      Results are in tiny xml files. It’s just text data so no need to worry about even hundreds of thousands of records.

  • http://web.me.com/jack.nance/Captivate/quiz_adobe_com/quiz_adobe_com.htm Jack Nance

    I’ve set up a quiz in Captivate 5. I created a second adobe id so I could test the quiz. I take the quiz but when I try to post the results I get message “Network may not be available” any one have this same problem

  • Trevor Gilbert

    Im having a similar problem. I have chosen to report to an internal server, but when I click on post results it just reads “connecting…” with no other msgs.

    Any ideas how to fix this?

    • Josepha Thompson

      I am having this exact problem. It just hangs at “Connecting …” Is there something that is supposed to be customized in the internalServerReporting.php. Cannot find any examples of this.

      • Erik

        Check the url you are using. I ran into this problem when students didn’t have the www. in the url and the reporting does.

  • http://www.ertsonline.co.uk matt

    hi, can i use a hosted server as the internal server for reporting. i use 1and1

    • http://blogs.adobe.com/captivate/ Allen Partridge

      Matt, if the hosted server has PHP you should be fine – though you may need to coordinate with the host to ensure everything is working. Just install the two php files into a directory on the server. (Make sure the permissions on the files and the directory are sufficient.)

  • Erik

    Is there a way to have the quiz analyzer show the time it took for a student to go through the quiz? I know this is stored in the XML but would like to be able to pull it from the analyzer

  • Renee

    Does anyone have an ASP template for the internal server? I have spent several hours searching for one.

  • Cameron

    greetings, I am trying to find any documentation at all which explains how to collect quiz results by e-mail.

    Can anybody help me here please?

  • David

    I just want a way to insert the scores, time taken etc into a mysql database simple right? well there are just no examples of how to accomplish this around the forums

    This xml file it writes isn’t very helpful but then again i can’t even get that to work either. in Captivate 4 i used a hacked javascript file for sendmail() to post to a page and insert that into a database but that doenst’ work on 5 :(

  • Martin

    After diging a lot, I get almost everything works. Now, my only problem is that Quiz Analyser (CS5) is connecting to my internal server, but instead of showing me the datat of the XML file, it just show dot (“.”) in the Organization/Dept/Course drop-down menu.

    No datas are retrieved.

    If I FTP the CaptivateResults directory on my computer and read the file with Quiz Analayser, everything work fine.

    I gave full permissio to all folders on my website.

    Any idea?

    Martin :)

  • stephen

    Having problems getting this to work myself. Each time I try posting it shows an error “No Connection” Any idea what that means? Ive tested the URL for my internal server directly and it works fine.

    • http://blogs.adobe.com/captivate/ Allen Partridge

      Stephen, most likely you don’t have the right URL. Are you referencing via http? Are you sure it resolves? LMK-Allen

      • stephen

        Does the internal server address have to be on the same server as the quiz/captivate file? Or can it be on any public web server address?

  • stephen

    Hi Allen

    Yes, I have tried the URL directly from my web browser and it resolves properly. I have even tested posting form results to the same URL and it works fine. Is there something else the Internal Server function needs to return in order for it to connect?

    • stephen

      Here is the example quiz published as Flash Player 10:
      http://training.wonderware.com/quiz/test.htm

      and it should be posting results to a ColdFusion File here
      http://training.wonderware.com/quiz/test.cfm

      The cold fusion file just saves the posted form data to a file. You can go there directly to see that it resolves properly. I have triple checked the captivate file to make sure the URL is correct. Does this require us to use PHP? Is there something that must be returned back to the Quiz for it to say results posted successfully?

      s

      • http://cityofrochester.gov Richard

        Could you share the Coldfusion code you’re using to capture the results? It would be incredibly helpful and save a huge amount of time.

      • SPremeau

        I was getting this same error, and ended up doing a trace on the connection.

        Turns out JRun is returning a 501 error because of the following:

        “Corrupt form data: no leading boundary: != –3141592653 …”

        So far, I haven’t been able to resolve it.

        • stephen

          Yeah I dont think its possible. There is something with the way Adobe created the posting application in the quiz that only sends to the php file from whati can gather. there are not supporting docs for it.

  • Sankar

    Could any one share me the modified internalserverreporting.php file. If so it would be helpful for me.

    Thanks in advance.

  • Phil W

    If I’m getting to the post results stage and hanging on Connecting…. does anyone know where my problem might lay?
    Any help appreciated-confused learning designer working with IT person who is managing the script….

    • http://blogs.adobe.com/captivate/ Allen Partridge

      Most likely the *.php file doesn’t have the right permisssions. Try giving the file more CHMOD perms.

  • ScottM

    I am trying to have captivate report quiz results to our internal server – SharePoint. Following all instructions I can find, we set up the server correctly and the settings on the quiz are correct. When submiting the results the returned message is successful. However, there are no new files created – no results anywhere. What am I missing???

    • http://blogs.adobe.com/captivate/ Allen Partridge

      Scott – it sounds like a permissions problem. If the permissions on the PHP scripts aren’t sufficient, then it won’t have permission to create new files on your server. Try expanding the perms on the PHP script.

  • stephen

    Since I was not able to use ColdFusion to process the results I am now using the provided PHP file on a PHP Server. Works fine when the quiz is located on the same domain as the php server. Is there a way to make this work though were the quiz is located on one server and the PHP file on another?

    • http://blogs.adobe.com/captivate/ Allen Partridge

      Stephen, this is an enhancement request. I’m forwarding it to wish-captivate. You can of course edit the PHP file(s) yourself as well, but i don’t know the issues involved. My guess is there may also be a need for a change in the published SWF, and of course you’d need a x-domain policy on the server.

  • http://N/A JL

    Using Adobe Captivate 5 with an internal reporting server which is configured properly for PHP using IIS 6. I can create the XML files all day long but the quiz results analyzer will not generate the report even though it does find the “Organization”, “Department”, and “Course” values from the directory structure. When I click “Generate Report”, I get the message saying “Data not found on the local file system” etc
    When I try and view the report using Source as “From this computer”, it will load the XML files data just fine.
    Any suggestions?
    Any help would be appreciated! Thanks

  • Rae

    How do I save text entry box information to file? I want to review my short answers separately.

  • Jenny

    Hi I am trying to use the Email as the reporting system, but unfortunately this doenst seem tobe working. I have downloaded Captivate 5 free trail and I have taken online training and its says its as easy as 1) enable reprting ) enter email address 3) chooses reporting options and ok but nothing comes through? Im not sure why this int working can anyone help. I have also tried Acrobat.com and this isnt working either.

    • guest

      Did you ever figure out how to do this? I’m having the same issues….

  • Dacurb53

    how can you make the post button go away after posting to prevent others from claiming same score. kirby

  • Rspoiala

    Hello,

    It seems that users that receive the libnk for the quiz have to have an Acrobat.com account in order to send their results?

    THank you,
    Rodica

  • Rspoiala

    Hello,

    It seems that users that receive the libnk for the quiz have to have an Acrobat.com account in order to send their results?

    THank you,
    Rodica

  • Maria Allofernandez

    we are setting this up and need to have the full list of steps as in many of the blogs it is not straightforward. does anyone have steps to share when using the internal web server? if you have any tips on pitfalls, challenges this is most appreciated.

  • Maria Allofernandez

    what needs to be set up so that the module talks to the web server? how is the data put into the web server and in what format?
    has anyone successfully set this up?

  • Jenni_NT

    Can you do this in Captivate 4?
    I need to get test results into a spreadsheet. If possible point me to any “step by steps”

    Reason I’m having to do this – our current LMS doesn’t allow us to capture the level of detail we need – expecially for a group of people who do not have logins to our LMS right now.
    Yes, we will eventually be upgrading (to OracleLMS) but I need a robust interim solution,now.
    BTW – I’m not a techy and have never done JS so an a real novice
    Thanks
    Jenni_NT

    • http://blogs.adobe.com/captivate Shameer Ayyappan

      Hi Jenni, the alternate reporting function was only introduced in Captivate 5. In Captivate 4, you could try the email reporting function- but this still doesn’t get your results into a spreadsheet automatically.

    • http://twitter.com/dennis_tivey Dennis Tivey

      Jenni, you need the Variables to Google Form widget. It populates a Google Form which in turn populates a Google Spreadsheet. We are using it as an interim way to collect scores etc. until our LMS is fully deployed. It can be a pain to get it working, but it works reliably thereafter. You can get it for Captivate 4 here: http://captivatedev.com/2010/03/10/captivate-4-widget-cp-variables-to-google-form/

  • http://twitter.com/Grey_Elf Stephen

    Is there a way to automatically post the results without the user having to explicitly post the results. I have a user account system already in place and have access to the userid and e-mail either through PHP from a database or javascript. I would like to submit the quiz results to a database after the user completes the entire presentation or when they close the windows.

    • Anonymous

      Hi Stephen, this is not possible in the current version. You can definitely go ahead and log an enhancement request for the use case.

      • http://twitter.com/Grey_Elf Stephen

        How do I log an enhancement request?

        Is there a workaround that I could implement by modifying the CaptivateMaintimeline.as or other file on my local Captivate install (MacOS). What I would like to do is have the results auto submitted when the user exits explicitly or when they close the presentation. In my case, I am actually displaying the .swf in a on my main page as a .swf object. I guess I would have to pass the close event to the SWF somehow?

        • Rollinanderson

          Stephen, Did you find a solution for this? I would like to acomplish the same thing.

          • Swai Oko

            I am also interested in knowing the resolution of this. I will be fine with having the submit button there as long as they can get rid of the pop up box that asks for name and email address.

          • Rakesh Jainapally

            Did anyone find a solution for this?

        • http://blogs.adobe.com/captivate Shameer Ayyappan

          Hi Stephen, you can log an enhancement request here: https://www.adobe.com/cfusion/mmform/index.cfm?name=wishform

  • Scottk

    Great post. It mentions that ASP can be used instead of PHP. Has anyone done this? Are ASP scripts available from Adobe or from the Captivate community?

  • http://twitter.com/Leveton Michael Leveton

    I blogged about how to do this with Ruby on Rails.
    http://leveton.blogspot.com/2011/10/publish-adobe-captivate-results-with.html

  • Anonymous

    Is there a way to automatically post the results without the user having to click the X on the upper right hand corner….. currently I have an assessment posted on a site, when the assessment ends the use sees his/her score and if they DO NOT click the X the score doesn’t get posted to our spreadsheet….. Can anybody help with me this?

  • Oko

    Is there a way for this to just do generic HTTP post (standard parm names) without having to call specific php script to save the results? That would make things much easier.

  • Pingback: How to set up internal web server for reporting | free icons download

  • Pingback: Re: cp5.5 and quiz reporting…..again » free icons download

  • Pingback: “Can’t We Just Manage Learning Using Email and a Survey Tool?” « Absorb LMS Blog

  • Pingback: Posting Quiz Results to an Internal Server in ASP or .NET » free icons download

  • Aode

    Hello,

    I just upgraded to Captivate 5.5 from Captivate 4.0. We embed our courses in our internal intranet and have set it up so that when the user clicks the submit e-mail button the score is posted to our intranet. Now that I have upgraded to 5.5 it makes the user click the “send e-mail” button twice in order for the score to post. Can you suggest how I might set up the configurations so that the user only needs to click the send e-mail button once.

    The intranet programmer at our company would not like to use the internal server option because this option just sends information to a page on a web server and our courses are embedded within the intranet using JavaScript.

    Any suggestions you can give so that the users don’t have to click the “send e-mail” button twice in order for the results to post would be much appreciated! Thank you!

  • Sworobec

    Does anyone know if there is a way to edit the 2 questions being asked in the Post Results prompt? Currently it asks for Name and Email Address. I’d like to ask for 2 different variables if possible, but cant find where the code files are for that specific prompt.

  • Ofir Maimon

    This is my solution in VB.net . It uses three SQL tables (which is probably overkill) to store the results. One stores the post data Captivate sends on a single row, the other two “capHeaderData” and “capData” store the parsed out data from the XMLfile that gets sent. I’m supplying scripts to create all the tables at the end also.

    This is the code behind of a blank page I called captivateresults.aspx . I sent the Internal Reporting to this page which is hosted on the company Intranet. It collects the data captivate sends, then records it in capResults, then takes the XML file and parses it out into the other two tables, a header and a data table for the questions themselves.

    You will need to replace “incIntranet.pubConnStringIntranet” with a connection string to your database that works in your

    environment probably somethign like “Data Source=MYSQLINSTANCENAME;Initial Catalog=MYDATABASENAME;User Id=MYUSERNAME;

    Password=MYPASSWORD”

    *******************************************

    Imports System.Data
    Imports System.Data.SqlClient
    Imports System
    Imports System.Xml

    Partial Class captivateresults
    Inherits System.Web.UI.Page

    Public incIntranet As New classIntranet

    Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load

    ‘This page is called from Adobe Captivate. The quiz reults are sent in as a Post to this page.
    ‘This page then loops through the request.params and and stores the data which is several fields a
    ‘and a file which should be in XML. This data is inserted as a row in a capQuizResults table.

    Dim strListofVars As String = “”
    Dim strListofFormVars As String = “”
    Dim strCompanyName As String = “”
    Dim strDepartmentName As String = “”
    Dim strCourseName As String = “”
    Dim strFilename As String = “”
    Dim strFiledata As String = “”
    Dim strFileUpload As String = “”

    ‘Request.Params goes combines all variables, Querystring, Post, Server
    For Each strPost As String In Request.Params

    ‘If InStr(strPost, Request.ServerVariables()) = 0 Then

    ‘End If
    strListofVars = strListofVars & strPost & ” | “
    Response.Write(“” & strPost & “:” & Request(strPost).ToString & “”)

    Select Case strPost

    Case “CompanyName”
    strCompanyName = Request(strPost).ToString
    Case “DepartmentName”
    strDepartmentName = Request(strPost).ToString
    Case “CourseName”
    strCourseName = Request(strPost).ToString
    Case “Filename”
    strFilename = Request(strPost).ToString
    Case “Filedata”
    strFiledata = Request(strPost).ToString
    Case “Upload”
    strFileUpload = Request(strPost).ToString
    End Select

    Next

    For Each strPost As String In Request.Form
    strListofFormVars = strListofFormVars & strPost & ” | “
    Next

    ‘Insert into table and return the newly created ID

    Dim myConnection As New SqlConnection(incIntranet.pubConnStringIntranet)
    Dim strUpdateString As String = “INSERT INTO capResults (capResultsListOfVars, capResultsListOfFormVars,

    capResultsCompanyName, capResultsDepartmentName, capResultsCourseName, capResultsFileName, capResultsFileData,

    capResultsFileUpload) VALUES (@ListOfVars, @ListOfFormVars, @CompanyName, @DepartmentName, @CourseName, @FileName,

    @FileData, @FileUpload); SELECT SCOPE_IDENTITY() as NewID “
    Dim da As SqlDataAdapter = New SqlDataAdapter(strUpdateString, myConnection)

    ‘Dim myCommand As New SqlCommand(strUpdateString, myConnection)
    da.SelectCommand.Parameters.Add(New SqlParameter(“@ListOfVars”, strListofVars))
    da.SelectCommand.Parameters.Add(New SqlParameter(“@ListOfFormVars”, strListofFormVars))
    da.SelectCommand.Parameters.Add(New SqlParameter(“@CompanyName”, strCompanyName))
    da.SelectCommand.Parameters.Add(New SqlParameter(“@DepartmentName”, strDepartmentName))
    da.SelectCommand.Parameters.Add(New SqlParameter(“@CourseName”, strCourseName))

    ‘da.SelectCommand.Parameters.Add(New SqlParameter(“@LearnerName”, strCourseName))
    ‘da.SelectCommand.Parameters.Add(New SqlParameter(“@LessonName”, strCourseName))

    da.SelectCommand.Parameters.Add(New SqlParameter(“@Filename”, strFilename))
    da.SelectCommand.Parameters.Add(New SqlParameter(“@Filedata”, strFiledata))
    da.SelectCommand.Parameters.Add(New SqlParameter(“@FileUpload”, strFileUpload))

    Dim dt As New DataTable
    da.Fill(dt)

    Dim intNewID As Int64 = dt.Rows(0).Item(“NewID”)

    ‘From the XML , insert records for each questions for this ResultsID

    Dim strXML As New XmlDocument
    ‘strXML.LoadXml(dt.Rows(0).Item(“capResultsFileData”))
    strXML.LoadXml(strFiledata)

    ‘Dim strXML As New XmlDocument
    ”strXML.LoadXml(dt.Rows(0).Item(“capResultsFileData”))
    ‘strXML.LoadXml(strFiledata)

    ‘Course
    Dim strXMLCompany As String = strXML.GetElementsByTagName(“CompanyName”).Item(0).Attributes.ItemOf(“value”).Value
    Dim strXMLDepartment As String =

    strXML.GetElementsByTagName(“DepartmentName”).Item(0).Attributes.ItemOf(“value”).Value
    Dim strXMLCourseName As String = strXML.GetElementsByTagName(“CourseName”).Item(0).Attributes.ItemOf(“value”).Value
    Dim strXMLLearnerName As String =

    strXML.GetElementsByTagName(“LearnerName”).Item(0).Attributes.ItemOf(“value”).Value
    Dim strXMLLearnerID As String = strXML.GetElementsByTagName(“LearnerID”).Item(0).Attributes.ItemOf(“value”).Value
    Dim strXMLLessonName As String = strXML.GetElementsByTagName(“LessonName”).Item(0).Attributes.ItemOf(“value”).Value
    Dim strXMLQuizAttempts As String =

    strXML.GetElementsByTagName(“QuizAttempts”).Item(0).Attributes.ItemOf(“value”).Value
    Dim strXMLTotalQuestions As String =

    strXML.GetElementsByTagName(“TotalQuestions”).Item(0).Attributes.ItemOf(“value”).Value

    ‘Core Data
    Dim strXMLStatus As String = strXML.GetElementsByTagName(“Status”).Item(0).Attributes.ItemOf(“value”).Value
    Dim strXMLLocation As String = strXML.GetElementsByTagName(“Location”).Item(0).Attributes.ItemOf(“value”).Value
    Dim strXMLRawScore As String = strXML.GetElementsByTagName(“RawScore”).Item(0).Attributes.ItemOf(“value”).Value
    Dim strXMLMaxScore As String = strXML.GetElementsByTagName(“MaxScore”).Item(0).Attributes.ItemOf(“value”).Value
    Dim strXMLMinScore As String = strXML.GetElementsByTagName(“MinScore”).Item(0).Attributes.ItemOf(“value”).Value
    Dim strXMLSessionTime As String =

    strXML.GetElementsByTagName(“SessionTime”).Item(0).Attributes.ItemOf(“value”).Value

    ‘Dim nInteractions As XmlNode = strXML.GetElementsByTagName(“InteractionData”)
    ‘Response.Write(nInteractions.Name & “”)

    strUpdateString = “INSERT INTO capDataHeader (capResultsID, capDataHeaderCompanyName, capDataHeaderDepartmentName,

    capDataHeaderCourseName, capDataHeaderLearnerName, capDataHeaderLearnerID, capDataHeaderLessonName,

    capDataHeaderQuizAttempts, capDataHeaderTotalQuestions, capDataHeaderStatus, capDataHeaderLocation, capDataHeaderRawScore,

    capDataHeaderMaxScore, capDataHeaderMinScore, capDataHeaderSessionTime) ” & _
    “VALUES (@capResultsID, @strXMLCompany, @strXMLDepartment, @strXMLCourseName, @strXMLLearnerName, @strXMLLearnerID,

    @strXMLLessonName, @strXMLQuizAttempts, @strXMLTotalQuestions, ” & _
    ” @strXMLStatus, @strXMLLocation, @strXMLRawScore, @strXMLMaxScore, @strXMLMinScore, @strXMLSessionTime); SELECT

    SCOPE_IDENTITY() as NewHeaderID “
    da = New SqlDataAdapter(strUpdateString, myConnection)

    ‘Dim myCommand As New SqlCommand(strUpdateString, myConnection)
    da.SelectCommand.Parameters.Add(New SqlParameter(“@capResultsID”, intNewID))
    da.SelectCommand.Parameters.Add(New SqlParameter(“@strXMLCompany”, strXMLCompany))
    da.SelectCommand.Parameters.Add(New SqlParameter(“@strXMLDepartment”, strXMLDepartment))
    da.SelectCommand.Parameters.Add(New SqlParameter(“@strXMLCourseName”, strXMLCourseName))
    da.SelectCommand.Parameters.Add(New SqlParameter(“@strXMLLearnerName”, strXMLLearnerName))
    da.SelectCommand.Parameters.Add(New SqlParameter(“@strXMLLearnerID”, strXMLLearnerID))

    da.SelectCommand.Parameters.Add(New SqlParameter(“@strXMLLessonName”, strXMLLessonName))
    da.SelectCommand.Parameters.Add(New SqlParameter(“@strXMLQuizAttempts”, strXMLQuizAttempts))
    da.SelectCommand.Parameters.Add(New SqlParameter(“@strXMLTotalQuestions”, strXMLTotalQuestions))
    da.SelectCommand.Parameters.Add(New SqlParameter(“@strXMLStatus”, strXMLStatus))

    da.SelectCommand.Parameters.Add(New SqlParameter(“@strXMLLocation”, strXMLLocation))
    da.SelectCommand.Parameters.Add(New SqlParameter(“@strXMLRawScore”, strXMLRawScore))
    da.SelectCommand.Parameters.Add(New SqlParameter(“@strXMLMaxScore”, strXMLMaxScore))
    da.SelectCommand.Parameters.Add(New SqlParameter(“@strXMLMinScore”, strXMLMinScore))
    da.SelectCommand.Parameters.Add(New SqlParameter(“@strXMLSessionTime”, strXMLSessionTime))

    dt = New DataTable
    da.Fill(dt)

    Dim intNewHeaderID As Int64 = dt.Rows(0).Item(“NewHeaderID”)

    Dim strXMLDate As String
    Dim strXMLInteractionTime As String
    Dim strXMLInteractionID As String
    Dim strXMLObjectiveID As String
    Dim strXMLInteractionType As String
    Dim strXMLCorrectResponse As String
    Dim strXMLStudentResponse As String
    Dim strXMLResult As String
    Dim strXMLWeight As String
    Dim strXMLLatency As String
    Dim strXMLAttempt As String

    myConnection.Open()

    For Each nNode As XmlNode In strXML.GetElementsByTagName(“Interactions”)

    strXMLDate = nNode.SelectSingleNode(“Date”).Attributes.ItemOf(“value”).Value.ToString
    strXMLInteractionTime = nNode.SelectSingleNode(“InteractionTime”).Attributes.ItemOf(“value”).Value.ToString
    strXMLInteractionID = nNode.SelectSingleNode(“InteractionID”).Attributes.ItemOf(“value”).Value
    strXMLObjectiveID = nNode.SelectSingleNode(“ObjectiveID”).Attributes.ItemOf(“value”).Value
    strXMLInteractionType = nNode.SelectSingleNode(“InteractionType”).Attributes.ItemOf(“value”).Value
    strXMLCorrectResponse = nNode.SelectSingleNode(“CorrectResponse”).Attributes.ItemOf(“value”).Value
    strXMLStudentResponse = nNode.SelectSingleNode(“StudentResponse”).Attributes.ItemOf(“value”).Value
    If Not nNode.SelectSingleNode(“Result”) Is Nothing Then
    strXMLResult = nNode.SelectSingleNode(“Result”).Attributes.ItemOf(“value”).Value
    Else
    strXMLResult = “”
    End If

    strXMLWeight = nNode.SelectSingleNode(“Weight”).Attributes.ItemOf(“value”).Value
    strXMLLatency = nNode.SelectSingleNode(“Latency”).Attributes.ItemOf(“value”).Value
    strXMLAttempt = nNode.SelectSingleNode(“Attempt”).Attributes.ItemOf(“value”).Value

    strUpdateString = “INSERT INTO capData (capDataHeaderID, capDataInteractionDateTime, capDataInteractionID,

    capDataObjectiveID, capDataInteractionType, capDataCorrectResponse, capDataStudentResponse, capDataResult, capDataWeight,

    capDataLatency, capDataAttempt) ” & _
    “VALUES (@capDataHeaderID, @capDataInteractionDateTime, @capDataInteractionID, @capDataObjectiveID,

    @capDataInteractionType, @capDataCorrectResponse, @capDataStudentResponse, @capDataResult, @capDataWeight, @capDataLatency,

    @capDataAttempt) “
    Dim myCommand As SqlCommand = New SqlCommand(strUpdateString, myConnection)

    ‘Dim myCommand As New SqlCommand(strUpdateString, myConnection)
    myCommand.Parameters.Add(New SqlParameter(“@capDataHeaderID”, intNewHeaderID))
    myCommand.Parameters.Add(New SqlParameter(“@capDataInteractionDateTime”, CType(strXMLDate & ” ” &

    strXMLInteractionTime, Date)))
    myCommand.Parameters.Add(New SqlParameter(“@capDataInteractionID”, strXMLInteractionID))
    myCommand.Parameters.Add(New SqlParameter(“@capDataObjectiveID”, strXMLObjectiveID))
    myCommand.Parameters.Add(New SqlParameter(“@capDataInteractionType”, strXMLInteractionType))
    myCommand.Parameters.Add(New SqlParameter(“@capDataCorrectResponse”, strXMLCorrectResponse))
    myCommand.Parameters.Add(New SqlParameter(“@capDataStudentResponse”, strXMLStudentResponse))
    myCommand.Parameters.Add(New SqlParameter(“@capDataResult”, strXMLResult))
    myCommand.Parameters.Add(New SqlParameter(“@capDataWeight”, strXMLWeight))
    myCommand.Parameters.Add(New SqlParameter(“@capDataLatency”, strXMLLatency))
    myCommand.Parameters.Add(New SqlParameter(“@capDataAttempt”, strXMLAttempt))
    myCommand.ExecuteNonQuery()

    Next

    myConnection.Close()

    ‘ foreach ($_POST as $k => $v)
    ‘ {
    ‘ if($k == “CompanyName”)
    ‘ {
    ‘ $CompanyName = $v;
    ‘ }
    ‘ if($k == “DepartmentName”)
    ‘ {
    ‘ $DepartmentName = $v;
    ‘ }
    ‘ if($k == “CourseName”)
    ‘ {
    ‘ $CourseName = $v;
    ‘ }
    ‘ if($k == “Filename”)
    ‘ {
    ‘ $Filename = $v;
    ‘ }
    ‘ if($k == “Filedata”)
    ‘ {
    ‘ If (get_magic_quotes_gpc()) Then
    ‘ $Filedata = stripslashes($v);
    ‘ Else
    ‘ $Filedata = $v;
    ‘ }
    ‘ }

    ‘$ResultFolder = “./”.”CaptivateResults”;
    ‘mkdir($ResultFolder);
    ‘$CompanyFolder = $ResultFolder.”//”.$CompanyName;
    ‘mkdir($CompanyFolder);
    ‘$DepartmentFolder = $CompanyFolder.”//”.$DepartmentName;
    ‘mkdir($DepartmentFolder);
    ‘$CourseFolder = $DepartmentFolder.”//”.$CourseName;
    ‘mkdir($CourseFolder);
    ‘$FilePath = $CourseFolder.”//”.$Filename;
    ‘$Handle = fopen($FilePath, ‘w’);
    ‘fwrite($Handle, $Filedata);
    ‘fclose($Handle);

    End Sub
    End Class

    ***************************************************

    This is the sql scripts I used to create the tables involved. You will have to change “IntranetWeb” to the name of your

    database:

    USE [IntranetWeb]
    GO

    /****** Object: Table [dbo].[capResults] Script Date: 05/08/2012 15:45:58 ******/
    SET ANSI_NULLS ON
    GO

    SET QUOTED_IDENTIFIER ON
    GO

    SET ANSI_PADDING ON
    GO

    CREATE TABLE [dbo].[capResults](
    [capResultsID] [int] IDENTITY(1,1) NOT NULL,
    [capResultsDate] [datetime] NOT NULL,
    [capResultsListOfVars] [varchar](5000) NULL,
    [capResultsListOfFormVars] [varchar](5000) NULL,
    [capResultsCompanyName] [varchar](50) NULL,
    [capResultsDepartmentName] [varchar](50) NULL,
    [capResultsCourseName] [varchar](50) NULL,
    [capResultsFileName] [varchar](50) NULL,
    [capResultsFileData] [varchar](max) NULL,
    [capResultsFileUpload] [varchar](max) NULL,
    CONSTRAINT [PK_capResults] PRIMARY KEY CLUSTERED
    (
    [capResultsID] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS =

    ON) ON [PRIMARY]
    ) ON [PRIMARY]

    GO

    SET ANSI_PADDING OFF
    GO

    ALTER TABLE [dbo].[capResults] ADD CONSTRAINT [DF_capResults_capResultsDate] DEFAULT (getdate()) FOR [capResultsDate]
    GO

    USE [IntranetWeb]
    GO

    /****** Object: Table [dbo].[capDataHeader] Script Date: 05/08/2012 15:46:02 ******/
    SET ANSI_NULLS ON
    GO

    SET QUOTED_IDENTIFIER ON
    GO

    SET ANSI_PADDING ON
    GO

    CREATE TABLE [dbo].[capDataHeader](
    [capDataHeaderID] [int] IDENTITY(1,1) NOT NULL,
    [capResultsID] [int] NULL,
    [capDataHeaderCompanyName] [varchar](50) NULL,
    [capDataHeaderDepartmentName] [varchar](50) NULL,
    [capDataHeaderCourseName] [varchar](50) NULL,
    [capDataHeaderLearnerName] [varchar](50) NULL,
    [capDataHeaderLearnerID] [varchar](50) NULL,
    [capDataHeaderLessonName] [varchar](50) NULL,
    [capDataHeaderQuizAttempts] [int] NULL,
    [capDataHeaderTotalQuestions] [int] NULL,
    [capDataHeaderStatus] [varchar](50) NULL,
    [capDataHeaderLocation] [varchar](50) NULL,
    [capDataHeaderRawScore] [int] NULL,
    [capDataHeaderMaxScore] [int] NULL,
    [capDataHeaderMinScore] [int] NULL,
    [capDataHeaderSessionTime] [datetime] NULL,
    CONSTRAINT [PK_capDataHeader] PRIMARY KEY CLUSTERED
    (
    [capDataHeaderID] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS =

    ON) ON [PRIMARY]
    ) ON [PRIMARY]

    GO

    SET ANSI_PADDING OFF
    GO

    USE [IntranetWeb]
    GO

    /****** Object: Table [dbo].[capData] Script Date: 05/08/2012 15:46:07 ******/
    SET ANSI_NULLS ON
    GO

    SET QUOTED_IDENTIFIER ON
    GO

    SET ANSI_PADDING ON
    GO

    CREATE TABLE [dbo].[capData](
    [capDataID] [bigint] IDENTITY(1,1) NOT NULL,
    [capDataHeaderID] [int] NOT NULL,
    [capDataInteractionDateTime] [datetime] NOT NULL,
    [capDataInteractionID] [int] NULL,
    [capDataObjectiveID] [varchar](50) NULL,
    [capDataInteractionType] [varchar](50) NULL,
    [capDataCorrectResponse] [varchar](50) NULL,
    [capDataStudentResponse] [varchar](50) NULL,
    [capDataResult] [varchar](50) NULL,
    [capDataWeight] [int] NULL,
    [capDataLatency] [datetime] NULL,
    [capDataAttempt] [int] NULL,
    CONSTRAINT [PK_capData] PRIMARY KEY CLUSTERED
    (
    [capDataID] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS =

    ON) ON [PRIMARY]
    ) ON [PRIMARY]

    GO

    SET ANSI_PADDING OFF
    GO

    • http://blogs.adobe.com/captivate Shameer Ayyappan

      Ofir, thanks for sharing the vb.net solution for internal server (alternate) reporting in #AdobeCaptivate

  • Drichmond

    I’ve gotten my script created but have a specific variable that is in the URL that i also need to post to the database as well (TicketID=jdfsad7234jkldsaf;kasdf) this is the encrypted ticket number of the quiz they just took. Is there any way for me to request this parameter and pass it to the custom script? I did this in captivate 4 all the time but now in 5 it looks like the custom posting to database is relegated to just posting score, time, coursename, learnername and just a couple of other things. I sell courses online and the ticketid is how i mark a quiz complete when i submit the score to the DB. Thanks!

  • Paul T

    Links to tutorials broken. Any way to integrate with WordPress existing database w/Captivate results?

  • Stephane

    Is there a way to avoid showing the user id and email prompt when sending the scores to a local server? I really don’t want this prompt to show since I already have the users login info in a session variable.

    • Alan Hare

      Did you receive an answer to your question?

    • Rakesh Jainapally

      Stephane,
      any luck?

  • Rick Sanchez

    I noticed that the CaptivateResults folder was not created. Is there a step missing, or is there a way to simply create a folder in a location where the php expects to find the CaptivateResults folder?

    • http://www.adobe.com Chinmay Baid

      Can you please tell some more details about the issue? Have you placed the PHP files (internalServerReporting.php & internalserverread.php) at the correct location?

  • Pingback: Connect Adobe Captivate 6 to a MySQL database | Jisku.com - Developers Network

  • Scruffito

    Are there any updates about writing Captivate results to a MySQL database? Has anyone written a script to do that?

    • Scuffito

      Via PHP, I should have said.

  • Patricia Ramirez

    I need help please with deleting quiz results from Adobe Captivate Quiz results Analyzer. I do not seem to be able to when selecting the delete button

  • Thomas Bird

    I have a site that was using Captivate software and to my knowledge had been saving the test results and users information correctly for sometime. Just recently within a week or two the users have been reporting issues with the test not saving their information and getting error messages. Does anyone have a clue why this could be? Attached is an image of the error the users are getting

    • http://blogs.adobe.com/captivate Shameer Ayyappan

      Hi Thomas, Has the InternalServerReporting.php file
      changed in your local system?

      You can also try to restart internal server once.

  • Carole

    Does the Quiz Results include information about the test taker like an email address or name?

  • Neil Hoskins

    When I put the correct url in the Captivate settings and hit ‘OK’, it doesn’t create the “CaptivateResults” folder and doesn’t work.

  • Rachel

    Is there a way to capture or report the date the quiz was taken in the Quiz Analyzer? The only place I can find the date is in the XML file captivate creates in the “Captivate Results” folder. But, I can’t XML data into a usable/trackable format. I’d like to be able to generate a report in the Quiz Analyzer and then export it to excel where I can track it…but without the date I don’t know when they took the quiz and when my trainees need to renew/retake the course. Can anyone help?

  • Loading
  • Categories

  • Archives

  • Authors

  • Recent Comments

    • Pete Flynn: Just tried to view the “Recording Link” . . . 413 Header Length too Large What???
    • Ariyo Usman Oluwafemi: I am representing a publishing company which I have already created the ebooks on an indesign...
    • Dr. Pooja Jaisingh: Thanks Rossco :)
    • Rossco: Ealier post had heaps of typo’s so reposting… Hi, yes very helpful tutorials thanks, easy to...
    • Rossco: Hi, yes very helpful tutorials thatnks, easy to follow and steps youn thourrhgn all the way :-)
  • Captivate & eLearning Videos

    Subscribe to Adobe eLearning on YouTube.

    Check out the latest eLearning Videos on AdobeTV

Recently Approved