1 Reply Latest reply on May 12, 2008 12:08 PM by mark2741

    AICC Communication Between Flash & Breeze

    asm0d Level 1
      Hi all,

      You know it, you hate it: building quizzes (and other interactions) using Presenter. But there *is* another option: Build your quiz completely in Flash and upload it directly to Breeze. That way, you have 100% control over how it looks, how it works, and what it does. However, you need to add a little extra code to get it to talk with Breeze if you want to use the LMS functions (completion tracking and such) built in to the server.

      The key is that Breeze is somewhat AICC compliant. I say *somewhat* because the CMI Guidelines for Interoperability from the AICC is next to useless. I had to hack out the commands myself.

      To talk with Breeze, your Flash module requires an HTML "wrapper" which handles the actual commuication. Simply put, the Flash module uses "fscommand()" to send data to the wrapper, which then uses JavaScript to pass the data on to Breeze. Luckily for us, Flash will automatically generate the AICC wrapper files necessary; under your publishing options, make sure HTML is one of the formats, and set it to "Flash with AICC Tracking".

      Now, Flash has a bunch of built-in "learning interaction" components, and even a quiz template. If you don't want to delve any deeper into Flash than that, use the quiz template, publish with AICC support, and upload the resulting fileset to Breeze. The only problem I ran into doing this was that the wrapper files generated by Flash 8 were not compatible with our copy of Breeze (5.5); I had to use the wrapper files from Flash 2004 instead.

      But, if you're like me, you want to make your own learning interactions (with moving conveyor belts and dancing bears and such), and need to write your own code to support that. This is simply a matter of knowing which commands to send to the wrapper to pass the data along. Pasted below is the results of my experimenting to date; I ended up making a small utility to test communication with Breeze to figure out which of the commands that the wrapper recognized actually did something in Breeze. Enjoy!

      AICC Communication between Flash and Breeze

      AICC Abbreviations

      AICC Aviation Industry CBT Committee
      AU Assignable Unit (the module, quiz, presentation, etc.)
      CMI Computer Managed Instruction (a.k.a. LMS, or Breeze)

      Typical format in Flash:

      fscommand (command, argument);

      where both the command and its arguments are strings. If there is more than one argument, they are contained in one string and separated by semicolons (;).

      fscommand (“MM_cmiSetLessonStatus”, “i”);

      fscommand (“MM_StartSession”, “obj_1;101;Quiz1”);

      Commands and What They Do

      MM_cmiSetLessonStatus and CMISetStatus

      arguments: c or complete
      i or incomplete
      p or passed
      f or failed

      Sets the status of the AU under the Curriculum Contents. Can be sent at any time; status updates in Breeze when student closes the presentation. Typical use: Set the status to incomplete at the start of the training (changing it from not taken to incomplete) and complete when they get to the end.

      It also appears that Breeze uses these flags to determine the “time complete” and “time taken” values. Whenever you send a status change in to the server, it sets the “time complete” to that time. For example: The current status is “incomplete”. At 10:56 you send in a “passed” status, and at 10:58 you manually close the AU. The “time complete” will be 10:56, not 10:58. The “time taken” value (available under reports) seems to be cumulative for all attempts.

      Aliases (no arguments):
      Sets status to:
      CMISetStarted incomplete
      CMISetCompleted complete
      CMISetFailed failed
      CMISetPassed passed


      arguments: grade, in %

      example: fscommand(“CMISetScore”,”98”);

      Sets the overall grade for the AU, in percent. The session must include a status change command (before or after) to be updated in Breeze. If a status change message is sent without a set score message somewhere in the session, the grade for the AU changes to 0.


      arguments 1. Date, in YYYY/MM/DD “2008/01/09”
      2. Time, in HH:MM:SS “01:25:07”
      3. Interaction name “Interaction_01”
      4. Object name – usually null?
      5. Interaction Type
      T – true / false
      F – fill in the blank
      M – matching
      S – Short answer
      C – choice (multiple guess or T/F)
      P - performance
      L – Likert
      6. Correct answer “True”
      7. Student answer “False” or “1.a, 2.b”
      8. Result
      W – wrong
      C – correct
      9. Weight – point value for question
      10.Latency – HH:MM:SS – time required to answer

      Example: fscommand (“MM_cmiSendInteractionInfo”, arguments);
      where the “arguments” string is: “2008/01/07;13:51:14;Interaction_01;;C;{1.a,2.b,3.c,4.d};{1.a,2.b,3.c,4.d};C;1;00:02:51”

      This is the command used to send interaction (question) info to the server. The AU must also send a state change message before closing for Breeze to update. NOTE: Breeze tracks a “question” value, which is a string with the text of the question which is used in reports. This string does not appear to be one of the arguments for this command.

      Argument notes:
      Date – no apparent use
      Time – no apparent use
      Interaction ID – used to distinguish one from another for tracking purposes. Numbers are not respected; if you send in two interactions (“int_01” and “int_05”), they will be tracked as questions 1 and 2 on Breeze. It does keep track of names, so sending in “int_01” on first test and “int_02” on a second test will produce a report with two questions.
      Object ID – no apparent use
      Interaction type – no apparent use
      Correct answer – a string with the right answer or set of answers. Not used.
      Student answer – a string with the student’s answer. Used for reports
      Result – C for correct or W for wrong – how Breeze grades the question
      Weight – number of points the question is worth. Used when Breeze calculates the grade for reports.
      Latency – how much time was spent on the question, in HH:MM:SS. required, but usage unknown.

      Non-Responsive Commands

      arguments: (loginURL, activityID, activityName)

      Example: fscommand(“MM_StartSession”,”<null>;101;Quiz1”)



      Unknowns: How does it track slide viewing?
      Where does it get the “question” string used in reports?
        • 1. Re: AICC Communication Between Flash &amp; Breeze
          mark2741 Level 1
          Hi asm0d,

          I sent you a private message but not sure if it went through.

          I tried playing with the above but am not getting a score to save, or able to set the course status to 'incomplete'. Here are the steps I've taken so far, with no luck:

          1. Setup a Flash 8 .fla with a few buttons. I have a script frame with the following code in it for the buttons:

          * setStatus to incomplete to start the lesson
          setStatus_btn.onRelease = function()
          fscommand("MM_cmiSetLessonStatus", "i");

          * setScore to 98%
          setScore_btn.onRelease = function()
          fscommand("CMISetScore", "98");

          * setStatus to complete - must be done in order for score to be saved
          complete_btn.onRelease = function()
          fscommand("MM_cmiSetLessonStatus", "c");

          2. I publish it with the Flash with AICC setting.

          3. I zip up the swf and html files and upload as a new course into Connect, and then click on the different buttons to set the status and the score. But every time I try it the only reporting in Connect states that the user has completed the course. No score ever.

          I've also tried copying in the AICC files from the C:\Program Files\Adobe\Flash CS3\en\First Run\Lrng Srv Files and renamed the frameset.html to index.html. Still no luck. Do you have an example you could send me? Or at least help me out with any pointers/clarifications? I would really appreciate it.