Tutorial: Branching using Advanced Actions in Adobe Captivate 4

12

I have just been working on a large project involving a big course that would be distributed to roughly 18.000 users.

The challenges were many but in particular these things made it pretty tricky:

  • The course was to be delivered through an LMS (e.g. SCORM compatible)
  • The course was multi-lingual (4 different languages) so the user should be able to pick their language of choice and then get the appropriate content.
  • The course was aimed at 9 different types of people based on their functional area and job and all of them needed individual information but should also be allowed to view all the other areas.
  • An earlier version of the course was already deployed in the LMS and this should replace that (e.g. the file structure and SCORM manifest should remain the same.)

Language selection:

The first task was the language selection. I decided that I would create 4 separate Captivate files  – one for each language – and then use a Flash loader to keep track of the selected language and load the relevant file. The Flash language loader basically asks the user which language they want to use when they start the course. This value is then saved in the LMS and used throughout the course by the Flash loader to display the correct content to the user.

Major branching exercise:

The next task was to figure out how to handle the branching when the course contained mandatory information for everyone as well as optional information. The information flow in the course was distributed like this image shows.

This diagram shows the information flow for the course

Figure: The information flow in the course

The blue boxes indicate mandatory elements that all students needed to go through. Then in the middle of the course we have the 9 different functional areas, which contains the information relevant to that particular area. After the user had reviewed that information they would then see some more mandatory information and then the course was finished.

The problem was that a person working in the office for example should get the mandatory information – then some information specific to his/her functional area and then some more mandatory information. A person working in production would see the mandatory information – then the information specific to his/her area and finally some more mandatory information.

However a manager would need to go through the mandatory information and then all the 8 separate areas and finally the remaining mandatory information. It should also be possible for interested employees to go through all the areas if they wanted to.

The solution:

So how should I handle these 9 different areas properly? It all needed to be within one Captivate SWF due to the restriction of reusing the old SCORM structure and I also had to keep the 4 separate languages in mind.

The answer was to use the advanced actions capabilities of Adobe Captivate 4. It wasn’t completely painless since I ran into some restrictions and shortcomings but I managed to get it to work.

I started off by creating a “launch” screen on the first page of my course. This screen contained information about the course itself (objectives, duration etc.) but also asked the employee to select his/her functional area.

An illustration of how the course menu works

Figure: An example of a launch screen

Once the user clicked on of the areas I executed an “On success” – Multiple actions that set the areaVariable to the relevant number and proceeded to the next slide with the mandatory information for everyone.

Setting the areaVariable using Multiple=

Figure: The action on the click boxes on the launch screen

At the end of the section with the mandatory information I inserted a blank slide with a 0.1 duration. This slide had an “On slide enter” event that executed an advanced action that I called branchingAction.

This action checks the value of the areaVariable and sends the user to the relevant slide for his/her area.

The branching action part 1

Branching action part 2

Figure: The branchingAction

The action contains the same functionality for all 9 areas. If the areaVariable is equal to zero then that means that the user is a manager (or have chosen to review the entire course). Then it will proceed to the next slide.

Check if (areaVariable is equal to 0)
begin
Go to next slide
Continue
end
Or Else
begin
end

This worked just fine but two new problems occurred.

Problem 1:

As you can see I have put a “Continue” command after the “Jump to slide” command. This is because that when you jump to a slide like this then the slide will start off with a paused state. It will not jump to the slide and commence playback but instead jump to the slide and pause. I needed it to start playback immediately after the jump so I put the Continue command into the advanced action.

However this does not work… The Continue command will NOT make the project play after you jump to a slide. I tried multiple ways of getting the slide to play from within Captivate but as far as I could figure out there is no way to do it from Captivate. Basically this means that the user needs to press play on your playbar to resume playback of the course. Since I don’t use the playbars (and I also find it stupid that a user needs to push play again) this was not an option.

Update: Based on Lori’s comment to this post I created a new test project to figure out why I was experiencing this problem. The reason is that if you use your own navigational buttons instead of the standard playbar then Captivate will not resume playback on a slide jumped to from an advanced action. In my mind it’s clearly a bug in Captivate and I will submit a bug report to Adobe.

The solution to problem 1 was to create a small Flash file that would force Captivate to resume playback after jumping to the slide. The Flash file can be downloaded here in case you need it -> resumePlaybackSWF (1159 downloads)

I then inserted this Flash file on all the slides that my action would jump to and problem solved.

Problem 2:

So now that I got the resume playback to work I had another problem. Once a user had selected their functional area and had finished reading the information then they should be sent off to the rest of the mandatory content. However now if the user clicked next they would get the information from one of the other functional areas since those slides were located after each other.

My projects first 29 slides contained the launcher and the mandatory information. Then I had roughly 40 slides after these 29 slides that contained the information for each of the functional areas. Finally I had 10 slides in the end that contained the last part of mandatory information in the course.

Basically what I needed to do was to have a user that had read the content in their functional area to be sent off to slide 69 that contained the remaining part of the course. However I also had users that needed to review the entire course (managers) so I couldn’t just create a jump to slide 69 on the last page of all my functional area content slides.

The solution was to create another advanced action – branchingCompleted.

The branchingCompleted action

Figure: The branchingCompleted action

This action checks if the areaVariable is equal to zero (e.g. a manager that needs to complete the entire course) and if so then it sends the user to the next slide. In all other cases it will jump to the first slide of the last part of the course.

In order for this to work I had to insert blank slides of 0.1 seconds duration after all my functional area content. These slides contained an “On slide enter” – Execute advanced action that ran my branchingCompleted action.

This solved the second problem as Adobe Captivate now checked the status of the areaVariable after each functional area.

Wrap-up:

The above process allowed me to create a course in Adobe Captivate with four separate languages and 9 different branches. Works like a charm and it’s simple to update as each language is contained within a single Captivate file.

Hopefully this will help you a bit on the way if you a creating something similar one day.

/Michael

Share.

12 Comments

  1. Hi Michael,

    Very cool that you implemented this using advanced actions. Many Captivate developers have no idea how powerful the actions make the tool and the cool things you can do with it. I have done several projects for clients like the one about also using the advanced actions in a similar fashion to yours. However, I have never run in to your problem #1 (slides not continuing once jumped to). I’m curious why your project is behaving like this. Can you throw me some more details about the slides being jumped to that are not auto playing? I’d like to figure out what’s different between my projects and yours.

    Thanks,
    Lori Smith
    IconLogic, Inc.

  2. Hi Lori,

    Thanks for your comment.

    Well the slides that are being jumped to are actually nothing special. Just regular Captivate slides with images, text captions, some flash interactions on some of them but nothing special. This course contained standalone navigation buttons inserted directly in Captivate so it doesn’t use the standard playbar. The buttons are just regular Captivate Buttons and set to be active from 0.0 seconds and pause after around 6 – 14 seconds depending on the amount of stuff on the slide.

    The project itself is an AS2 project containing 75 slides in total.

    I find it quite interesting that you haven’t encountered this issue with your projects so I will try and make a test project tomorrow with some blank slides and see if I still get the same problem.

    The only thing that I can think off that was done differently with this project was that it was originally a Captivate 3 project and I converted it to Captivate 4. However I don’t see why that should create this problem.

    Best regards,
    Michael

  3. Hi again Lori
    I figured out the problem. This occurs when you are using your own navigational buttons in a Captivate project. Apparantly then Captivate will pause slides that are jumped to from advanced actions.
    In my mind this is clearly a bug in Captivate.
    I will update the post with this new information.
    You can download my test file that illustrates the problem here: https://www.cpguru.com/wp-content/branchingTest.zip

    /Michael

  4. Hi Michael,

    I found the bug! 🙂 On all your navigation buttons, you had “pause for success/failure” semi selected. Meaning it was greyed but with a checkmark in the box. When I removed all those, it plays automatically after jumping to the proper slide.

    In addition, there were some other ghost checkmarks in your reporting on the buttons. You can see these by looking at the advanced interaction screen. We’ve found that these greyed checkboxes can cause bizarre behavior.

    Hope the fix works in your version!!

    — Lori

  5. Hi Lori

    Wow – I did not know that. That is some strange behaviour, but good to know. I just tried to remove those greyed out tick marks and now it seem to work just fine.

    Thanks alot for your time with this – I will update the post yet again to reflect this. I’m sure that this is a problem that could affect many developers.

    Thanks again Lori.

    /Michael

  6. Hi Michael,

    conpliments for cpguru.com site!!!

    I have a question regarding the “Language selection”, can you clarify your Flash loader:
    “then use a Flash loader to keep track of the selected language and load the relevant file. The Flash language loader basically asks the user which language they want to use when they start the course. This value is then saved in the LMS and used throughout the course by the Flash loader to display the correct content to the user.”

    How can the flash loader communicate with LMS? Can you show it?

    Many Thanks !!!
    Alberto

    (I have bought your bookmarkwidgetadobecaptivate, it’s very powerfull!)

  7. Hi Alberto,

    Thanks for your kind words.

    I can’t really show how to do it here because it involves alot of things. We also went a bit outside the SCORM standard on this because we have a variable in our LMS that we can write data to and access across all SCO’s in a course. This is not standard in an LMS though.

    A helicopter overview of how we are doing it is like this:
    – We have a Flash or Captivate file with the language selection as our first chapter. Basically the user clicks a flag and then we use JavaScript to store the relevant language in the custom variable.
    – All other chapters have a Flash file as a loader. This file will request the selected language from our LMS through JavaScript and based on the return value it will load and display the relevant Captivate file.

    /Michael

  8. Michael/Lori:
    I am new to Captivate (using Captivate 4) and have a more basic question. After completing a quiz, I am able to have the user go directly to the relevant page given their answers. That works fine. But once the user finishes that page they then need to skip the irrelevant ones and get back on course, and I cannot figure that one out, particularly since I do want to leave the navigation bar in place.
    For example, if after slide 1, answer “a” takes them to slide 2 and answer “b” takes them to slide 3, I need them after slide 2 to go directly to 4.
    Under Slide Properties there is an option for “on slide exit” which I set to “Jump to slide 4” but it does not jump. Any idea why?

    Thank you, Richard

  9. Hi Richard,

    If you are using the “Jump to slide” function then it should work. Perhaps try and wrap the jump to slide command in an Advanced action and see if that works.

    Create an advanced action (shift+f9) and then select Jump to Slide 4. Save it and on the slide in question select your new action on the “on slide exit”.

    Let me know if it works.

    /Michael

  10. Hi Richard,
    I’ve found that putting things OnSlideExit does not work out well for me. That stuff only seems to get executed if you “continue” all the way through the slide until the slide naturally ends. If you exit via a button or click, it doesn’t execute.

    I’m not sure I understand your original problem though. Depending on their answer to Q2, you want to go to Q3 or Q4? I believe that is doable, but would certainly require some advanced action to be in place. The Quiz slides are particularly tricky since they won’t let you program the buttons the way you can on a normal slide.

  11. First time caller:

    I have the branch working through Actions fine. The problem is it seems silly that when someone hits back with the playbar I can’t get that to send them back to the previous branch based on that variable I set with their previous decision.

    Is there a way to access the back button press and alter the jump to based on the same values I used in check if.

    It would be a blank page before the “paths come back together page and would check the choice the user had made, and it would be on the first page of each individual path to have them go back to the selection page, not really the previous slide in the order of slides.

    Thanks for any help.

    Zcarr

  12. Michael – Great information, and very timely. I am getting ready to do my first Branching course that has a lot of similarities to yours.

    Thanks again!