Reuse Shared Actions in other Projects - Captivate 7 vs. 8

Intro

A while ago I started a sequence of tutorials about shared actions in Captivate 7: I promised then to explain how you can reuse the actions in another project. And then Captivate 8 appeared with a considerable improvement of shared actions: variables and literals are now candidate parameters. In my last article I explained the difference and consequences of this extension. And the examples I showed in my review of Features of Captivate 8, which were not possible to realize only with shared actions in Captivate 7 prove the value of that improvement.
Advantages of using shared actions (both in 7/8) within same project:
  1. Saving time: you don't have to create a new name as for a duplicated advanced action, just choose the parameter(s)
  2. Managing shared actions is in the Library, not in a separate dialog box
  3. Since you are using the same shared action over and over again, this helps keeping file size down
The real power of shared actions is even more apparent when you start to reuse them in other projects. You only have to get them in a new project, and you can use the shared actions like you did in the original project. Of course, you'll have to create the objects that have been used as parameters. Captivate 7 users will not be able to use variables, nor literals as parameters. For Captivate 8 users have a close look at the tips at the end of this article. Let us start with the different work flows that can be used to get shared actions from one project to another one. 

Getting shared actions in another project

1. Using Export/Import (7 - 8)

Similar to other Library assets, you can export shared actions from the Library and import them in another project. Use the small icons in the top bar of the Library:

The extension of those small exported files is cpaa. When they are imported in another project:

  • They appear in the Library of that project, with a Usage of 0

  • If the shared actions do use variables that are not defined as parameters, those variables will be created in the project to which you imported the shared actions.

2. Copy/Paste from External Library (7-8)

This is my preferred work flow. I love keeping much used assets in a separate project file, that I use as External Library:

  • Project file that you want to use as Library has to be closed

  • Use File, Import, External Library and point to the project file

  • Copy/paste the shared actions to the Library of the active project fie.

The results will be the same as with the first method, but you don't have to bother about saving the exported files somewhere and importing them from that same location. 

CP8 tip:

If you are using the default UI, not the Expert mode, this External Library will open as a Floating panel. This means that you can drag it wherever you want, increase its size etc. That functionality is available in CP8 for the normal panels only when you choose for Expert mode. 

3. Drag from External Library (8)

These work flows are not possible in Captivate 7.
You can drag shared actions from the external Library to the present project Library, alternative for Copy/Paste/
But you can also drag a shared action from the External Library directly on:
  • a slide: in that case it will be associated with the On Enter event, and you can immediately choose the parameter
  • an interactive object (button, click box, shape button...): in that case the shared action will be associated with the On Success event of the interactive object.
At the same time the Shared action will appear in the Library, but since it is immediately used, there will be a Usage of 1. If the shared action has variables that are not defined as parameters, they will be created in the project file. 
Dragging from the library on a slide or an interactive object is also possible from the present library of course.

Tips and Tricks for Captivate 8 users

1. Warning about dragging from External Library on event

If you have several shared actions that use the same variable, do not drag them on slides or interactive objects. There is a small bug (hopefully will be removed soon): if you drag them one by one to an event (on slide or object), before those shared actions are in the present Library, the variable will be created as many times as you execute a drag action. And each variable will have another name, which can be disturbing the logic of your shared actions.

Example: 

In the Dashboard use case, described in Features of Captivate 8 the variable v_counter is used in two shared actions, and one advanced action:

If you drag the shared action FirstViewBt from an External Library to a new project (like the last movie in the same article), not to the Library but immediately on one of the buttons used on the first dashboard visit, the variable v_counter - not defined as a parameter - will be created. If you do the same with the shared action NextViewBt, it will not use the created variable v_counter, but a second variable v_counter1 will be created. This will cause problems: not only will the number of visits not be updated as expected, but the Advanced action, ResetStart, will only reset the variable v_counter, not the second one v_counter1

To avoid this kind of problems: drag the shared actions (all at once is possible) from the External Library to the present Library (Usage will be 0), and drag them from that Library onto events.

2. Choosing variables as parameters

In Captivate 8, variables and literals don't have to be parameters, they are only candidates. You can easily choose a variable to be a parameter in one shared action, and not in another one. 

Example: 

For the Dashboard use case, the variables v_ch1, v_ch2, v_ch3 and v_ch4 are:

  • defined as parameters both in the shared actions FirstViewBt and NextViewBt because they have to be edited when applied to another button

  • not defined as parameters for the shared action EnterDash, because they have never to be edited.
When dragging (or copy/paste) the shared actions from the External Library to the present project Library, this saved time because I didn't have to define the variables, they were imported with EnterDash. I could use them right away as parameters in the two other shared actions.

3. Careful with literals as parameters

In some rare use cases it can be interesting to define a literal as a parameter. I want to warn however: if you define a literal of 1 as a parameter and that number appears several times in the shared action, all the literals will be changed to the value you give when entering the parameter value. 

Examples

QuizMessage: a conditional action with 4 decisions, that shows a different item/group based on the obtained percentage for a Quiz. In this case it can be useful to define the limiting scores as parameters:

Whereas in this case, it is not a good idea to define the '1' as a parameter, because it appears in two different lines, once in the condition itself and once in the Assign statement. Only when you can replace the Assign by a Toggle statement, you could define the literal as a parameter because in that case it would appear only in the condition:


Conclusion

As long as you can apply the shared action without having to edit a statement/condition, or to add/delete a line they can be a real time saver. But often editing is necessary, certainly in Captivate 7. For the Dashboard use case: if you do not have the same number of buttons on your dashboard, you have to edit the EnterDash action for sure.  And how do you manage shared actions? I will write another blog post in the near future on those subjects.




Parameters in Shared Actions - Captivate 7 vs. 8

Intro

In my last article, where I explained my exploration of Captivate 8, with strong focus on the enhancements of shared actions (shape buttons, theme colors), I have promised to explain my work flow to prepare the shared actions for import into another project. The idea is to create a library of shared actions that can be used over and over again in all future projects. Maybe you want me to create such libraries, post a comment if that is the case.
Since I started a sequence of articles about shared actions in Captivate 7 (Dare to Share 1 and Dare to Share 2) and promised then to explain how to reuse shared actions in other projects, this article will be an in-depth explanation of the differences between version 7 and 8 concerning parameters. 

Parameter in shared action - definition

What is a 'parameter', new Captivate term since the introduction of shared actions with Captivate 7? It is an item that is replaceable by another item when you reuse the shared action either in the same or in another project. The range of items that can be used is extended in the latest version (see further). Some examples of 'item': slide, text container, image, button, audio clip, group. When defining the shared action, you have to enter a description of each parameter. Those descriptions are very important (I know some users find it always cumbersome to type descriptions) because the 'replaceability' rules are very tolerant, flexible. It is not necessary to replace an item by an item of the same type! You can replace a text caption by an image, an audio object,  group with objects, perhaps for a Hide or a Show action (examples in Dare to Share 2).

What is the difference in parameters between Captivate 7 and 8 

Captivate 7 compared with Captivate 8 

1. Parameters in Captivate 7

All slides, objects, groups that you use in an advanced action to be converted to a shared action, compulsory will become a parameter in Captivate 7. Examples:
  • Slides: mostly used with 'Jump to' statement, not really interchangeable with another item
  • Non-interactive objects  (captions, images, rollovers, highlight boxes, shapes, audio objects...); often used with 'Hide' or 'Show' statements. Those objects are interchangeable, also with interactive objects and groups; they can also be used with 'Apply Effect'.
  • Interactive objects (buttons, click boxes, Text Entry Boxes, shape buttons), that can be used with 'Hide', 'Show', 'Enable', 'Disable' statements, totally interchangeable like non-interactive objects
  • Audio clips: when used with statement 'Play Audio'; not really interchangeable contrary to audio objects.
  • Grouped objects: mostly with Hide' or 'Show'. Even if all objects in group are interactive, the statements Enable/Disable cannot be applied. Neither can 'Apply Effect'.
The most important limitation in Captivate 7 is that variables cannot be a parameter. As I explained more in detail in this On Demand webinar about Shared Actions (Adobe ID required), this means that you'll often be forced to use the shared action as a template for an advanced action, instead of using it as shared action. I will explain this work flow in a future post for CP7-users. In this screenshot you see a shared actions opened in the Advanced Actions dialog box (using the template menu top left, where you see ChapIn). First two statements cannot be changed if used as a shared action. This is the CP7 equivalent of the actions described for the first buttons in the Dashboard in my last post.

When you import a shared action into another project, and that action is using variables, the variables will automatically be created in that project, which is a time saver.  If only the shared action shown in the screenshot was imported in another project, the variable v_ch1 would be created.  Another reason to establish a personal labeling discipline :).

 

2. Parameters in Captivate 8

Captivate 8 has the same compulsory parameters as Captivate 7 but it has also candidate parameters, a term I'm using for those items for which you have the choice: either you accept them to be static, or you convert them into a parameter. Candidates are:

  • variables: as used in statements 'Assign',  'Increment/Decrement', 'Expression' or used in conditions for conditional actions.
  • literals: which can be used in the same statements and also in conditions; first warning: if you choose to have '1' in this example as parameter, all literals '1' will be considered as the same parameter (more about that in a later post).

I explained in my last post how to convert a candidate into a parameter. In this screenshot you see the same action in Captivate 8 as I showed previously for version 7:

The variable v_ch1 was converted to a parameter, which made it easier to reuse this shared action for different buttons in the same project. The variable v_counter, nor the literal '1' were converted to parameters, they remained static. Reason is that the first statement, Increment, is the same for all chapters. I will always use v_counter, and increment it always with the same amount '1'. Why did I replace the Expression from CP7 by Increment? Easier, but that new statement did appear with 7.0.1, was not yet there when I created this dashboard with 7.0.0.

What happens when importing such a shared action in another project? The variables that are not converted to parameters will again be automatically created. In this case, the variable v_counter will be created.


Conclusion

This comparison and introduction to the 'parameter' rules, will make it easier to explain how I used this knowledge to save as much time as possible in the use case described in my previous article. Thanks for being patient.


Captivate 8 - First Adventures

Review? Not really...

Lot of well-known Captivate users have already blogged about the new features in version 8 of Captivate, released this week:  Michael Lund and Jim Leichliter are not the only friends who published their review. If you are a regular visitor of this blog, you'll know that I don't want to talk about features before having been able to explore the final release and that I'm used to offer an article with at least one example movie to demo what I try to explain. Some will be disappointed that the included movies are not responsive projects, but a good old SWF's (sorry Mac-users). You'll see some of the less-talked about new enhancements in Captivate 8. 

Focus on?

Watch this first movie. Focus in this project was on:

  • new possibility to customize theme colors: I edited one of the new themes, based on a Kuler palette (imported in the Swatches) panel; for this palette I used the colorful new box-shot  of Captivate 7 as resource

  • the ability to save and reuse custom shapes: for the shape buttons I used a custom shapes that are now available to me in the shape library

  • creating Normal, Rollover and Down states for Shape buttons and save those states in one Shape button object style: all buttons in the movie are shape buttons with 3 states; I used two shape button object styles

  • shared actions: being able to define variables and literals as parameters

  • shared actions: dragging them from the Library onto slides or interactive objects to open immediately the Parameters dialog

  • shared actions: being able to exclude variables, literals as parameters; discovered some nifty tricks!  Maybe I'll offer them in the future

  • new character sets
The project is showing a typical dashboard, that allows branching to different parts of the movie. For the sake of simplicity each part is only one slide in this case. The number of visits to each part is visible when returning to the dashboard. I hope you'll also discover the total number of visits to all parts in that dashboard (red number). When all parts have been visited, something happens on the dashboard. If you want to play again, you'll be able to reset at the end. There is no playbar, no TOC.

Movie

Actions & Variables

Five user variables were created:

  • v_counter: tracks the total number of views of chapters
  • v_ch1: tracks the number of views of the first chapter
  • v_ch2, v_ch3 and v_ch4: similar for the three other chapters
Tip: To keep it simple I limited to four chapters. If you want to store the shared actions in a Library to be used in future projects, it is better to have the maximum number of chapters you'll ever use.

As you can see in the Library, I created/used three shared actions. Only the Reset functionality uses an advanced action (not described in this article).


1. FirstViewBt

This action is triggered by the four shape buttons that appear the first time on the dashboard slide. It is a standard action, that will replace the button itself by a second version, navigates to the first slide of the chapter to be visited, increments both the general v_counter and the specific v_chx variables. The advanced action (before saving as shared action) is visible in this screenshot:

When saving this action as a shared action, the dialog box looks different from Captivate 7:

Watch the icons in the first column (fuchsia colored rectangle): before entering the description, this column will have the Warning icon for the items that are automatically defined as parameters: objects/groups. In this example 3 objects had that status: the buttons (BullletRight_1 and Sec_1), the first slide of the chapter. However now you'll also see variables and literals as possible candidates for parameters! They are normally indicated by a check mark (green) in the first column. In this example: v_counter, '1'(literal used in Increment statements) and v_ch1. To turn such a candidate in a parameter, you have to check it in the third column (blue rectangle). In this case I choose to make turn the chapter specific variable v_ch1 into a parameter. The warning icon appeared, and will disappear when I confirm the entered description. Both v_counter and the literal '1' are no parameters, since they will not have to be changed when using the shared action for a different button.


2. NextViewBt

This action is triggered by the four shape buttons that replace the first view buttons (by previous described action). It is a simple version of FirstViewBt with only three statements:
  • increment v_counter
  • increment specific chapter user variable
  • jump to first slide of that chapter
Only two parameters in this case: the specific chapter user var (v_chx which was a candidate) and the first slide of the chapter (compulsary parameter). As for FirstViewBt, neither v_counter nor the literal '1' were promoted to parameter.

3. EnterDash

This action is triggered when entering the Dashboard slide. It is a conditional action with two decisions. In these screenshots you see the Advanced action from which I started. First decision 'None' will make the slide ready for a first view, second decision 'AllDone' will make the Next button (navigates to last slide) visible and do some more bonus tricks.
I'm smiling at this moment, because I 'hear' a lot of questions: 
  1. Why did I convert this into a shared action?
  2. What are the parameters for this shared action?
  3. Can the user vars be parameters, they are used more than once?
  4. Same question perhaps for the literal '0' that is used 8 times?
  5. ....yours ?
Or is it crystal clear? Let me know. One tip: I used the shared actions for this movie:

Movie2: reused shared actions


Dare to Share - part 3

A while ago I published two posts as an introduction to shared actions in Captivate 7. At that moment I promised a third part about reusing shared actions in other projects. But since I was aware of the imminent release of CP8, and as a professional procrastinator, I postponed this part. I will explain how I reused the shared actions described in this article for the second movie. Watch out next week.


Conclusion

For those who expected a complete review or Captivate 8, sorry!  These are not the only CP8 features that I like. Honestly there are also changes that I don't like. Maybe I will post more about both when I feel capable to judge better. 'Hurry slowly' as a great friend tells me all the time. The enhancements I started to discuss today, I have been exploring already (also during prerelease) more in depth. In Dutch there is a proverb, freely translated like 'Each bird sings his own song, depending on his beak'.  I need more time for my songs.

Turn an Image into a Button

Intro

This will be a short tip to explain how you can quickly turn an image into a shape button. I had to explain this already multiple times and wonder why this easy work flow seems to remain a secret to many users. 

Step by Step

  1. Check the size of the image, width and height if the image has the correct size, or the width/height ratio if you want to have a smaller button than the image. You can do this in Captivate as well: insert the image on a slide, and check the size in the Transform accordion.
     Examples: image is 100px wide and 80 px high, you want a button with a width of 75px, the height will have to be 60px.
  2. Insert a smart shape with the wanted size/shape (triangle of 75 x 60 for this example); use the Transform accordion again; and check the option 'Use as button' 
  3. Edit the stroke as wanted - in the image I turned off the stroke (width = 0) but to avoid possible artifacts, choose also color of the background for the stroke. Click then on the Fill button.
  4. Default fill of shapes is a gradient (second choice), first choice is a solid color, but it is the third button that you'll have to click (Image).
  5. Some default textures are available, but you want a custom image, click on the Browser icon, and point to the image in the Library (because you have inserted that image before, it will be available in the library). In the Edit image dialog you can keep the default settings, click on OK.
  6. Your button is ready, you can time it, activate the pause option if wanted. Like all shape buttons it will have two states: not pressed, and pressed. Watch the fill: you'll see a thumbnail version of your image.

Conclusion

I prefer largely this work flow over creating image buttons, where you need to make three images, use names that end on _up, _down, _over. Of course, you only have two states for these shape buttons.

Reset Knowledge Slide

Intro

This post is for Captivate versions before 9. In version 9 real knowledge slides are introduced. In this post the workaround to use normal question slides as knowledge check slides is treated.

Not a shared actions post this time (still busy with the third post), but a quick tip describing a work flow that I already posted multiple times on the Captivate forums. It is an answer to this question:  "How can I reset a question slide immediately, if it is a pure knowledge check, no scoring". 

Principles

You are probably aware of the fact that the function 'Reset' in Captivate is only possible for the whole quiz, and has to be triggered by using the Retake button on the score slide. There is no simple way to reset one question, once it has been submitted. Before submitting it is possible to Clear the answer by the Clear button. For more details about question slides and score slide, check some of my previous posts:

Question Question Slides - part 1

Question Question Slides - part 2

For knowledge slides, where scores don't have to be saved, you will not want to insert a score slide. But if you can cope with the fact that all answers will be cleared also for other knowledge slides in the file, you can create a 'Reset' button for a slide, without having to show the Score slide. 

The Retake button will appear on the score slide if the attempts on quiz level are not exhausted. The attempts are tracked with a system variable cpQuizInfoAttempts.  That variable is incremented when a new attempt is started. 

The idea for the Reset action is simple: navigate the user to the score slide, and immediately back to the slide where he was answer in knowledge question. And that slide will be reset!

Example Movie

Watch this movie, to see the functionality of the Reset button. On each question slide you can use the two-step Submit work flow. Nothing will happen, you'll be able to Reset the answers as many times as you want. You need to click the Next button to go to the next Question. 

Setup Step-by-step

  • Edit the Quiz Preferences, set the number of Attempts to Infinite (or to a high number), it is not really necessary to show the Retake button. Be sure to hide the playbar, to check 'Show Score slide...' although you'll never show that score slide to the user, you need it. Do not allow Backward Movement. Check the two images below.
  • With the setup used in the example, you'll need to have the Next button visible. Do not drag it under the Clear button as I often advice to avoid confusion with the Submit button. 

  • You can use any type of questions, with one exception: Hotspot. Problem with Hotspot is that when the user clicks on the Reset button, it will be considered as a click on a hotspot (and the animation will appear). You see in the example that I even used partial scoring for some MCQ-multiple answer questions.

  • The setup for the question slides: I kept the attempts to 1, but changed the actions both for Success and for Failure to 'No Action', hence the need for a Next button. If you want, you can keep the 'Go to Next Slide' as Success Action, but if you have have partial scored slides, you have to know that partial correct answers will trigger the Success action, which means that the user will not be able to reset and correct his answer.

  • Create a shape button as Reset button. In the example movie I used one of the images from the theme as Fill for a rectangle shape with no stroke, to have a look that is similar to the embedded quiz buttons. To have this button on all the question slides, you can either put it on the Quiz Master slides, or put it on the slide before the first question slide, make it invisible (Properties panel), time it for the rest of the project. I choose for the second work flow, because the shape button gets an ID, can be shown/hidden as wanted. It is not possible to put it on the first question slide, but I made it visible with the On Enter action of the first question slide. More information about buttons on question slide is to be found in a previous blog post: http://blog.lilybiri.com/want-a-button-on-question-slide-in-captivate.

  • The advanced action triggered by the On Success event of the button Bt_Reset is pretty simple:
    • jumps to the Score slide, which will increment the variable cpQuizInfoAttempts, start a new attempt, clears all answers
    • returns to the original slide, using the system variable cpInfoLastVisitedSlide
  • To avoid the user seeing the score slide, you'll need at least one slide before the score slide, and prevent navigation to the last slide. In this case I added one slide, that has no navigation button. Because the Reset button is still visible, I use the On Enter action of this slide to hide it.

Tips

  • If you plan to use this action in multiple files, create a shared instead of an advanced action. It is easier to reuse a shared action because it is in the library which you can use as an external library.

  • This type of knowledge questions will probably be between content slides. You have to be aware that all answers are reset with each Reset button on one question slide. Maybe better warn the user if you allow free navigation with a playbar, a TOC or custom buttons.




Dare to Share - part 2

Intro

In the first part of this series about Shared Actions (in Captivate 7) I explained how you can create a shared action. The examples only had the statements Show and Hide. At the end you could see a published CP-movie, in which shared actions were applied several times. This second part will explain the first way of using shared actions. As a surplus you'll get an explanation of the use case that you watched in the first part.

'Execute Shared Action'

The first way of using a shared action is with the command Execute Shared Action, that can be triggered by all the events explained in a previous post: Events and (advanced) Actions. You'll find this new command in the dropdown list, just below its sibling 'Execute Advanced Action'. 

The only place, where you will not find this command, is in the dropdown list for Hyperlinks (Format accordion for Text). However it is available in the dropdown lists for Actions in the Drag&Drop interaction. Look out for an example of shared actions in D&D later on in this series. 

When you have chosen a shared action, next to its name you'll not find the browser button (as for Advanced actions), but a Parameter button. When you click that button, you'll see a dialog box in which you can choose the parameters to apply. In this screenshot you'll see the highlighted Parameter button. This shared action is applied to one of the click boxes of the example in the first part of this series (see later: Use case). Two parameters are already assigned. To find the third one (a new click box) I clicked twice in the field and typed 'peer' (first characters "pe" would have be sufficient as well) to filter the list to those objects/groups that have the character sequence 'peer'. Consistent labeling is good practice, as I told multiple times! 

I could have interchanged the items for second and third parameter, it doesn't matter because both will be made visible. You are totally free which items to use as parameters. As an illustration: here is the same shared action for the last click box: you'll see that the second item to show is not a click box, but a text container:

Use Case - Description

Slide objects

Here is the timeline of this unique slide, it shows from bottom up:
  • Title
  • Image (circle)
  • Group with 4 click boxes, over the circle image; only the bottom one, CB_Social, is 'Visible in output', the others are invisible
  • Gr_Bubble, group with 4 shape buttons that are also text containers, all invisible at the start
  • Tx_Instruction, set to invisible, that will appear when the last click box is clicked, telling to click on one of the bubbles
  • Gr_HLCover, set to invisible, grouping the gray transparent shape covering the slide and a shape button to close the Lightbox
  • Gr_HLBox: set to invisible, group with 4 light boxes that are (again) shapes used as text containers.


Events and Shared actions

The used events that trigger shared actions are:

  • Success event for each of the click boxes, using the shared action Show2Hide1, you have seen examples of the shared actions above. Only the fourth click box had a slightly different use of the parameters: not a click box was shown but the instruction text Tx_instruction. There is no Failure action, because the attempts are left at Infinite.

  • Success event for each of the 'bubbles', the shape buttons, triggers the shared action Show2, showing both Gr_HLCover  and the appropriate lightbox. Again, the attempts are set to Infinite, no Failure action will ever be fired. Here is one example:
    If another slide would be following, at least one of those bubbles needs a pause, to keep the playhead stopped. The four click boxes are no longer visible, so their pause is no longer active, available to stop the slide.

  • Success event for the shape button Bt_CloseHL triggers the shared action Hide2. Wondering why I could use that same shape button with the same action, because there is not only the group Gr_HLCover to be hidden, but also the specific lightbox? Well, I don't hide one lightbox, but hide the whole group Gr_HLBox, which means the one that is visible will be hidden as well. 


Visibility Shared Actions

In the first part I already explained that the number of times shared actions are reused is visible in the library. Double-clicking on the library item you can open the dialog with the Usage button and have details of the events where that action is used. You can also open directly the Usage overview only, by clicking the chain button at the top of the Library:

You will also see a nice summary in one of my favourite panels: Advanced Interaction (F9). Tip: this panel can be printed.

What next?

I did not see any comment in this blog yet, got some on other social media. Series is not finished, I plan to focus on reusing this kind of shared actions in the third part. That will be with another use case.




Dare to Share - part 1

Intro

Wondering about that title? It could be my motto: I'm not afraid to share whatever I discover about Captivate as faithful fans do know. Title is not about me, it has a different meaning. With some articles, this is the first one, I want to persuade you to give the new Shared actions a try. There is very little available about them, no tutorials, two recorded webinars (guilty about both), a presentation at Adobe Learning Summit in October 2013. Rare comments on the forums or in the discussion groups I'm attending daily are mostly negative: 'Too restricted', '... not useful at all'. Quotes like that remind me of similar negative attitude when advanced actions appeared in Captivate 4 (clunky interface), when I started blogging about them after their improvements in Captivate 5. Now most intermediate and advanced users do still complain about advanced actions but... they are used more and more!

Today I start with a small sequence of articles, to get you up and running with shared actions. I will also explain limitations (of course) and have my fingers crossed, hoping those limitations will be broken down by the Adobe team in future release(s).

Get your feet wet with Hide/Show 

The statements Hide and Show are perhaps the most used in advanced actions. And as you probably know, to avoid the play head being released when such a command is executed, you will often turn to a standard advanced action instead of a simple action. I explained this extensively in a previous post: Why Choose Standard over Simple Action in which you'll also find a link to a video on YouTube showing the work flow. First shared actions that you can put in your Library and use over and over again by importing that library as external library in any project. Here is the step by step work flow for the creation of a shared action that shows two 'items'. An item can be anything: 
  • a text container, an image, audio object or any other non-interactive object like a static widget/interaction
  • a button, click box, text entry box or any other interactive object (like some interactions, widgets)
  • a group of objects
I will explain the work flow for a shared action 'Show2' that Shows two 'items'. If you want to follow along, be sure to have at least two objects on a slide, that are initially hidden by unchecking the option 'Show in Output' in their Properties panel. And... it is easier when you label them

Step by step

  • Open Advanced Actions dialog box, you'll act like for creating a Standard action
  • You can add the Action Name now or later; we will not use this action as an advanced action. If you add the name Show2 you will be able to keep it when saving as shared action or change the name.

  • Create the two statements 
  •    Show Object1
       Show Object2
  • Press the button 'Save  As Shared Action' (see first image in Gallery

In the Shared actions dialog, give a Title, Description of the shared action, description of the parameters - the parameter name is not important (those are the present object names) but description is (second image in Gallery)

In the Advanced Actions dialog box, the shared action will appear in the dropdown list for the script templates (see third image, only script template that is always available is Blank)

The Shared action will also appear in the Folder Shared Actions in the Library (see fourth image: this shared action was already applied 4 times, if you didn't apply it, number 0 will appear for Usage).


Use case: Highlight boxes

Watch this example movie, click on the green arrow in the center:

As you could see in the fourth image of the Library for this one-slide movie, taken from a presentation I did for the Adobe Education Summit in Barcelona (2013) about Flipped Classes, I used only 3 shared actions:

Hide2 is used once for the close Highlight button that appears with each highlight box

Show2 is used 4 times, triggered by the 4 shape buttons (bubbles) to show a highlight box

Show2Hide1 is used 4 times by click boxes over the collaboration circle, to show the 4 bubbles

Try to create the three shared actions. In the next part I will explain how to use them to create this slide.


Feedback

Let me know if you want to learn more about shared actions, their power and limitations. You can post a comment.

In the future, I plan to offer online training about advanced/shared actions. Let me know, by sending a note to the info@lilybiri.com) if you would like to participate.

New features in Captivate 7.01

Intro

Adobe just released an update to Captivate 7. There will be a lot of talk by the Mac-users because it will now again be functional on their updated 'Maverick' system. But there is a lot more added in this update. I was agreeably surprised to see some of my requested variables, commands and advanced action features added, and some lack of congruence in interactions solved as well. Sure, lot of other Captivate users will blog about their favorites, but what did you expect from me? Variables and Advanced Actions features of course :)

Variables

In Captivate 7 we got 3 new system variables:

  • cpInfoCurrentDateStringDDMMYYYY : allowed to show the date in the in Europe usual DD/MM/YYYY format

  • cpInfoCurrentLocaleDateString: shows the date respecting the Settings of the local machine, for me 'Zondag, 17 november 2013';
    this variable was not doing very well in the original 7-release but does now in 7.01

  • cpQuizInfoTotalUnansweredQuestions: returns number of unanswered questions in real Quiz only (not in Pretest)

In Captivate 7.01 4 new system variables are added, all in the Quizzing category:

  • cpInReviewMode: a boolean (0/1) that will be toggled from the default 0 to 1 when user gets in Review mode; this long awaited and begged for variable can be very useful for actions that will show previously hidden objects (text, audio,...) when a question slide is entered in Review mode; up till now this was only possible by creating a user variable for that purpose.

  • cpQuizInfoPreTestMaxScore: returns the maximum score that can be obtained in the Pretest. The system variable cpQuizInfoTotalQuizPoints (=cpQuizInfoTotalProjectPoints) stores the sum of the total scores in pretest and normal question slides (value you can also find in the Advanced Interaction); the default score slide will show the results for the normal question slides, this number has no system variable; now with the system variables for Pretest you can create a separate score slide for the Pretest as well.

  • cpQuizInfoPreTestTotalCorrectAnswers: stores the number or correct answers in the Pretest, whereas the variable cpQuizInfoTotalCorrectAnswers stores that number for the normal question slides.

  • cpQuizInfoPreTestTotalQuestions: returns the total number of Pretest questions. The system variable cpQuizInfoTotalQuestionsPerProject stores the sum of all the questions (pretest and normal), whereas the number on the default score slide shows the number of normal questions (which has no system variable equivalent).

Variable Usage button!

Long awaited: we finally have a Usage button in the Variables dialog box. It was added to the Advanced Actions a while ago as well. This makes it much easier to clean up unused variables. But there are still some limitations. If you select a variable and click on the Usage button, these situations can occur:

  1. The variable is used in actions, advanced actions, shared actions: those actions will appear in the Usage dialog as you can see on the first image in the Gallery.

  2. The variable is used in actions but also in Text Entry Boxes (even the generic ones), in Widgets, in Interactions: only the actions will appear, usage in TEB, Widgets/Interactions will not be mentioned.

  3. The variable is only used in Text Entry Boxes (even the generic ones), in Widgets, in Interactions: the Usage dialog will appear but will be blank.

  4. The variable is not used anywhere : the warning message 'The variable is not in use' will appear (second image)


Advanced Actions 

AA dialog box enhancements

Have a close look at the third image in the Gallery and you'll see that there are three new buttons under the Decisions labels, to the right of the already existing + and - buttons that allow to add/delete decisions:
  1. The first button looks like the Duplicate button that you'll also find for Advanced Actions (top right of the dialog box), indeed tooltip is 'Duplicate Decision'. I have so been begging for it since version 5, because it happens often that you have to create a whole bunch of similar decisions where only a few statements have to be edited. Up till now this was a pain: copy/paste the statements in IF, then copy/paste the statements in the THEN section, then copy/paste the statements in the ELSE section. Now one button click gives you a complete duplicate of condition+then+else sections.

  2. The two arrow buttons next to the Duplicate Decision 'Move Left'/'Move Right' can be used to rearrange decisions, another long awaited feature! You know that sequence of the decisions is very important in Captivate. And it happened a lot to me, that after having created a long action, I discovered that another sequence would have been better, or that I wanted to add a mimicked standard action at the beginning. Now this is possible with less work using those move arrow

Even more news: there is also a new black left arrow as first button in the top row with buttons in the Advanced Actions panel: tooltip reads 'Preview'. It will open a separate window that shows you all decisions (ELSE included) of your conditional action. That Preview button is not available for Standard actions, will be dimmed. 

A Preview example is visible as fourth image in the Gallery. The window size cannot be customized, will cover up the Advanced Actions window and has same size. When necessary a scroll bar appears and you are also able to collapse all or some parts of the action. Don't look for a Print button, not there. 

New statements/commands in actions

When publishing a table with statements (commands in simple actions) available in Captivate 6 I pointed out some discrepancy between the commands available in the dropdown lists for simple actions and the ones in the advanced actions dialog box.  Someone listened to me, and this has been repaired:
  • Increment/Decrement was only available for simple actions up till now, had to be replaced by an Expression in advanced actions; that is over, now there appear in advanced actions as well.

  • Pause/Exit are now ready as statements for advanced actions (although Exit working depends on more than CP alone)

  • Toggle is a new command/statement, and you can apply it to all Boolean variables (system and user); it is a shortcut to using the Expression 'var = 1 - var' (like cpCmndMute = 1 - cpCmndMute), a time saver.

  • Lock/Unlock TOC, Show/Hide TOC, Show/Hide Playbar are alternative commands/statements that may be easier to understand than using the Toggle or the Expression 

Reusing actions between projects

We have Shared actions, but the only way up till this patch was to Export them (as cpaa files) from the Library and to Import them in other projects. I'm a fan of External Libraries and now I'm happy to announce that you can also open an External Library and just drag the shared action in the Library of the present file, just as was the case with all other objects in an External Library. 

Moreover when you copy a slide, or an interactive object that has an advanced action attached, to another project... you'll not lose the action anymore. What do you think about that?  


Other features

You have to explore the new Swatches panel, allows you to create a custom palette or import an existing palette like the ones you can create with Kuler. There are lot of other enhancements, bug fixes but with this post I wanted to focus on those related with shared/advanced actions and variables. You can have a look at http://helpx.adobe.com/captivate/kb/captivate-7-patch.html for the complete list.

Blog after Posterous? - ClickClick

Moving

As you can see, I'm slowly moving my posts out of Posterous to a new 'haven'. Posthaven did a great job importing the blogs with not too much work left to me. It is still in beta, so not everything is styled as I want, and tags cannot be added yet. But the articles at least are safe now, will not disappear in the cloud with Posterous' death. In the future, articles will be accessible from my site, once I can manage to set it up to my wish. Due to the many reactions of Captivate users, I wanted first of all to have a solution for the blog articles. And I try to get them all available ASAP.


Intro

Since a while I get a lot of worried messages by all channels: on Adobe forums, by Linkedin, comment on this blog, mail... And they all ask the same question: what will happen to your blog when Posterous is closing down? I do find it a bit strange, that such a crisis situation leads to more contact with readers then normally. This blog seems to be useful to a quite a bunch of users. When I started, about 2,5 years ago, never imagined those articles would find their way to users all over the world. And they are useful to me as well: I spare a lot of time, just pointing to a post instead of having to repeat the same answers again and again on the user forums.

Must confess that I hesitate to search for another host. I really want to keep all rights on the content (which is not the case for a lot of blogging hosts), even though some rare readers feel they are entitled to 'take over' my ideas and propagate them as their own, without any reference. 'Since it is distributed for free, it is public, no need to point to the original author in that case' must be their way of thinking. Not very ethical, but that is only my personal opinion. 

For the moment, I do not have a final solution. I already concluded that I need to look for a non-free host in the future. Keep an eye on this blog, if I take a decision about another host, will post the link here.

If you are just plunging into advanced actions, keep on reading. I describe a rather simple use case, suited for novices in advanced actions. The only problem could be the expression 'Mimicked standard action' in the conditonal action Bt_Click. For more info about that, read this article.

ClickClick

I used this name for a small cptx-file, built as an example for yet another use case.:

'I am trying to use a button to toggle between 3 images. I created a variable, initially set to 0. The button triggers a conditional advanced action, where I check that variable, change it and show the next image. But it always shows the first image'

Screening the conditional action I detected that the user was trapped by the fact that in a conditional action, all decisions are always evaluated in sequence. Captivate will never stop evaluating when a correct condition has been reached, but goes on with the rest of the decisions and statements. 

Learning from mistakes is very efficient, here is a description of the original conditional action; the first image Image1 is originally visible:

Decision1 

  • IF var is equal to 0
  • Assign var with 1
  • Show Image2
  • Hide Image1

Decision2 

  • IF var is equal to 1
  • Assign var with 2
  • Show Image3
  • Hide Image2

Decision3

  • IF var is equal to 2
  • Assign var with 0
  • Show Image1
  • Hide Image3

If you evaluate all decisions, you will indeed end up with always having Image1 to show up: first decision results in true, but variable is changed to 1. That means that the second decision is also true, and the variable is changed again. Ultimately the last decision will also be true because of that change, so Image 1 is shown again. 

Example movie

In this one slide movie I have a version of my answer to this use case. Here you will be toggling four images, and to make it a bit playful, when you have viewed all the photos, you can play a little game pressing the Guess-button.

If you want to see the entire movie, you'll have to download it from this link: ClickClickClick. Posterous is not supporting an interactive PDF. In the SWF embedded here, you'll not see the Hangman widget, not be able to play. The Guess button will appear, but is not able to show the interaction, sorry about that. Download the interactive pdf if you are curious about the Hangman interaction.


Slide objects - variable

On this unique slide you'll see from bottom to top on the Timeline:

  1. A group with 4 photos, labeled GrFoto; will be set to invisible on entering the slide
  2. The button BtClick that will let you toggle the images, visible and will trigger the conditional advanced action Bt_Click (it is possible to have the same name, if you define the button name before the name of the action)
  3. The button BtGuess, will be hidden on entering the slide. This button will trigger the standard advanced action Bt_Guess
  4. An instance of the Hangman interaction, initially invisible.

Only one variable was needed, v_click, with a default value of 0.

Advanced actions - events

EnterSlide

This is a standard advanced action - triggered by the On Enter event. It will hide the group GrFoto, the button BtGuess and the interaction.

Bt_Click

This conditional advanced action - triggered On Success by the button BtClick - has 5 decisions:

  1. Always: a mimicked standard action to increment the variable v_click and to hide the group with photos. I preferred to hide the group with this first decision to save time. It is only necessary to hide the previous shown image, but if you want to do that with an advanced action you need more statements. Because all statements are always executed, I can hide the group (same statement for each click) and afterwards show the appropriate image, depending on the click number. 
     
  2. Click1: checks if the variable is set to 1 (which will happen due to decision Always after the first click), and shows the first photo.
  3. Click2: similar to Click1, checks if v_click is set to 2 (after second click) and shows second photo in that case.
  4. Click3: similar to Click1, checks if v_click is set to 3 (after third click) and shows third photo in that case.
  5. Click4: has more statements than the other 3 conditions. It checks if v_click is set to 4, shows the fourth image. But because all photos now have been viewed, the button Bt_Guess is shown and v_click is reset to its initial value 0. The last statement allows the user to toggle the photos again if wanted. But the button Bt_Guess will remain visible all the time from now on.
     

Bt_Guess

Rather simple standard advanced action - triggered On Success by the button BtGuess. It will hide the photos GrFoto, and show the interaction that was hidden. Because the interaction is on top of the buttons, it is not necessary to hide those buttons, although if you are a perfectionist, you could hide them of course.

Learned something?

If you take time to compare the original conditional action with my proposal, you'll see how important the sequence of the decisions is, and the fact that CP never stops with evaluation when a correct condition is met. I did increment the variable with a mimicked standard action, not within the real conditional decisions. This means that the variable will not change when CP is executing all the statements. 

Some timesaver tips are concealed in the actions as well: grouping of the fotos will allow to show/hide them with one statement (see EnterSlide, Always in Bt_Click and Bt_Guess). 

Using the Expression statement to increment v_click (Always in Bt_Click) is more efficient, compared with conditions + Assign combinations.

As usual, please feel free to comment. This means a lot to me, will help me to decide about accepting the transfer work to another host.

Link score to attempts in Custom questions

Intro

This time a Flemish colleague asked me to help with a Quiz that is very close to my original profession: I'm a civil engineer and this Quiz was about introducting students to technical drawing techniques, more specific, interpretation of Isometric Projection. Back to my roots!

In a recent article I talked about 'Beating the system', trying to make advanced actions easy to manage, to avoid tracking endless numbers of variables by reusing them intelligently (Be a Captivate Ecologist). And of course, I use my favourite shape buttons, either on Master slide or timed for the rest of the project to avoid having a multitude of objects and actions. Last year I presented a webinar about that subject, you can find the recording link in this blog post

Use case description

In the example, which you can watch below, there are two types of custom questions:

  1. Student has to type in a number, after screening a drawing. Originally colleague used a Short Answer Question. This was replaced by a custom question, that uses a Text Entry Box. And for 6.1 users: I limited the entry to the box to numbers only. All questions except the last use this type.
  2. Student has to identify an element in the drawing by clicking on it. Originall a hotspot question, in the custom question I used a click box. This type is used here only in the last question.

For all questions 3 attempts were provided, but the obtained score depends on the attempt:

  1. Correct on first atttempt: score = 3 points
  2. Correct on second attempt: score = 2 points
  3. Correct on last attempt: score = 1 point

Even with the new quizzing features in Captivate 6 this is not possible out of the box. That is the reason why I choose for Custom questions. The score has not to be reported to a LMS, it is more of knowledge check, but the score will be shown to the student at the end.

Colleague also asked to make it possible (for one sequence of questions) for the student to click on a button to have some Help. In this case it was a one-slide Powerpoint animation. I converted the animation to SWF and used it that way.

Moreover colleague wanted to be able to change the passing score. It was quite a challenge but fun as well.

Example

Play with this movie to have an idea about the result. I didn't change the used drawings, nor the imported animation. You'll have to answer 10 questions...

Slides - Master slides

I used the Blank theme, main master slide has a gradient background. For the questions I created 3 master slides, one for each drawing (because they can be used for all questions concerning that drawing).

The first sequence of questions has a Help button with a tooltip. Both button and tooltip are shapes on the master slide Quest1. The shape button navigates to slide 2, which is the Help-slide with the animation. The help-slide will not be visited before the questions, for that sake I configured the button on the Intro-slide to jump immediately to the 3rd slide, which is the first question slide.

On the Help-slide you have a similar duo of shapes: a button and a tooltip (rollover shape). The button gets the user back to Last Slide Visited, to the question slide from which he asked for help.

Objects Timed for Rest of Project

On the first question slide, a lot of objects are timed for the rest of the project because they are reused all the time. Because I needed to be able to control their visibility, they couldn't be put on the master slide. Here is a screenshot of the timeline of that slide, the Text Entry Box was selected and its Properties are visible as well (watch the associated variable v_answer):

From bottom to top you see these objects:

Group Question1: has a text Quest1 and the not to be validated TEBAnswer1. Those objects are timed for the rest of the slide. These objects are visible in output.

Group TxtContainers: with the three possible text containers TxtSuccess, TxtWrong and TxtRetry. Initially they are not visible. I grouped them because it is easier to hide them all together in an advanced action. Those objects are timed for the rest of the project since they can be reused on each question slide. This will also make it possible to use less advanced actions, since they keep always the same name, ID.

Group GrpNext: has a shape button NextBt and a text container TextClickNext; the goal of the text is not only to tell the user what to do, but also to cover up the TEB's, so that they cannot be clicked another time to get the same score again. Why did I choose this instead of disabling the TEB? To disable the TEB a separate advanced action would have been needed, since each TEB has a different name. Whereas my 'cover' workaround allows me to use the same advanced action for every TEB. This group is initially invisible, and timed for the rest of the project.

Total: the banner with the obtained score, visible and timed for the rest of the project.

 

Variable ecology

In this use case I didn't use any system variable, and also deleted all default variables associated with the multiple Text Entry Boxes (9 of them, one for each of the first 9 question slides). I ended up with using only 7 variables. To prove it, here is a screenshot of the variables dialog box:

v_PassScore: will store the minimum percentage required to pass; I assigned a value on entering the first slide, the intro slide, with a simple action. Remember that the colleague requested to be able to change the value.

v_answer: will store the value entered in the TEB's, and is reused on each slide. This means that you have to associate this variable to each TEB to replace the default variable that normally gets the same name as the TEB (Text_Entry_Box_n). A good check: try to delete those default variables in the variable dialog box:  if removing a variable is denied, that means that you forgot to replace it by v_answer. If you are using version 6.1, you can use 'More Options' in the General accordion to limit the entry to Numbers.

v_attempts: reused on each question slide with a default value of 3, will be decremented with each attempt and also serve as question score.

v_correct: will be reused on each question slide, and populated with the correct answer on entering that question slide

v_max: starts with value = 0, not really necessary, but for lazy mathematicians, will be populated with the maximum score that can be obtained. You could also replace it by a literal, a number...

v_perc: starts with value = 0, will be used only on entering the score slide to calculate the percentage based on v_score and v_max

v_score: starts with value = 0, will store the score obtained, and will be incremented after each correct answer, taking into account the number of attempts used for the answer.

Events and Advanced actions

On Enter Slide events

are used both for the Question slides and for the Score slide.
  • Question slides: used to reset and hide what is needed, to calculate the new value of v_max and (only for the TEB-slides) to populate the variable v_answer with the correct number for the TEB-based questions. Here is an example of such a standard advanced action (for the second Question slide). Only the first statement has to be adapted for each TEB-slide.

For the click box slide (hotspot), this action is little bit different, no need to populate v_answer, but the click box has to be enabled (labeled Spot1):

  • Score slide: here a conditional action is needed which has two decisions; the first (Always) will hide unnecessary objects that were displayed for the rest of the project, and will calculate the percentage to be stored in v_perc
    Second decision (Checkup) will check the percentage and show the appropriate group (text + banner) based on that checkup:

     

Success event for Text Entry Boxes  triggers 'NotValidated'

All TEB's, which are not validated and have only one attempt will trigger the same advanced action, the conditional action NotValidated that has three decisions. The sequence of the decisions is important!

  1. Fout (Dutch for 'Wrong'): this situation occurs when the student has tried to answer 3 times, and didn't succeed to give the correct answer. 

    The correct feedback will appear, the group with the Next button and the coverup text will be made visible and the answer is reset (not really necessary, will also be reset on entering the next slide).
     
  2. Opnieuw (Dutch for Retry): will occur if the user has already given at least once an incorrect answer but the attempts are not yet exhausted.
     Correct feedback is made visible, variable v_attempts is decremented and v_answer is reset to 0. The last statement is meant to rewind the playhead to appear again before the pausing point of the TEB in its active part so that the student can answer again (see post about micro-navigation)
      
  3. Correct: whenever the student gives a correct answer. 
    Besides showing the correct feedback and the group GrpNext, you see that I calculated the new score that is immediately shown in the Total shape. Because of the sequence, the number of attempts left at that moment is identical to the score left for the slide.

Success event for Click Box triggers HotspotCorrect

For the hotspot question, I used both the Success and the Failure events for the click box (Spot1). Success event triggers this standard action, that is similar to the last decision Correct in the TEB-action; but here I disabled the click box to avoid the user clicking on it again :

Failure event for Click Box triggers HotspotNOK

The other situations, covered by the two decisions Fout and Opnieuw in the conditional action for the TEB's are now done by this conditional action attached to the Failure event. It has two decisions (since the third is now done by the Success action):

  • Fout (Wrong): if attempts are exhausted and the answer is wrong; very similar to the decision that is labeled the same way for the TEB's, no answer has to be checked here, only the attempts.
     
  • Opnieuw (Retry): after an incorrect answer, when there is at least one attempt left:

 

Conclusion

Pretty long article, I'm sorry. But wanted to offer this use case because of the the way I reused both variables and advanced actions. If I had plunged in without any preparation (or with an old version of Captivate) this probably would have led to a multitude of variables and actions.

Would really appreciate any comment, feedback.