The Source for ToolBook and VBTrain.Net News
From Platte Canyon Multimedia Software Corporation.
VBTrain.Net Tips and News
We've now hopefully all recovered from TBCON and are focused on "One-Day Events" to be offered before the main U.S. training conferences. This issue contains information on both as well as the associated "Archives for Attendees."
We update you on products in the pipeline as well as include our normal collection of ToolBook and .NET tips and tricks. New with this issue is the "Tracker.Net Tip."
We hope to see many of you at one of our events or via the ToolBook or VBTrain.Net ListServ. Thanks for being part of this community!
If you couldn't make it to Colorado Springs this year or don't want to wait another year to sharpen your skills, these events are for you. Platte Canyon will be hosting one-day TBCON events before the major training conferences throughout the year. The fun starts on Sunday, October 10, 2004 in San Francisco (before Training – Fall). Your next opportunity is Sunday, February 27, 2005 in New Orleans (before Training – Spring). The last one in this cycle is Sunday, June 5, 2005 in Orlando (before ASTD).
Each event will provide eight hours of technical sessions on ToolBook and VBTrain.Net topics. Attendees will choose the exact topic covered out of a large list of possible sessions! Beginning, intermediate, and advanced developers are all welcome! For larger groups, we will split into separate groups by development tool (ToolBook or VBTrain.Net) or skill level. Price is $285 per person, which includes lunch, snacks, and beverages. Here's a link for more details or to sign up:
About 100 ToolBook and .NET developers traveled to Colorado Springs from June 18 - 23 to hone their craft, meet their peers, and have some fun. In the words of one attendee who has attended every year except 2003, "I enjoyed it a lot. It was probably the BEST TBCON that I have been to so far!" We didn't let a bit of rain on the preconference weekend bring us down and then the weather cooperated nicely for the main event.
Tim Barham and other key SumTotal members (Charley Delaney, Denny Dedmore, Michael Ormes, and Mukesh Singh) filled us in on some of the exciting ToolBook plans. Here's a brief summary taken from list posts:
A few other highlights:
SumTotal Systems ToolBook Design Awards
Congratulations to Dawn Sekel of the U. S. Courts for winning the award for the "Most Creative Use of ToolBook." Big kudos also go to Peter Hoyt of Verizon Data Services, Inc. for the "Best ToolBook Online Training." They both won Apple iPod Minis.
Thank you to SumTotal Systems for sponsoring this contest. Charley Delaney and Michael Ormes did their usual superb job of judging all the outstanding entries!
Brad Shuck won the Olympic-themed contest this year, decided once again by audience vote. The Buckman Labs team of Tony Lin, Oscar Posada, Michele Nix, Mauro Rech, and Catherine Walker came in a strong second. The other entries were so outstanding that the audience decided they all tied for third: Andrew Gould and Simon Price; Jose Rodriguez, Mike Pritchett, Launa Mallett, Doris Ford, and April Whitson; and George Maggelet and Richard Kilmer. Denny Dedmore created a demonstration application on path animation from ToolBook while Jeff Rhodes built a PocketPC application in .NET that allowed attendees to draw their own interpretation of Tim Barham .
If you couldn't make the conference but would still like to download the sample applications and presentations from most of the 60+ TBCON 2004 sessions, you'll be glad to know that the "Archives for Attendees" are now available. At only $50, this is a real steal! There are also various low-cost bundles available if you would like the archives or CDs from previous years. To learn more, go to:
One of the most powerful aspects of creating training in .NET is the ability to load all your content from a database. For several of the TBCON sessions, we created both a Windows application and an ASP.NET application from the same database and media. The content was "The History of TBCON." You can see the web version at:
If you want to download and compare the database to the sample, you can download it at:
If any of you are planning to come to the Training Fall conference in San Francisco (October 11 – 13, 2004 with a one-day TBCON event on October 10), please stop by our booth (316) and say hello. If you just want to visit the expo, send us an email ( firstname.lastname@example.org ) and we'll mail you a free Expo Pass. Here's a link for more information about the conference.http://www.trainingfall.com
ToolBook Tips and News
by Jeff Rhodes
CBT Question Editor
Show Page Objects
One of the earliest Plug-In Pro tools is "Show Page Objects." It addresses the situation where you have an interactive page with various objects that are hidden. It is easy enough to open the Command Window and type "show objects" to get them all visible or to right-click on the page and choose "Show Objects". The tricky part is getting the right ones hidden again! The "Show Page Objects" dialog takes care of this by changing the "Show All Selected" button to the "Restore to Original" button. Clicking it after showing the objects will return everything to its original state. The button caption is "Show All Selected" because there is a drop-down list where you decide to show all objects or just fields, buttons, etc. There is a matching tool for showing and hiding objects on the background.
If you want to see what the dialog looks like, check out the help topic:
More information on Plug-In Pro is available at:
by Chris Bell
Anatomy of a TBR file
The product of running the Sim AutoBuilder Recorder is a TBR file. We import the TBR file into ToolBook using the Insert Simulation from Recording menu item. That's really all that we need to know about TBR files. But if you're really interested in digging deeper, here's what you'll find:
A TBR file is a zip file with a different extension. This means that you can open it with WinZip, PKZip, or another unzip routine.
Inside the TBR zip file, we find two types of files:
BMPs - these are the captured screens. One image per step. These are the same images that you'll see if you were to click "preview" at a step while going through the TBR import wizard.
XML file - this is the data file that the simulation import process uses to create the simulation. It is a highly structured and detailed account of the full capture. Every menu item, button, dialog box, is represented here for reproduction in ToolBook.
Have fun digging into the file!
by Jeff Rhodes
Both the OpenScript and Actions Editor tips this month come from our continuing work for the Army in support of automating their development process. Since the last EnterPage issue, I've written a tool to save the content of a ToolBook book to an Access database. We've done this previously with our special database structure as part of Content Connection. But in this case, we needed to account for any changes that developers may have made between the time the book was loaded from a database. So we know the database structure but still need to match up the fields, buttons, media, graphics, etc. For performance, we save all the information to an array (storyWriteTable in the code below). We show the book in a viewer to avoid problems with the ActiveX control getting in the way of our ADO (ActiveX Data Objects) code. That is what viewerId below means. One of the more challenging parts is getting the data out of the question objects. The code below shows the handler that we use once we have found the question object (questionId).
to handle story_writeQuestionData word num, word columnNum, object questionId, object viewerId system storyWriteTable -- num is row number and columnNum represents the location --of the questionType column (followed by the answer and answerCorrect columns) local string qType local tempAnswerArray local word numAnswers, answerNum, arrayNum local string answerValue, answerCorrect in viewerId if questionId <> null qType = asym_wid_qType of questionID storyWriteTable[num][columnNum] = story_formatFromQuestionType(qType) tempAnswerArray = ASYM_WID_AnsArray of questionId if qType <> null numAnswers = item 1 of dimensions(tempAnswerArray) step answerNum from 1 to numAnswers arrayNum = columnNum + (2 * (answerNum - 1)) + 1 answerValue = null conditions when qType = "matchItem" answerValue = tempAnswerArray[answerNum] when qType is in "multiChoice,typeIn,trueFalse,orderText" answerValue = tempAnswerArray[answerNum] -- else do nothing end conditions answerCorrect = tempAnswerArray[answerNum] storyWriteTable[num][arrayNum] = answerValue storyWriteTable[num][arrayNum + 1] = answerCorrect end step end if end if end in end story_writeQuestionData to get story_formatFromQuestionType string questionType local string returnType conditions when questionType = "ORDEROBJ" returnType = "Definable Arrange" when questionType= "MULTIDROP" returnType = "Definable Drop" when questionType = "MULTIOBJ" returnType = "Definable Multiple Choice" when questionType = "NAMEPART" returnType = "Drag and Drop" when questionType = "TYPEIN" returnType = "Fill In The Blank" when questionType = "MATCHITEM" returnType = "Matching" when questionType = "MULTICHOICE" returnType = "Multiple Choice" when questionType = "TAQUIN" returnType = "Sequenced Steps" when questionType = "SIMULATION" returnType = "Simulation" when questionType = "TRUEFALSE" returnType = "True or False" else returnType = "Multiple Choice" end conditions return returnType end story_formatFromQuestionType
The logic is fairly simple. We figure out the question type to use a lookup function (story_formatFromQuestionType) to translate that into the values used in the database. We then read the ASYM_WID_AnsArray property of the question into a temporary variable. We then loop through the number of answers to grab the answers and whether each one is correct. We don't need to store the actual weights since our "loading" code takes care of figuring this out on the way in.Some of you alert readers may have noticed that we are not grabbing either the immediate or summary feedback. That is because the program's design is to implement feedback based on the number of tries. The feedback is then stored in hidden fields on the pages rather than in the question object. See the Actions Editor Tip below for details on this part of it.
by Jeff Rhodes
For the Army project discussed in the OpenScript Tip above, the requirement is to give different feedback on try 1, try 2, and try 3. After the third try, the training shows a "Reset" button. Since this "multiple try" functionality is not built-in to ToolBook question objects, we needed to code this in the Actions Editor. The "On click" action for a multiple choice question is shown below:
Define local variable "numTries" (Initial value: 0) Define local variable "currentScore" (Initial value: 0) Score Definable Multiple Choice Question "Definable Multiple Choice" Set numTries to tryCount of button "Definable Multiple Choice" If currentScore = 1 If numTries = 1 Set text of Field "questionFeedback" to text of field "allCorrect 1" Else if numTries = 2 Set text of Field "questionFeedback" to text of field "allCorrect 2" Else Set text of Field "questionFeedback" to text of field "allCorrect 3" End if Set visible of Button "resetBtn" to true Else if currentScore = 0 If numTries = 1 Set text of Field "questionFeedback" to text of field "allIncorrect 1" Else if numTries = 2 Set text of Field "questionFeedback" to text of field "allIncorrect 2" Else Set text of Field "questionFeedback" to text of field "allIncorrect 3" End if Else If numTries = 1 Set text of Field "questionFeedback" to text of field "partialCorrect 1" Else if numTries = 2 Set text of Field "questionFeedback" to text of field "partialCorrect 2" Else Set text of Field "questionFeedback" to text of field "partialCorrect 3" End if End if If numTries >= 3 Set visible of Button "resetBtn" to true End if
The logic is fairly simple. We score the question and grab the tryCount property. Based on the score and the try, we set the text of our "questionFeedback" field to the text of the corresponding field ("allCorrect 2" for example if they get the question right on the second try). This design works particularly well for the situation where we load the text of the various "correct" fields from the database since that text can change independently of this action.
VBTrain.Net Tips and News
by Jeff Rhodes
Select Case intType Case "timed10", "timed20", "timed30" Dim timerNum As Integer = CInt(intType.Substring(5, 2)) * 100 Dim jsString As String = BuildTimerScript(6, timerNum) HideContentTemporarily() ShowHideTrainingText(ShowHideEnum.Hide) LoadContent(contentArray) Me.RegisterClientScriptBlock("timerScript", jsString) End Select
A bit of programming to be sure. But once you have dozens, hundreds, or even thousands of training pages using this code to generate their interactions, it is well worth it. .
MORE NEWS AND INFORMATION
Here are the upcoming conferences and events that we have firmed up at this time:
TBCON One-Day Event
TBCON One-Day Event
TBCON One-Day Event
ASTD International Conference & Exposition
We're a couple of months away from releasing the updated "Learning & Mastering ToolBook Instructor 2004." That will be followed later this year by the Assistant 2004 version. Also on the scope for later this year is Tracker.Net version 3. On the medium horizon are new versions of Question, Exam Engine, and Web Player. Stay tuned!
The EnterPage is distributed four times a year, with occasional special issues. Individuals who have expressed interest in Platte Canyon Multimedia Software Corporation or its products receive The EnterPage. Suggestions for articles or proposals for article submissions are welcome. Send information to EP@plattecanyon.com. Back issues of the EnterPage are available at http://www.plattecanyon.com/enterpage.aspx.
To subscribe or unsubscribe, please send a message to EP@plattecanyon.com. Please include your name and company with new subscriptions.
All content copyright Platte Canyon Multimedia Software Corporation, 2004.