The EnterPage 10-01
The Source for ToolBook, VBTrain.Net, and FlashTrain news
from Platte Canyon Multimedia Software Corporation
February 12, 2007
Sign Up for the ToolBook User’s Conference / e-Learning Authoring Conference
Dan Carr and Adam Brown Headline the Flash Track
Tim Barham, Denny Dedmore, Tom Hall, and Lee Karns Lead the ToolBook Track
Mark Henry, Joe Ganci, Bill Hurley, and Mike Cline Provide Management Insight
Jeff Rhodes, Stu Moriens, Simon Price, and Peter Hoyt are Featured Web Technology Faculty
Preconference Training is the Most Comprehensive Yet
Plug-In Pro Tool Spotlight – Special Characters
Platte Canyon Products in the Pipeline
Coming in the Next Issue of The EnterPage
Welcome to The EnterPage newsletter. Like many of you, I’m sure, we are up to our eyeballs in developing new products and updating existing ones. But we wanted to take a brief time out to share our excitement about our line-up for The ToolBook User’s Conference / e-Learning Authoring Conference this summer as well as share useful information on ToolBook, Flash, and .NET. Until next time, enjoy!
An attendee wrote in the evaluation for the 2006 conference, “You could have doubled the price and it still would not outweigh the value.” We didn’t take him up on that though. In fact, we’re pleased to announce that we were able to keep the low prices from last year’s ToolBook User’s Conference (TBCON) / e-Learning Authoring Conference (eLearnCon) unchanged for this year. This ninth edition of the conference continues the tradition of having 18 one-hour session blocks over three days, with each block having sessions on Flash, Management, ToolBook (Intermediate/Advanced), ToolBook (Introduction), and Web Technologies. And if that isn’t enough, we have a great lineup of preconference workshops as discussed later in this newsletter. In addition to all the scheduled learning, there will be three great receptions, the always popular “Hack Ack” contest, and the Help Desk where you can get answers to your individual questions. We hope you will join us!
Dates
July 30 – August 1, 2007
Preconference Training July 28 – 29, 2007
Pricing (All Options Include Three Meals per Day Plus Snacks)
Price is based on your lodging selection. The prices shown include the conference itself, all meals, and the specified lodging.
Off Campus - $750
Double Dorm Room - $825
Single Dorm Room - $895
Shared Apartment or CC
Single Apartment - $1,145
Preconference Training
Training can be taken in addition to the conference or on its own. Includes lunch but not lodging or meals.
One Preconference Session - $150
Two Preconference Sessions - $285
Three Preconference Sessions - $420
Four Preconference Sessions - $555
Links
Registration https://ssl2.securewebs.com/tbcon/register.aspx
Sessions: http://www.tbcon.com/tbconsessions.aspx
Preconference Workshops: http://www.tbcon.com/tbconPreconSessions.aspx
Faculty: http://www.tbcon.com/tbconpresenters.aspx
We are thrilled to welcome Dan Carr, the developer of the Flash Learning Interactions for then Macromedia as well as a recognized guru in Flash video and other areas, to the e-Learning Authoring Conference faculty for the first time. Dan will show you how to create Flash components, how to synchronize your content and video, and the “do’s and don’t’s” of creating Learning Interactions.
Making his encore appearance on the faculty, Adam Brown of Oncall Interactive will teach you all about ActionScript 3, how to create an object-oriented architecture in Flash, how to build e-Learning games, and how to deploy Flash to mobile devices.
Jeff Rhodes will add some sessions on implementing SCORM with the ExternalInterface class, the in’s and out’s of Training Studio and the Army’s Enhanced Learning Flash templates, calling web services from Flash, and more.
Check out the web site at http://www.tbcon.com/tbconsessions.aspx for other sessions on the Flash track.
If there is a face of TBCON, it is Tim Barham, the ToolBook
Development Manager for SumTotal Systems, Inc. As in
past years, we’ll fly Tim all the way from
Tom Hall, a leading ToolBook author, trainer, and consultant, will be on hand to show new ToolBook users how to use the Actions Editor, create simulations, HTTP Post to web sites, and make SCORM calls.
As he has every year since 1999, Lee Karns will share his expertise in such topics as simulations, templates, question objects, and extended property editors.
With both Introductory and Intermediate/Advanced tracks, virtually every aspect of ToolBook will be covered by such experts as Simon Price, Stu Moriens, Jeff Rhodes, and Dan Richards. Check out the web site at http://www.tbcon.com/tbconsessions.aspx to see the whole lineup.
The e-Learning Management track that we introduced last year was universally popular with attendees. We’ve made it even better this year with the addition of Mark Henry, industry expert and the host of The Alternative Authorware Conference. Mark will show you how to implement e-Learning games, model business practices, get your students to practice their new skills, and avoid pitfalls in rapid development.
Joe Ganci, president of Dazzle Technologies, will share his insights on how to put Murphy in his place when things start going horribly wrong, how to add games to your training, how to set up engines and shells for faster, cheaper and better e-Learning, and more.
Bill Hurley of American Signature will share his expertise in the Kirkpatrick-Deming model for performance improvement, e-Learning project planning, how to build custom LMS reports with Crystal Reports, and how to validate your test questions.
Longtime faculty member Mike Cline of Venturist, Inc. brings his day job of teaching the widely respected “Prometheus Process” of strategic planning to both the conference and preconference.
Jeff Rhodes and Dan Richard also contribute to the Management track.
See the whole list of sessions at http://www.tbcon.com/tbconsessions.aspx.
Many e-Learning projects don’t fit into a single category. You might need to call JavaScript functions from ToolBook, talk to a .NET web service from Flash, store your information in XML, create templates across authoring tools, and more. Jeff Rhodes shares programming tips in JavaScript, Flash, ToolBook, and .NET. He also demonstrates how to use products like Captivate, Training Studio, Exam Engine, and the Army’s new Enhanced Learning tool.
Stu Moriens of Tricore Interactive
delves into Flash/ToolBook integration, creating templates, and deployment to iPods and other mobile devices. Simon Price of the
We have perhaps our strongest lineup of preconference workshops ever. Attendees for Mike Cline’s “Strategic Planning and Execution” workshops on Sunday, July 29 will receive a free copy of “Winning in FastTime” by John A. Warden III and Leland Russell. These sessions are limited to 20 participants, so don’t delay. We’re also thrilled to have Mark Henry’s “Gaming and Simulation - Design and Development” workshops (parts I and II) the same day. Every time I have seen Mark Henry speak, the room has been packed!
For those of you needing to learn ToolBook for the first time or brush up on your skills, Lee Karns, Tom Hall, and Bill Hurley have you covered. Finally, Jeff Rhodes will train you in programming, Training Studio, JavaScript, and ActionScript.
Here is the complete preconference lineup:
Saturday, July 28, 8 AM
– Noon
A Detailed Look at Creating Simulations in ToolBook Instructor – Tom Hall
Programming 101 – Jeff Rhodes
ToolBook for Absolute Beginners (Hands on) – Lee Karns
Saturday, July 28, 1 –
5 PM
ToolBook Question Objects and Media (Hands on) – Lee Karns
Training Studio – Jeff Rhodes
Using the ToolBook Instructor Actions Editor – Tom Hall
Sunday, July 29, 8 AM –
Noon
Gaming and Simulation - Design and Development I – Mark Henry
JavaScript for ToolBook, ASP.NET, and Flash – Jeff Rhodes
Strategic Planning and Execution Workshop (Part 1) – Mike Cline
The Actions Editor for Beginning and Intermediate ToolBook Developers – Bill Hurley
ToolBook Templates (Hands on) – Lee Karns
Sunday, July 29, 1 – 5
PM
Creating Catalogs and Catalog Objects (Hands on) – Lee Karns
Gaming and Simulation - Design and Development II – Mark Henry
Introductory and Intermediate Flash ActionScript – Jeff Rhodes
OpenScript for Beginning and Intermediate ToolBook Developers – Bill Hurley
Strategic Planning and Execution Workshop (Part 2) – Mike Cline
We are on track to release Training Studio by the end of March. Its basic concept is that the subject matter expert (SME) enters the training content into a database rather than inside an authoring tool. At the same time, the SME selects an interaction type (Timed Bullets, Rollover Hotspots, Multiple Choice Question, etc.) from a supported list. Media and graphics are stored externally and referenced in the database. The e-Learning itself is then generated at runtime by loading the database and the external media/graphics. Advantages of this approach include the ability to quickly update content, the reduced tool-specific training needed for SME’s, the ease of supporting multiple languages, and greatly reduced development/maintenance time. Training Studio uses Flash templates and will possibly support other output formats in later versions. Flash developers can edit the templates and create new ones if desired. There is a wide array of built-in functionality including SCORM 1.2/2004 support, a complete review/comment tracking system, pausing and restarting of audio, and page completion display. Learn more at: http://www.trainingstudio.net.
Pricing
Development license (includes all templates and their Flash source, up to three licenses of the Training Studio Content Editor, one license of the Training Studio Publisher, unlimited copies of the Training Studio Comment Administrator, and the Training Studio Comment Tracker web service with its Visual Studio.NET 2005 source files) - $1,995
Additional Licenses of Training Studio Content Editor (for use by subject matter experts) - $295 each
As many of you already know, there is a new ToolBook “Blackcomb” preview edition available. We’re particularly excited about the new “SmartPages” and “SmartStyles” concept that Tim Barham explains in the blog (http://www.toolbook.com/blog) and will be covering at TBCON. You can sign up for the preview at http://www.toolbook.com/preview.
Have you ever found yourself searching for the right ANSI number for special characters like £ (163), À (192), or © (169)? Or after you figure out the right combination, do you have to work hard to remember to press Alt - 0 followed by the number (using the numeric keypad)? Do you need a faster way? If so, the Special Characters option in the Plug-In Pro is for you. You just show its floating toolbar and you can choose the desired character from the menu. The Plug-In Pro then automatically inserts it into your field or recordfield.
Here is a link to the help topic for this tool: http://www.plattecanyon.com/help/pluginpro/Characters_-_Insert_Special.htm
More information on Plug-In Pro and a free trial version are available at:
http://www.plattecanyon.com/pluginpro.aspx
By Simon Price,
JavaScript for
OpenScript Programmers
I thought I'd chip in with a few comments relating to JavaScript
1. JavaScript for OpenScript programmers
If you already know OpenScript (OS) then JavaScript (JS) is pretty easy to learn.
- OS has "to handle", "to set" and "to get" whereas JS does everything through "function". To return a value, both languages use "return" (although OS only allows that in a "to get"). JS has no direct equivalent of "to set".
- OS has (according to Claude Ostyn) a "containment inheritance" object model (i.e., it's up to the programmer to stick "forward" statements in) and messages bubble up the object tree. JS has a "prototype based" object model which is much simpler (and less sexy) than the OS one. In fact, most JS programmers write their code in a non-object orientated way and this is likely to be the most appropriate way of writing little JS functions to work with the ToolBook (TB) web runtime. (i.e., you probably don't need to know much about the JS object model unless you plan to write a JS application)).
- The one thing you will need to know is how to refer to JS built-in objects. TB uses a notation "x of y" or "x of y of z". JS uses the C++/Java-style dot notation "y.x" or "z.y.x".
- Both JS and OS use untyped variables. Naughtily, they both automatically declare variables on first use if they're not declared already.
- Nice things in JS, not built into OS are regular expressions (these "regex" are amazingly useful once you get used to them) and content addressable arrays (aka hashes). Regex are great for extracting info from strings or validating content. Hashes allow you to have arrays indexed on strings instead of numbers (e.g., a["hello world"] = "fred") which makes life a lot easier. OS system books have a set of functions to do this but they're not as fast or clean as the built-in JS ones.
2. Authoring Web content using ToolBook
TB is great for producing mini authoring environments that generate (static) Web content based on your own templates. I've been doing this using a combination of TB and the free MSXML4 library. You can generate hundreds of web files in no time at all based on content edited with TB and processed with XSLT. But this is hard
A few years back I also created a simple version of ASP, which for want of a better term, I'll call OSP that lets you compose page templates just as you would ASP pages (using <% %> and <%= %>). These are compiled by a short OS script to generate OpenScript functions that can be called to generate Web pages (or XML data).
By Jeff Rhodes
Hierarchy
As a general rule, you should "forward" Instructor's standard OpenScript messages such as enterApplication, leaveApplication, enterPage, leavePage, mouseEnter, and mouseLeave. You are also perfectly free to handle these messages. This points out a very useful concept: the ability to handle the same message on multiple levels. This allows you to do "specific" things at a local level and "general" things at a higher level. The OpenScript below shows a simple example of the enterPage and leavePage handlers at the page and book levels.
Notice that we forward the message first (which unlocks [on enterPage] or locks [on leavePage] the screen) before performing our desired actions.
to handle enterPage -- page script
forward -- unlocks screen at book level
mmPlay clip "xyz" wait
show field "explanation"
end enterPage
to handle enterPage -- book script
sysLockScreen = false
forward
end enterPage
to handle leavePage -- page script
forward -- locks screen at book level
hide field "explanation"
end leavePage
to handle leavePage -- book script
sysLockScreen = true
forward
end leavePage
By Denny Dedmore
Numeric Formatting in
the Actions Editor
A ToolBook List user asked: "Is there any way, using the Actions Editor, to format a number? We need to show a number with two decimal places. That is, 34.20 rather than 34.2 or 34.00 rather than 34."
Denny's response:
Here's one way to do it, via code.
If you will be using it often, in many places, it would be better to convert this into a Shared Action so that it can be called like a function.
****
Define local variable "pos" (Initial value: "")
Define local variable "val" (Initial value: "")
Define local variable "ct" (Initial value: "")
Display query: "Enter a number:"; store response in val
If val contains "."
Set ct to charCount(val)
Comment: If only 1 decimal place showing, add a 0 to pad it to 2
If offset(".",val) = ct - 1
Set val to val & "0"
Else
Comment: To get here, number must be showing decimal value
Comment: with 3 or more decimal places...so lets round it to 2
Set val to round(val*100)/100
End if
Else
Comment: If the number does not contain a decimal, add one and 2 zeros
Set val to val & ".00"
End if
Display alert: "The rounded to 2 places answer is: " & val
by Jeff Rhodes
Web Service “Comment”
Categories
One of the things that we wanted to add to our upcoming Training Studio was a mechanism for a reviewer of the content to be able to send comments that would be stored on a web server. A separate “Administrator” application can then view the comments by application and reviewer, document the actions taken, close comments, etc. We implemented this with a .NET 2.0 web service with some methods that can be called from the training (Flash) and others that are called by the Administrator application (.NET Windows Forms).
One such method called by the training is RetrieveCategories. We call this method from Flash to get the list of both Comment categories (comment, problem, suggestion, etc.) and Reviewer categories (management, student, subject matter expert, etc.). The developer can thus use the same comments movie for different customers and change the types of comments and reviewers by customer.
This method is shown below:
<WebMethod()> _
Public Function RetrieveCategories() As DataSet
Dim catDataSet As DataSet = Me.CategoryDataSet
Return catDataSet
End Function
The method turns around and looks for the CategoryDataSet property, which is implemented like this.
Private ReadOnly Property CategoryDataSet() As DataSet
Get
Dim dataSetId As DataSet
If Current.Cache("CategoryDataSet") Is Nothing Then
dataSetId =
Me.GetCategoryDataSet(Me.ConStrBase)
Current.Cache("CategoryDataSet") = dataSetId
Else
dataSetId = CType(Current.Cache("CategoryDataSet"), DataSet)
End If
Return dataSetId
End Get
End Property
The property is read only since we only want to read what the categories are. There is no mechanism from within the web service to set the categories. Rather, this is done by editing the Access database directly.
Our first step is the check the Cache of the web server to see if the DataSet (a .NET collection of database tables) CategoryDataSet is already stored. Since it is much quicker to read it out of memory than to query the database, we store it in memory as long as the web server has room. This means that if 100 comment windows are populated via the web service per hour, only the first one has to take the time to actually read the database to get the list of categories.
If the DataSet is not in memory, we call the GetCategoryDataSet method, passing in the connection string stored in the ConStrBase property:
Private ReadOnly Property ConStrBase() As String
Get
Dim baseString As String
If Current.Cache("ConStrBase") Is Nothing Then
baseString = String.Format("provider=Microsoft.Jet.OLEDB.4.0;Data Source={0}App_Data\", Current.Request.PhysicalApplicationPath)
Current.Cache("ConStrBase") = baseString
Else
baseString = CStr(Current.Cache("ConStrBase"))
End If
Return baseString
End Get
End Property
This whole property is the “provider” for reading the database (the Jet provider in this case since we are using an Access database) and the path to the database. Notice how we use Request.PhysicalApplicationPath to dynamically determine the location on the actual web server. This allows the web service to be placed anywhere on the web site (though it must be a virtual directory using ASP.NET 2.0).
The implementation of GetCategoryDataSet uses the dbName and reviewTableNameArray variables as shown below.
Private Const dbName As String = "TSTracker.mdb"
Private reviewTableNameArray As String() = {"CommentCategories", "ReviewerCategories"}
Here is the implementation.
Private Function GetCategoryDataSet(ByVal baseString As String) As DataSet
Dim conStr As String = String.Concat(baseString, dbName)
Dim dataSetId As New DataSet
Dim oledbConId As New OleDbConnection(conStr)
Dim dbCommandId As New OleDbCommand
Dim dbAdapterId As OleDbDataAdapter
Dim tableName As String
Dim tableNum As Integer = 0
If oledbConId.State <> ConnectionState.Open Then
oledbConId.Open()
End If
With dbCommandId
.Connection = oledbConId
.CommandType = CommandType.StoredProcedure
End With
For Each tableName In reviewTableNameArray
dbCommandId.CommandText = String.Format("Read{0}", tableName)
dbAdapterId = New OleDbDataAdapter(dbCommandId)
dbAdapterId.Fill(dataSetId)
dataSetId.Tables(tableNum).TableName = tableName
tableNum += 1
Next
oledbConId.Close()
Return dataSetId
End Function
The first step is to build the entire connection string conStr. We then make a new DataSet, dataSetId, that we’ll fill with the appropriate information. We connect to the database, storing the connection in oledbConId, and then create the OleDbCommand object to query the database and the OleDbDataAdapter object to fill our dataSetId DataSet. We open the database and tell the command object that we are going to be using stored procedures (queries in Access). We then step through each of the table names we want to read (CommentCategories and ReviewerCategories). We judiciously named the queries in Access that we use to read the information ReadCommentCategories and ReadReviewerCategories. That allows us to call each of those queries within the loop, fill the DataSet with its information, and then name that table. Finally, we close the connection and return the DataSet.
Calling this method from returns this XML:
<?xml version="1.0"
encoding="utf-8" ?>
<DataSet xmlns="http://www.trainingstudio.net/trainingStudiotracker/">
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
// Schema information deleted for space
reasons
-
<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
-
<NewDataSet xmlns="">
-
<CommentCategories diffgr:id="CommentCategories1" msdata:rowOrder="0">
<CommentCategoryId>1</CommentCategoryId>
<CommentCategoryName>Comment</CommentCategoryName>
</CommentCategories>
-
<CommentCategories diffgr:id="CommentCategories2" msdata:rowOrder="1">
<CommentCategoryId>3</CommentCategoryId>
<CommentCategoryName>Problem</CommentCategoryName>
</CommentCategories>
-
<CommentCategories diffgr:id="CommentCategories3" msdata:rowOrder="2">
<CommentCategoryId>2</CommentCategoryId>
<CommentCategoryName>Suggestion</CommentCategoryName>
</CommentCategories>
-
<ReviewerCategories diffgr:id="ReviewerCategories1" msdata:rowOrder="0">
<ReviewerCategoryId>5</ReviewerCategoryId>
<ReviewerCategoryName>Instructor</ReviewerCategoryName>
</ReviewerCategories>
-
<ReviewerCategories diffgr:id="ReviewerCategories2" msdata:rowOrder="1">
<ReviewerCategoryId>4</ReviewerCategoryId>
<ReviewerCategoryName>Management</ReviewerCategoryName>
</ReviewerCategories>
-
<ReviewerCategories diffgr:id="ReviewerCategories3" msdata:rowOrder="2">
<ReviewerCategoryId>7</ReviewerCategoryId>
<ReviewerCategoryName>Safety</ReviewerCategoryName>
</ReviewerCategories>
-
<ReviewerCategories diffgr:id="ReviewerCategories4" msdata:rowOrder="3">
<ReviewerCategoryId>2</ReviewerCategoryId>
<ReviewerCategoryName>Student</ReviewerCategoryName>
</ReviewerCategories>
-
<ReviewerCategories diffgr:id="ReviewerCategories5" msdata:rowOrder="4">
<ReviewerCategoryId>1</ReviewerCategoryId>
<ReviewerCategoryName>Subject Matter Expert</ReviewerCategoryName>
</ReviewerCategories>
-
<ReviewerCategories diffgr:id="ReviewerCategories6" msdata:rowOrder="5">
<ReviewerCategoryId>3</ReviewerCategoryId>
<ReviewerCategoryName>Training Developer</ReviewerCategoryName>
</ReviewerCategories>
</NewDataSet>
</diffgr:diffgram>
</DataSet>
We will show the Flash part of this below in the ActionScript Tip.
By Jeff Rhodes
As described in the VBTrain.Net Nugget above, we wanted to read Comment and Reviewer categories from a web service and display them in a List component for the reviewer (the user) to choose from when adding a comment (the web service also stores the reviewer’s information and the comment itself, but that is beyond the scope of this article).
The first step on the Flash side is to declare the WebServiceConnector component and set its WSDLURL parameter to the URL of the web service definition. In our case, this is http://www.plattecanyon.com/TrainingStudioTracker/TSTracking.asmx?WSDL. The available operations (which correspond to the WebMethods in the web service) are available via the drop-down list. We select RetrieveCategories. When the comment movie loads, it calls the web service (if the array of categories has not already been read this session) using this ActionScript:
function callInitializationWebService():Void {
var connectorId:mx.data.components.WebServiceConnector = WSConnector1;
connectorId.addEventListener("send", onSendResult);
connectorId.addEventListener("result", onInitializationResult);
connectorId.addEventListener("status", onInitializationStatus);
connectorId.trigger();
}
We define methods to be called in response to the send, result, and status events. For send, we just display a message saying that we are connecting to the web service. For status, we display any error message returned from the service. The heavy lifting comes when we receive the resulting XML from the web service:
function onInitializationResult():Void {
var connectorId:mx.data.components.WebServiceConnector = WSConnector1;
var resultsXml:XML = connectorId.results.diffgram;
var arrayCounter:Number = 0;
resultsXml.ignoreWhite = true;
var docElementId = resultsXml.firstChild; // NewDataSet
var categoryList = docElementId.childNodes; // Has both Comment and Reviewer categories
categoryArray = new Array();
for(var n=0; n<categoryList.length; n++){
// loops through each category entry
var categoryElements = categoryList[n].childNodes; // categoryId, etc.
var categoryData:Object = new Object();
for(var m=0; m<categoryElements.length; m++){
categoryData[categoryElements[m].nodeName] = categoryElements[m].firstChild.nodeValue; //categoryId, FirstName, etc.
}
categoryArray[arrayCounter] = categoryData;
arrayCounter ++;
}
TSCommon.commentCategoryArray = categoryArray;
loadCategories(categoryArray);
statusTextId.text = "";
connectorId.removeEventListener("send", onSendResult);
connectorId.removeEventListener("result", onInitializationResult);
}
The return value from the web service call is in the connectorId.results property. By experimenting and looking at this property in the Flash debugger, I discovered that if I referenced the diffgram node directly (see the returned XML in the previous article), I could read the .NET DataSet directly as XML. This is a nice result. We then read the XML into an array of arrays so that we don’t have to call the web service again during the current session. We store the array in a static variable of the TSCommon class. We then call the loadCategories method that takes the array and populates the displays for the reviewer. We remove the send and result events because we reuse the WebServiceConnector later on when sending a comment.
Here is the implementation of loadCategories.
function loadCategories(categoryArray:Array):Void {
var arrayCounter:Number;
var categoryData:Object;
var catId:Number;
var catName:String;
var isComment:Boolean;
for(arrayCounter=0; arrayCounter<categoryArray.length; arrayCounter++) {
categoryData = categoryArray[arrayCounter];
for (var keyId in categoryData) {
switch(keyId)
{
case "CommentCategoryId":
isComment = true;
catId = Number(categoryData[keyId]);
break;
case "CommentCategoryName":
isComment = true;
catName = categoryData[keyId];
break;
case "ReviewerCategoryId":
isComment = false;
catId = Number(categoryData[keyId]);
break;
case "ReviewerCategoryName":
isComment = false;
catName = categoryData[keyId];
break;
}
}
if (isComment == true) {
CommentCategoryList.addItem({label:catName, data:catId});
}
else {
ReviewerCategoryList.addItem({label:catName, data:catId});
}
}
CommentCategoryList.selectedIndex = 0;
ReviewerCategoryList.selectedIndex = 0;
}
In this method, we step through each category and determine if it is a Comment Category or a Reviewer Category. We then add it to either the CommentCategoryList component or the ReviewerCategoryList component. The syntax for adding an item ({label:catName, data:catId} ) is significant. We display the name of the category (such as “Suggestion”) but store as data the primary key (2). When it comes time to save the content back to the web service, we use this primary key.
First up on our release schedule is Training Studio as discussed above. We are also working on an intermediate release of ToolBook Translation System and a new version of Plug-In Pro. Once there is a 32-bit build of ToolBook Blackcomb, we will be updating our Learning & Mastering ToolBook product.
· Another Plug-In Pro Tool Spotlight
· More Expert Information, OpenScript Tips, and Web Hints from the "Learning & Mastering ToolBook" series
· Another VBTrain.Net Nugget
· Another ActionScript Tip
· More
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
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, 2007.