The EnterPage 8-03

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

 

September 27, 2005

 

In This Issue

 

Introduction

 

TOP STORIES

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

 

TOOLBOOK TIPS AND NEWS

Plug-In Pro Tool Spotlight User Properties Editor

Expert Information

OpenScript Tip

Web Hint

 

VBTRAIN.NET TIPS AND NEWS

Control Spotlight LmsApi

VBTrain.Net Nugget

 

MORE NEWS AND INFORMATION

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.

 

http://www.plattecanyon.com/productDisplay.aspx?id=14

 

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:

 

http://www.vbtrain.net/documents/tracker3new.htm

 

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:

 

http://www.vbtrain.net/trackerinfo.aspx

 

 

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!

 

SP2: http://doiop.com/TB_SP2

SP3: http://doiop.com/TB_SP3

 

 

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:

 

http://www.learningandmastering.com

 

 

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 toolbookdeveloper.com 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:

 

http://www.sumtotalsystems.com/press/2005/09/07/1

 

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:

 

http://www.vbtrain.net/designawards.aspx

 

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

 

http://www.tbcon.com/resources_2005.aspx

 

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:

 

http://www.tbcon.com/archives_2005.aspx

 

 

"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 cbell@plattecanyon.com. Beta testers who go through the whole training and give feedback receive a free copy.

 

 

TOOLBOOK TIPS AND NEWS

 

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:

 

http://doiop.com/userProperties

 

More information on Plug-In Pro is available at:

 

http://www.plattecanyon.com/pluginpro.aspx

 

 

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

else

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)

else

forward

end if

end mouseEnter

 

to handle mouseLeave

sysCursor = default

forward

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.

 

 

 

VBTRAIN.NET TIPS AND NEWS

 

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 ...training.aspx?SCORM=12. LmsApi is $245 on its own or is part of the $995 VBTrain Bundle.

 

Information: http://www.vbtrain.net/productDisplay.aspx?id=6

 

 

VBTrain.Net Nugget

 

by Jeff Rhodes

 

This issue's Nugget comes from a recent update to the plattecanyon.com and vbtrain.net 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">

<ItemTemplate>

<tr class="navBarRow">

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

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

</td>

</tr>

</ItemTemplate>

<SeparatorTemplate>

<tr>

<td></td>

</tr>

</SeparatorTemplate>

</asp:repeater>

</table>

<br>

<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 window.open('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 window.open('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

Next

 

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

.DataBind()

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:

 

http://www.plattecanyon.com/tbkTracker.aspx

 

Most of the other pages on both the plattecanyon.com and vbtrain.net sites now use this control as well. The tbcon.com 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.

 

 

MORE NEWS AND INFORMATION

 

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

http://www.trainingfall.com

 

 

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"

http://doiop.com/devLearn

 

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"

http://www.astd.org/astd/conferences/tk06/tk06_home

 

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

Booth: TBD

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

http://www.trainingconference.com

 

 

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

         More

 

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 ep@plattecanyon.com. Back issues of the EnterPage are available at:

 

http://www.plattecanyon.com/enterpage.aspx

 

Information on Subscriptions

 

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

 

 

All content Copyright Platte Canyon Multimedia Software Corporation, 2005.