The EnterPage 8-03

The Source for ToolBook and VBTrain.Net News
from Platte Canyon Multimedia Software Corporation


September 27, 2005


In This Issue





SCORM Watch Released

Tracker.Net Version 3 Released

ToolBook Instructor 2004 SP2 (Decaf) and SP3 Available

ToolBook Training Class in Boulder October 10th

TBCON 2005 Report

TBCON 2005 "Archives for Attendees" Available

"Learning & Mastering ToolBook Assistant 2004" Beta Testers Needed



Plug-In Pro Tool Spotlight User Properties Editor

Expert Information

OpenScript Tip

Web Hint



Control Spotlight LmsApi

VBTrain.Net Nugget



Come See Us: The Platte Canyon World Tour

Platte Canyon Products in the Pipeline

Coming in the Next Issue of The EnterPage

About The EnterPage

Information on Subscriptions



We have a lot of new things around here at Platte Canyon: NEW products, NEW versions, a NEW training location, but one old thing that we plan on always having is a strong relationship with our customers. One way we keep up this relationship is through this newsletter. Our goal in writing The EnterPage is to let you know what is going on at Platte Canyon and also to share useful tips and tricks. A customer once commented on how much substance there is to the newsletter. "It isn't just a piece of marketing fluff," he told us. That's right. We have the goal that anything we do will be helpful to training developers. So, whether our new products or versions pique your interest, or you are just looking for a tip or two on working with ToolBook or VBTrain.Net, you're reading the right thing. Enjoy!


Top Stories


SCORM Watch Released


The genesis of this new product comes from an e-Learning DevCon session by Steve Hancock of Rapid Intake that I attended this summer. Steve's session was about SCORM and he demonstrated his testing process for verifying custom SCORM lessons before delivery to the customer. It occurred to me that the "one-page" Learning Management System (LMS) that we use internally and demonstrated at TBCON this year could serve this function if we not only displayed the SCORM Runtime Environment (RTE) messages as they go by but also save and display them on the page. This then allowed the lesson (SCO) to be re-launched with the new data. Making the data editable allowed the developer to configure the "LMS" to send exactly the information with which to test the SCO. Add support for SCORM 1.3 (2004), the ability to save "state" to a file, correct operation in other browsers like Netscape, collapsible screen areas, etc., and you have a product that we have named "SCORM Watch."


SCORM Watch is $395 per developer. Here is a link for more information.


In addition to hitting Steve up for some beta testing (and some great feature suggestions), we also enlisted our friend and TBCON faculty member, Bill Hurley. Thanks to you both for the help!


SCORM Watch: Building the Perfect SCORM


Tracker.Net Version 3 Released


We released this exciting new version of our flagship Tracker.Net product on July 5, 2005. Here is a list of some of its new features:


         Fully multilingual with simultaneous support of six languages

         Supports Netscape, Mozilla, and Firefox browsers

         Supports SCORM 2004 Runtime Environment

         User-configurable Alert, Critical, and Expired Statuses

         Send students notification emails when they are assigned a course

         New "My Courses" interface options

         Filter courses and lessons by status or keyword

         View or email reports as Word, Excel, or HTML

         Assign courses and classes by organization

         Improved password-changing options

         Ability to customize and close the lesson window

         Many new reports

         Downloadable trial version

         More notification email options

         Required course completion dates

         Notification messages for individual courses, lessons, and classes


Here is an online PowerPoint presentation describing the new features in more detail:


Pricing is unchanged at $5,995 for up to 500 users or $8,995 for unlimited users on a single web site. You may purchase the source code for an additional $4,995.


More information including a free evaluation version is available at:



ToolBook Instructor 2004 SP2 (Decaf) and SP3 Available


The reception for service pack 2 (previously codenamed Decaf in a reference to its decoupling of the ToolBook HTML from Java) has been outstanding. And now service pack 3 is available as well. We won't repeat the list of features from the well-written articles listed below, but just wanted to pass along kudos to Tim Barham, Charley Delaney, and the rest of the SumTotal team!






ToolBook Training Class in Boulder October 10th


With Chris Bell's relocation to Boulder, Colorado, we are pleased to announce that all of our hands-on ToolBook classes will now be held in the historic Boulderado hotel. The fun starts October 5, 2005 and continues with these scheduled 2006 dates: January 16, April 10, August 7, and November 6. We only have two attendees so far for the October 5th class, so there is even more opportunity for individual attention. Learn more at:



TBCON 2005 Report


The 2005 edition of the ToolBook & VBTrain.Net User's Conference had almost too many highlights to mention. About 100 thrill-seeking developers descended on Colorado Springs from July 30 August 3. The biggest SumTotal contingent ever (13) shared inside details on the Actions Editor, Decaf (SP2), Simulations, and ToolBook's exciting future. Peter Jackson of traveled all the way from Australia (as did SumTotal's Tim Barham) to share his JavaScript and ToolBook HTML insights. Jeff Rhodes, Mike Cline, Chris Bell, and Mauro Rech contributed .NET sessions. The food at the elaborate receptions was said to be the best ever, and the karaoke and hack-acks were great fun as always. Chris Bell entertained the crowd greatly with his juggling/comedy/game show demonstration hack-ack, while Bill Hurley won first prize.


Other highlights include:


SumTotal Systems ToolBook Design Awards


Congratulations to Michael Hersh of USASMDC for winning the Best ToolBook Online Training award. A big pat on the back also goes to the Verizon team of Tom Hall, Lee Karns, and Peter Hoyt for winning the best ToolBook Productivity Tool for "The Verizon CIS Rapid Development Suite." Both teams won Apple iPod Minis. Here is the SumTotal press release:


VBTrain.Net Design Awards


Bob Culver won first place in the "Best VBTrain.Net Training Application" while Kim Halat won second place. Mauro Rech won first place for the "Most Innovative Use of VBTrain.Net" while the U.S. Army team of Steve Stacy, Marvin McFarland, and Shannon Taylor won second place. First place winners received $200 while second place winners received $100. Here is a link for more information as well as links to winning entries:


To view the famous group photo as well as more information about TBCON 2005, go to:


Mark your calendars for June 19 - 21, 2006 (preconference training June 17 and 18), when the fun starts again!


TBCON 2005 "Archives for Attendees" Available


If you couldn't make the conference but would still like to download the sample applications and presentations from most of the 60+ TBCON 2005 sessions, you'll be glad to know that the "Archives for Attendees" is now available for only $50. Past versions are discounted as are bundles of multiple years. To learn more, go to:



"Learning & Mastering ToolBook Assistant 2004" Beta Testers Needed


We are looking for a couple more beta testers for "Learning & Mastering ToolBook Assistant 2004." If you have some time in the next week to give it a thorough test, please email Chris Bell at Beta testers who go through the whole training and give feedback receive a free copy.





Plug-In Pro Tool Spotlight User Properties Editor


This tool goes all the way back to 1997 when we wrote the ToolBook Synergy product under contract to what was then Asymetrix. The idea was to take a Designer's Edge storyboard and create a matching ToolBook module. Text, graphics, and media obviously had corresponding places on a ToolBook page. But what to do with things like programming instructions? We decided to put those into user properties. But we then needed an easy-to-use editor that had lots of space for displaying the properties. We saw the value of this editor to the Plug-In Pro as well as for Synergy, so we developed that part on our nickel and used it for both (which made our Asymetrix budget manager happy of course).


In addition to providing a big area for viewing and editing user properties, the other main innovation of the User Properties Editor is the ability to select an object on the page/background from a drop-down list and then be able to view/edit THAT object's properties. Here's a link to the help topic to learn more:


More information on Plug-In Pro is available at:



The following are all from the "Learning & Mastering ToolBook" series


Expert Information


by Denny Dedmore


Check for ActiveX Using Undocumented Functions


There is an undocumented R.SBK function which is used by various widgets (UMP for example), which can check to see if a class identifier (CLSID) is in the user's registry (from which we can assume this means the control is installed).


The function is called:


ASYM_fileFromCLSID(<CLSID of control>)


A non-null return value indicates that it is installed.


Here are some common control values you can use.


Flash: {D27CDB6E-AE6D-11CF-96B8-444553540000}

WMP: {22D6F312-B0F6-11D0-94AB-0080C74C7E95}

Real: {CFCDAA03-8BE4-11CF-B84B-0020AFBBCCFA}


What good will this do you? If instead of launching your main app, you launch a little app that checks to see if all controls are installed, you can warn the user, tell them to go get the controls and install them and then gracefully exit. Or if all are installed, silently run the main book.


OpenScript Tip


by Jeff Rhodes


The page level mouseEnter script below is a good example of the benefits of putting code at the page rather than in individual objects. Taken from the "Resource Manager" page of "Learning & Mastering ToolBook," this script takes care of 14 different rectangles covering a screen capture of the Resource Manager dialog box. It uses the target property to determine if the object is even a rectangle and, if so, which of the 14 it is. The lrn_hideCharacter line hides the Agent narrator. We change the mouse cursor and then determine the "rectangle num" based on the name of the rectangle. We next change the color of the last rectangle we looked at to white, and then change the current one to blue. We show specific information about the topic in a "Display Field" (this is a good example of a user defined message), using the rectangleNum. Lastly, we keep track of the steps completed, so that we can change the next page button to blue when completed. As an exercise, you might try to achieve the same effect with either a script or shared script on the individual rectangles.


to handle mouseEnter

local string tarName

local word rectangleNum


tarName = name of target

if object of target = "rectangle" and

tarName <> null

sysCursor = cursor "mouseEnterCursor 3"

rectangleNum = word 2 of tarName

if lastRectangleShown of this page <> null

fillColor of (lastRectangleShown of this page) = white


send lrn_hideCharacter

end if

lastRectangleShown of this page = target

fillColor of target = 180,50,100 -- blue

send lrn_showTextInDisplayField rectangleNum

get lrn_checkSteps(rectangleNum, 14)



end if

end mouseEnter


to handle mouseLeave

sysCursor = default


end mouseLeave



Web Hint


by Tim Barham


OnPropertyChange Event


You can use the "On property change" event to determine when the text in a field changes. This event will fire if the user changes the text and presses enter (for a single line field, at least), or tabs out of the field.


One parameter of the property change event is the name of the property that changed. The first line of script should be an "if" statement, checking that the property name is "text". Then do whatever you like based on the text of the field.






Control Spotlight LmsApi


The LmsApi product has one role in life: to help e-Learning developers who are using ASP.NET make the various SCORM runtime environment (RTE) calls. As many of you know, these calls are made via JavaScript. Dynamically generating this JavaScript from server-side code in .NET can be tricky. For example, you would typically keep track of the student's time in the lesson using the Session object. But this data needs to be sent back to the LMS when the student exits. So you typically want to generate the appropriate JavaScript when each page loads just in case the student exits. LmsApi helps make this possible. For example, in the case mentioned, your code looks like this:


jsString = apiObject.GetJsSetValue(SetValueEnum.core_session_time, sessionTime, True)

RegisterClientScriptBlock("setTimeInfo", jsString)


We are working on a new version of LmsApi where you can specify whether to generate SCORM calls in 1.2 or 1.3 format. You will then even be able to pick the SCORM version via the query string with URL's like LmsApi is $245 on its own or is part of the $995 VBTrain Bundle.





VBTrain.Net Nugget


by Jeff Rhodes


This issue's Nugget comes from a recent update to the and web sites. For several years, we've wanted to show user comments and testimonials about our products that have been emailed to us or posted online. Our first step was to get the comments into a SQL Server database. We added a single ProductComments table with Product Id (1 for Learning & Mastering ToolBook, 9 for Tracker.Net, etc.), comment text, and comment date. We then added a user control (comments.ascx) to the web site. A user control can be shared among multiple pages on the site and can have their own behavior, properties, and events. When the control is added to each page, its tags look like this:


<uc1:comments id="Comments1" runat="server" ProductList="4"></uc1:comments>


The ProductList value of "4" refers to TBK Tracker. We designed this property so that multiple product Id's could be separated by a comma (4,100 would list both TBK Tracker comments and technical support comments). Or you could put "all" to show the comments across the board. The control also has these optional properties: NumItems (how many comments to display), Year (limits the comments to a particular year), and CommentLabel (used if you don't want the label to say "User Comments").


Here's what the comments.ascx page looks like:


<h5><asp:label id="typeLabel" Runat="server">User</asp:label>&nbsp;Comments</h5>

<table class="CommentText">

<asp:repeater id="CommentsRepeater" runat="server">


<tr class="navBarRow">

<td><img src="images/bullet.gif"></td>

<td><%# Container.DataItem("CommentText") %>












<a class="paragraf" id="commentsAnchor" runat="server">View all comments</a>


The first line shows "User Comments" unless the CommentLabel property is different as described above. We then start an HTML table and use the ASP.NET Repeater control to make as many rows as there are records in the data that we "bind" to. The data needs to have a "CommentText" column in order for the Container.DataItem("CommentText") bit to work. The Separator Template puts a blank row in for readability. Finally, we put a hyperlink (anchor tag) to a popup page that shows all the comments. The runat="server" part shows a great capability of ASP.NET where we can take a normal HTML element and make it "server-side," allowing us to set its properties with server-side code. In this case, we dynamically set the href so that we can read the Product Id and other properties via the query string:


javascript:void'usercomments.aspx?id=4&year=&label=User', 'Comments', 'width=640, height=480, status=no, resizable=yes, scrollbars=yes, toolbar=no, menubar=no');


The last part is the server-side code for the user control. I've shown the Page_Load code below with a few non-essential parts removed. I've interspersed explanations along the way.


If IsPostBack = False Then

Dim prodList As String = Me.ProductList

Dim tableId As DataTable = Me.CommentsTable

Dim labelText As String = Me.CommentLabel

Dim numComments As Int32 = Me.NumItems


The code above reads the properties previously discussed as well as the list of all comments in the database. These comments are cached by the server and thus are only read from the database very infrequently. This greatly improves speed.


Dim hrefString As String = String.Format("javascript:void'usercomments.aspx?id={0}&year={1}&label={2}', 'Comments', 'width=640,height=480,status=no,resizable=yes,scrollbars=yes,toolbar=no,menubar=no');", prodList, Me.Year, labelText)


commentsAnchor.HRef = hrefString

typeLabel.Text = labelText


We create the href string based on the property values and then set that property of our anchor object. We also set the text of the label that is "User" by default.


If IsNothing(tableId) = False Then

Dim builderId As New StringBuilder

Dim viewId As DataView = tableId.DefaultView

Dim prodString As String = "ProductId={0}"


viewId.RowFilter = ""


If prodList.ToLower <> "all" Then

Dim prodArray As String() = prodList.Split(CChar(","))

Dim prodNum As Int32

Dim prodLength As Int32 = prodArray.Length


For prodNum = 0 To (prodLength - 1)

With builderId

If .Length > 0 Then

.Append(" OR ")

End If

.Append(String.Format(prodString, prodArray(prodNum)))

End With



If builderId.Length > 0 Then

viewId.RowFilter = builderId.ToString

End If

End If


This code uses a very helpful object called a DataView. It allows us to filter the table without losing the original data. That's how we show only the comments for the product(s) of interest on this page.


If Me.Year <> "" Then

' code to limit to a year omitted

End If


Dim endingNum As Int32 = viewId.Count


If endingNum > numComments Then

' code to pick random comments out of the list omitted

End If


We omit the further filtering of the DataView based on the year or based on randomly grabbing the rows we want from a bigger list.



With CommentsRepeater

.DataSource = viewId


End With


Most of the work was in getting the DataView. Actually "binding" it to the Repeater is only the two lines of code above.


End If

End If


You can see an example of this page at:


Most of the other pages on both the and sites now use this control as well. The site has a variation that displays reviews by category for the conference.


One last note: the new "Master Page" functionality of the upcoming ASP.NET 2.0 would have allowed us to code this functionality without needing a user control. We'll discuss this new .NET version along with Visual Studio .NET 2005 in a future newsletter as well as at TBCON 2006.





Come See Us: The Platte Canyon World Tour


Our speaking and exhibit schedule is quite full this year. If you are attending any of the following shows, we hope to see you.


Training Fall (Long Beach, CA, October 17 - 19, 2005):

Booth: 306



DevLearn (San Francisco, CA, November 16 18, 2005):

Jeff Rhodes session (10:15 AM on November 17): "Beyond Templates: Creating Interactive, Database-driven e-Learning using ASP.NET"

Chris Bell session (3:30 PM on November 17): "Interacting with Flash Using JavaScript"


ASTD Techknowledge (Denver, CO, January 31 February 2, 2006):

Booth: 212

Jeff Rhodes session (11:00 AM on February 1): "Talking SCORM with ASP.NET"


Training (Orlando, FL, March 6 8, 2006):

Booth: TBD

Jeff Rhodes session (time and date TBD): "Why E-learning Should Be Database-Driven"



ASTD International (Dallas, TX, May 8 10, 2006):

Booth: TBD



Platte Canyon Products in the Pipeline


Look for "Learning & Mastering ToolBook Assistant 2004" very shortly, followed by LmsApi version 2. After that, we'll be updating Question and Exam Engine.


Coming in the Next Issue of The EnterPage

         Another Plug-In Pro Tool Spotlight

         More Expert Information, OpenScript Tips, and Web Hints from the "Learning & Mastering ToolBook" series

         Another VBTrain Control Spotlight

         Another VBTrain.Net Nugget



About The EnterPage


The EnterPage is distributed up to four times per 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 Back issues of the EnterPage are available at:


Information on Subscriptions


To subscribe or unsubscribe, please send email to Please include your name and company with new subscriptions.



All content Copyright Platte Canyon Multimedia Software Corporation, 2005.