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.)
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.
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.
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.
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.
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.
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)
Go to next slide
This worked just fine but two new problems occurred.
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 (916 downloads)
I then inserted this Flash file on all the slides that my action would jump to and problem solved.
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.
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.
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.