Developers Toolkit
Programmers Guide
The information in this document is subject to change without notice and should not be construed as a commitment
by Kronos Incorporated. Kronos Incorporated assumes no responsibility for any errors that may appear in this
manual. This document or any part thereof may not be reproduced in any form without the written permission of
Kronos Incorporated. All rights reserved. Copyright 2001-2004.
Cambridge Clock, CardSaver, Datakeeper, Datakeeper Central, eForce, Gatekeeper, Gatekeeper Central,
Imagekeeper, Jobkeeper Central, Keep.Trac, Kronos, Kronos Touch ID, the Kronos logo, My Genies,
PeoplePlanner, PeoplePlanner & Design, Schedule Manager & Design, ShopTrac, ShopTrac Pro, StarComm,
StarPort, StarSaver, StarTimer, TeleTime, Timekeeper, Timekeeper Central, TimeMaker, Visionware, Workforce
Accruals, Workforce Central, Workforce Decisions, Workforce Express, Workforce Genie, and Workforce TeleTime
are registered trademarks of Kronos Incorporated or a related company. Comm.Mgr, CommLink, DKC/Datalink,
FasTrack, HyperFind, Improving the Performance of People and Business, Kronos 4500, Kronos 4500 Touch ID,
Kronos e-Central, Labor Plus, Schedule Assistant, Smart Scheduler, StartLabor, Start Quality, Start WIP, Starter
Series, Timekeeper Decisions, Timekeeper Web, VisionPlus, Winstar Elite, WIP Plus, Workforce Activities,
Workforce Connect, Workforce Employee, Workforce HR, Workforce Manager, Workforce MobileTime, Workforce
Payroll, Workforce Record Manager, Workforce Recruiter, Workforce Scheduler, Workforce Smart Scheduler,
Workforce Tax Filing, and Workforce Timekeeper are trademarks of Kronos Incorporated or a related company.
All other trademarks or registered trademarks used herein are the property of their respective owners and are used
for identification purposes only.
When using and applying the information generated by Kronos products, customers should ensure that they comply
with the applicable requirements of federal and state law, such as the Fair Labor Standards Act. Nothing in this
Guide shall be construed as an assurance or guaranty that Kronos products comply with any such laws.
Published by Kronos Incorporated
297 Billerica Road, Chelmsford, Massachusetts 01824-4119 USA
Phone: 978-250-9800, Fax: 978-367-5900
Kronos Incorporated Global Support: 1-800-394-HELP (1-800-394-4357)
For a complete list of the international subsidiaries, see the following Kronos Incorporated Web page:
http://www.kronos.com/world/index.htm
Document Revision History
Document Revision
Product Version
Release Date
March 2004
Contents
Contents
iv
Kronos Incorporated
This programmers guide is part of the Developers Toolkit (DTK) for the
Kronos Workforce Central system. A companion document titled Workforce
Central Developers Toolkit Reference Guide provides a formal definition,
description, and syntax specification for each Extensible Markup Language
(XML) tag and element in the application program interface (API).
Caution: The source code examples in this programmers guide are provided for
instructional purposes only. The XML tags described herein are not guaranteed to
be compatible with the XML tags defined in the Workforce Central Developers
Toolkit Reference Guide. In all circumstances relating to the XML API, the
reference guide takes precedence over every other Workforce Central document.
The Document Type Definitions (DTDs) in the reference guide are tag-level
descriptions that do not reflect the entire domain. No actions or parameters are
specified. The DTDs are provided for descriptive purposes only. They are not
validated, and are subject to change. They are not used by Kronos or the
Workforce Central server to validate any aspect of the XML API.
This guide documents the purpose and use of the XML API. It contains an
appendix that documents a set of Workforce Central Uniform Resource Locators
(URLs) that can invoke Workforce Central servlets from custom Workforce
Central portals and third-party Web sites.
This preface contains the following sections:
!
Conventions
Object-oriented databases
vi
URLs
The Workforce Central XML graphical user interface (GUI), Java applets and
servlets
Kronos Incorporated
Chapter 2, Using the XML API, describes how to use the XML API. The
levels of abstraction commonly imposed in API applications are summarized.
Appendix, Creating Portals and Third-party Web Sites, describes the set of
Uniform Resource Locators (URLs) supplied with the DTK.
vii
Conventions
This guide relies on the following conventions to promote presentational clarity,
maintain internal consistency, and ensure overall accuracy and completeness:
!
Presentational Conventions
Coding Conventions
Presentational Conventions
The chapters in this guide are modular in structure and task-oriented in
composition. You are encouraged to glance through the overviews at the
beginning of earlier chapters and read ahead to later sections or chapters as you
gain experience with the API. For example, if you are a Web programmer who is
already somewhat familiar with the API, you might decide to glance through the
first two chapters before turning your attention to the extended code examples in
the final chapter.
Each chapter begins with high-level overview information and progresses to
code-level examples and explanations. Bulleted lists summarize information that
is presented in greater detail in subsequent sections. Cross-references to other
documents are presented where appropriate, but every effort has been made to
minimize the need to refer to multiple documents at the same time.
viii
Bold monospace text identifies code elements that are highlighted for
clarity.
Kronos Incorporated
Conventions
Italic text identifies terms that are being introduced for the first time. It also
highlights the names of parameters. For example, when name=value pairs are
discussed, the following parameter names are italicized to indicate that they
are parameter names rather than string values: name=value
Coding Conventions
Source code examplesand all tag names and similar source-code elements that
appear in descriptive paragraphsare presented in monospace text. The
formatting of coding examples is consistent with the programming language
employed.
Large sections of source code are often presented in smaller monospace text to
promote readability by minimizing awkward line breaks.
XML Tag Syntax Statements
Syntax statements and formal code-level definitions of XML tags and similar API
elements employ the following formatting conventions, all of which are further
described in subsequent chapters and fully documented in the Workforce Central
Developers Toolkit Reference Guide:
!
XML tag names, attribute names, and property names are case sensitive and
are therefore shown in UpperLowerCase text.
In general, attribute values are case sensitive. Exceptions to this rule are
clearly noted.
Variable names are shown in Italics. For emphasis in code examples, some
variable names, parameter names, and other code elements are shown in Bold
Italics.
ix
Kronos Incorporated
The term tag is used as an informal alias for ...the XML element that
contains this tag.
Angle brackets (< >) surrounding a monospace tag name in descriptive text
serve as an informal alias for the term tag.
xi
xii
Abbreviation
Meaning
API
DTD
DTK
Developers Toolkit
GUI
HTML
HTTP
HTTPS
RDBMS
TCP/IP
UI
User Interface
URL
XML
Kronos Incorporated
xiii
xiv
Kronos Incorporated
xv
xvi
Kronos Incorporated
Chapter 1
Overview
Caution: The source code examples in this programmers guide are provided for
instructional purposes only. The XML tags described herein are not guaranteed to
be compatible with the XML tags defined in the Workforce Central Developers
Toolkit Reference Guide. In all circumstances relating to the XML API, the
reference guide takes precedence over every other Workforce Central document.
The Document Type Definitions (DTDs) in the reference guide are tag-level
descriptions that do not reflect the entire domain. No actions or parameters are
specified. The DTDs are provided for descriptive purposes only. They are not
validated, and are subject to change. They are not used by Kronos or the
Workforce Central server to validate any aspect of the XML API.
Chapter 1
Overview
The Workforce Central XML API is an open, platform-independent XML-based
programming interface. The API enables software professionals to implement
Web-based applications that programmatically transmit and receive real-time
information from the Workforce Central database.
The XML tags and attributes form a programming interface that is conceptually
object-oriented: API objects perform specified actions at the request of your client
application. The results of these actions are returned to your client application in
the form of XML responses.
In the context of this guide, an API object is an XML tag that corresponds to a
persistent object in the Workforce Central database. These tags contain both
attributes and other tags. A few API objects are transientthey do not correspond
to any object in the Workforce Central database, but they provide a container for
aggregating objects that do reside in the database.
1-2
Kronos Incorporated
<Request>
People
Access
Schedule
Labor
Accruals
HyperFind
Timekeeping
You use the <Request> tag to specify each request that your API application
submits to the Workforce Central server.
Each <Request> tag contains:
!
One or more Data-only tags (tags that contain only data structures) whose
syntax statements declare them to be valid Target tags of the Action
attribute (see the next two sections for formal definitions of the terms Dataonly and Target.)
Zero or more Data-only tags that are not Target tags of the Action attribute.
1-3
Chapter 1
Description
Access tags
Accruals tags The following Target tags enable your API application to edit the accrual
balances of specified employees:
!
!
<ResetAccrual>
<EarnedAccrual>
HyperFind
tags
Labor tags
These Target tags enable your application to create, edit, and retrieve the
seven-level Labor configuration stored in the Workforce Central database.
There are three kinds of Target tags in this category, all of which are
persistent:
<LaborLevelDefinition>-Defines the name and position (in
the seven-level hierarchy) of a given labor level.
! <LaborLevelEntry>-Defines the name of a labor entry for a
particular level.
! <LaborAccount>-Defines a seven-element tuple of labor entries.
See Target Tags that Maintain Persistence for an explanation of
Persistent tags.
!
1-4
Kronos Incorporated
Category
Description
People tags
The Person table in the Workforce Central database contains the following
information for each person in the system:
!
!
!
!
!
!
Name Information
Person Number (a unique identifier for each person in the database)
Birth Date
Hire Date
Wage Rate
Full/Part Time Hours
The <Personality> tag maintains the informational interdependencies that exist among these different tags (status, licensing, and
so on) by checking all of the dependencies.
You can specify a <Request> tag whose Load attribute "targets" a new
<PersonInformation> Target tag, even one that contains a
<WTKEmployee> tag and/or <User> tag without specifying a
<PersonIdentity> tag. However, you cannot Add or Update a
<PersonInformation> Target tag without specifying a
<PersonIdentity> tag.
1-5
Chapter 1
Category
Description
Timekeeping These tags create and retrieve punch, edit, audit, exception, and total
tags
information. The API provides four Target tags in this category:
<Punch>
Represents a time punch of the same type that originates from a
Kronos terminal.
! <PayCodeEdit>
Represents an amount of time or money that must be added to a pay
code.
! <WorkedDuration>
Represents a time duration to be included in the computation of hours.
See XML Character Data for more information about specifying time
durations.
! <PayCodeEditMove>
Represents an amount of time or currency that must be moved from
one labor account and paycode to another.
!
1-6
Kronos Incorporated
Note: The object System supports the Logon and Logoff Action attributes, as well
as the <Error> tag in the <Response> tag.
The following individual Target tags and Data-only tags are included in each of
the categories:
Tag
Category
Data-only
Target Tag
Related
Data-only Tags
Access Tags
<AccessProfile>
<Permission>
Accruals Tags
<ResetAccrual>
<EarnedAccrual>
<AccrualBalanceSummary>
<AccrualCode>
<AccrualProfile>
<HyperFindQueryResult>
Labor Tags
<LaborAccount>
<LaborLevelDefinition>
<LaborLevelEntry>
<AdhocLaborAccount>
Schedule Tags
<ScheduleGroup>
<Schedule>
Timekeeping
Tags
<DateTotalSummary>
<ApproveSignoff>
<Exception>
<CancelDeductions>
<PeriodTotalSummary>
<WorkedDuration>
<HistoricalPayCodeEdit>
<HistoricalPayCodeMove>
<MarkForTotalization>
<PayCodeEdit>
<PayCodeMove>
<Punch>
<Timesheet>
<ScheduleShift>
<ShiftCode>
<ShiftSegment>
<ScheduleUnavailable>
1-7
Chapter 1
Tag
Category
Data-only
Target Tag
Related
Data-only Tags
People Tags
<PersonInformation>
<AccessAssignment>
<BadgeAssignment>
<CustomData>
<CustomDate>
<EmailAddress>
<EmploymentStatus>
<ExpectedHours>
<HomeAccount>
<Licenses>
<Naming>
<Person>
<PostalAddress>
<Supervisor>
<TelephoneNumber>
<UserAccountStatus>
<User>
<UserAccount>
<PasswordHistory>
<UserAccountLockout>
<Personality>
<WTKEmployee>
<PersonIdentity>
1-8
Kronos Incorporated
Action Attribute
The single Action attribute that you specify for each <Request> must be
listed in the syntax statements of all of the Target tags specified in the
<Request>. Targets are the Data-only containers through which the
functionality of the API is expressed. Targets can contain Data-only tags that are
not Targets. However, Data-only tags that are not Targets must never contain
Targets.
1-9
Chapter 1
Request-Response Transactions
Each transaction is a two-part interaction that begins when your application
submits a single fully-specified <Request> tag to the server. Each transaction is
completed when the server returns a single <Response> to that <Request>.
Every Sessions Initial Transaction
Like a Web browser, your Web-based API application must submit an initial
request for an HTTP connection to the Workforce Central server before it can
initiate an ongoing session. The server responds to this initial request by opening
an HTTP connection as shown:
HTTP Connection
Your
Web-based
Application
Workforce
Central
Server
The following Workforce Central URL, where localhost specifies the system
on which the Workforce Central server runs:
http://localhost/wfc/logon
1-10
Kronos Incorporated
The following sequence of events occurs each time your application opens the
HTTP connection and passes an XML <Request>:
1. Your application must first request a Logon to the Workforce Central server. It
does so by opening an HTTP request and passing the server an XML text
string that holds the content of the HTTP <Request>. See Chapter 2,
Using the XML API for language-specific details.
HTTP Connection
Your
Web-based
Application
Logon request
Workforce
Central
Server
2. The server authenticates the username and password specified in the logon
<Request>.
3. Your application opens an HTTP response and reads the content of the
servers response to its logon <Request> into a text string that represents
the XML <Response> to that <Request>.
HTTP Connection
Your
Web-based
Application
Logon response
Workforce
Central
Server
1-11
Chapter 1
Your
Web-based
Application
Next request
Next response
Workforce
Central
Server
Logoff request
Logoff response
Workforce
Central
Server
7. The Workforce Central server responds to the Logoff request by dropping the
HTTP connection. An application normally requires only one Logon, one
session, and one Logoff per execution.
1-12
Kronos Incorporated
Description
WorkRuleName
1-13
Chapter 1
1-14
Validation Rule
Kronos Incorporated
A Generic Request
The following XML code represents a generic <Request> whose syntax can be
customized to any required specification:
<? xml version = "1.0"?>
<kronos_WFC version = "1.0">
<Request
Action = "TheSpecifiedAction"
TargetTag*
/>
The asterisk (*) at the end of the TargetTag parameter indicates that multiple
Target tags can be specified in a single <Request>. Each Target tag becomes the
target of the Action attribute specified in the <Request>.
1-15
Chapter 1
Note: A Logon request is required to begin each session and a Logoff request is
required to gracefully end each session. However, Login and Logout do not have
to occur in the same file. For any given request, the inner tags in the previous
figure are optional.
1-16
Kronos Incorporated
Kronos_WFC Tag
The highest-level tag after the XML declaration tag is the following tag, which is
also known as the document element:
<Kronos_WFC version = "1.0">
This tag contains all other API tags in your Workforce Central application.
SYSTEM Request
The System object is the only <Request> in the API that does not have a tag
representation. Logon and Logoff are Actions of the System object.
1-17
Chapter 1
Logon Request
A Logon <Request> looks like this:
<?xml version = "1.0"?>
<Kronos_WFC version = "1.0">
<Request
Object = "System"
Action = "Logon"
Username = "SomeValidUsername"
Password = "SomeValidPassword"
/>
</Kronos_WFC>
Note: DataSource, an optional property of the <Request> tag, enables you to
override the default database system as shown:
DataSource = "devicegroup:deviceID"
The devicegroup parameter specifies the new devicegroup and the deviceID
parameter specifies the new deviceID.
1-18
Kronos Incorporated
Logon Response
This is the WFC servers <Response> to a Logon <Request> whose
specified data was successfully authenticated:
<?xml version = "1.0"?>
<Kronos_WFC version = "1.0">
<Response
Status = "Success"
/>
</Kronos_WFC>
Target Tags that Maintain Persistence
Many Data-only Target tags support persistence in the Workforce Central server.
These tags are Targets of some, or all, of the Action attributes described in the
following table:
Action Attribute
Description
Delete
Load
1-19
Chapter 1
Action Attribute
Description
Update
AddOnly
UpdateOnly
Key Properties
Each API tag has a set of key properties that represents the minimum number of
properties required to locate a unique Workforce Central database entry. If the
unique database entry is located, only those properties outside the set of key
properties are added to the corresponding API tag.
1-20
Kronos Incorporated
Description/Example
AmountInTime
AmountInCurrency
Boolean
Date
Example: "10/1/2000"
DateSpan
DateTimeSpan
DateTime
Time
TimeSpan
TimeZone
Rule Names
LaborAccountName
PayCodeName
WorkRuleName
1-21
Chapter 1
Data Type
Description/Example
Employee
!
!
!
TIME = Time
TIMEZONE = TimeZone
DAYLIGHTSAVINGSTIME = Boolean
1-22
Kronos Incorporated
The following table is the Timezone table in the Workforce Central database.
1-23
Chapter 1
1-24
Kronos Incorporated
Chapter 2
This chapter describes how to use the Workforce Central Extensible Markup
Language (XML) Application Program Interface (API). The levels of abstraction
commonly imposed in API applications are summarized.
This chapter contains the following sections:
!
Chapter 2
Levels of Abstraction
There are three levels of abstraction associated with the implementation of API
applications using high-level programming languages to manipulate XML
streams. The following table summarizes all three levels of abstraction. You will
find more information about each level of abstraction in the following sections
and chapter.
Level of Abstraction Description
2-2
Level One
Level Two
Kronos Incorporated
2-3
Chapter 2
Request-Response Examples
This section presents several API-level examples that demonstrate the requestresponse cycle on which all API applications are based.
Caution: The programming code in this programming guide is not supported by
Kronos and is provided "as is" as an accommodation and convenience for Kronos
Customers. Customers who use any code samples contained herein, do so at their
own risk. Kronos provides no expressed or written warranties of any kind for any
of these code samples.
2-4
Kronos Incorporated
First Example
The first example uses one of the Timekeeping Target tags (<Punch>see the
Target tags described in the table on page 1-7). This Target tag has an optional
Action attribute named AddOnly that enables your application to insert a
specified Punch entry into the Workforce Central database.
The syntax statement for the <Punch> tag Identifies three properties that are
Required Keys (Date, PersonIdentity, and Time). Required Key
properties must be specified. See the syntax statement in either the HTML file or
the Workforce Central Developers Toolkit Reference Guide.
One property with a Required Key (<PersonIdentity>) is a Data-only tag
that is not a Target tag. It requires you to specify one of two data properties
(BadgeNumber or PersonNumber).
1. Request the Logon to establish the HTTP connection:
<?xml version = "1.0"?>
<Kronos_WFC version = "1.0">
<Request
Object = "System"
Action = "Logon"
Username = "SomeValidUsername"
Password = "SomeValidPassword"
/>
</Kronos_WFC>
2-5
Chapter 2
3. Request that the specified Punch be entered into the Workforce Central
database:
<Request Action = "AddOnly">
<Punch
Date = "2/14/2001"
Time = "9a">
<Employee>
<PersonIdentity>
<PersonIdentityList>
<PersonIdentity
PersonNumber = 101 />
<PersonIdentity
PersonNumber = 102 />
</PersonIdentityList>
</PersonIdentity>
</Employee>
</Punch>
</Request>
2-6
Kronos Incorporated
Second Example
The XML expression in this example logs the specified user on to the Workforce
Central server and retrieves the pay period totals for the specified employee.
1. Request the Logon to establish the HTTP connection:
<?xml version = "1.0"?>
<Kronos_WFC version = "1.0">
<Request
Object = "System"
Action = "Logon"
Username = "SomeValidUsername"
Password = "SomeValidPassword"
/>
</Kronos_WFC>
2-7
Chapter 2
The <Response> returned by the Workforce Central server looks like the code
presented in this section. Long lines of code are autowrapped (automatically
reformatted for length) to fit the format of this programmers guide.
<Kronos_WFC TimeStamp = "06/06/2001 6:15PM Eastern Standard Time" >
<Response
Status = "Success">
<Timesheet
LastTotalizationDateTime = "06/06/2001 4:35PM"
TotalsUpToDateFlag = "true" >
<Employee>
<PersonIdentity PersonNumber = "6" />
</Employee>
<PeriodTotalData>
<PeriodTotals
PeriodDateSpan = "06/01/2001 - 06/07/2001" >
<Totals>
<Total IsCurrencyFlag = "false"
LaborAccountDescription = "Westside Plant/Dock Area/Shipping/SQA/
Wire Wrap/Industrial Eng/Test Supervisors" LaborAccountId = "149"
LaborAccountName = "101/201/301/401/501/601/702" AmountInCurrency =
"63.75" PayCodeId = "130" PayCodeName = "All Regular"
AmountInTime = "8:30" />
<Total IsCurrencyFlag = "false"
LaborAccountDescription = "Westside Plant/Dock Area/Shipping/SQA/
Wire Wrap/Industrial Eng/Test Supervisors" LaborAccountId = "149"
LaborAccountName = "101/201/301/401/501/601/702" AmountInCurrency
= "63.75" PayCodeId = "121" PayCodeName = "Regular" AmountInTime
= "8:30" />
<Total IsCurrencyFlag = "false"
LaborAccountDescription = "Westside Plant/Dock Area/Shipping/SQA/
Wire Wrap/Industrial Eng/Test Supervisors" LaborAccountId = "149"
LaborAccountName = "101/201/301/401/501/601/702" AmountInCurrency
= "272.00" PayCodeId = "111" PayCodeName = "Evening"
AmountInTime = "34:00" />
<Total IsCurrencyFlag = "false"
LaborAccountDescription = "Westside Plant/Dock Area/Shipping/SQA/
Wire Wrap/Industrial Eng/Test Supervisors" LaborAccountId = "149"
LaborAccountName = "101/201/301/401/501/601/702" AmountInCurrency
= "1,029.38" PayCodeId = "106" PayCodeName = "Daily-OT"
AmountInTime = "91:30" />
<Total IsCurrencyFlag = "false"
LaborAccountDescription = "Westside Plant/Dock Area/Shipping/SQA/
Wire Wrap/Industrial Eng/Test Supervisors" LaborAccountId = "149"
LaborAccountName = "101/201/301/401/501/601/702" AmountInCurrency
2-8
Kronos Incorporated
2-9
Chapter 2
2-10
Kronos Incorporated
<Exceptions>
<TimekeepingException InPunchFlag = "false"
ExceptionTypeName = "UNSCHEDULED" />
<TimekeepingException InPunchFlag = "false"
DifferenceToLimit = "85:00" DurationOfException = "100:00"
ExceptionTypeName = "LONG" />
</Exceptions>
</WorkedDuration>
</TotaledWorkedDurations>
</Timesheet>
</Response>
</Kronos_WFC>
2-11
Chapter 2
Java-based Implementation
There are eight steps using the Java language:
1. Open an HTTP connection to the server using the following URL string:
URL url = new URL(http://localhost/wfc/XmlService);
HttpURLConnection conn =
(HttpURLConnection)url.openConnection();
2-12
Kronos Incorporated
2. Configure the connection by setting the HTTP method to POST and the
type of the content to text/xml as shown:
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-type", "text/xml");
The HTTP connection that you establish is used for both input (sending the
XML <Request>) and output (reading the XML <Response>). You must also
ensure that any proxy server or intermediate gateway does not attempt to
cache the <Request> or the <Response>.
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);
3. Set the cookies for the connection. Initially, on the first connection to the
server, the set of cookies will be empty. However, the <Response> to the
Logon <Request> will return a set of cookies that must be saved and sent
back in subsequent HTTP requests.
Vector cookies = new Vector();
2-13
Chapter 2
7. Read the response. The HTTP response from the server will contain the XML
API response. In the case of the Logon request, the string xml_recv
contains the response.
int size = conn.getContentLength();
byte[] dataBytes = new byte[size];
int bytesRead = 0;
int pos = 0;
//read stream into byte array
while ( (bytesRead >= 0) && (pos < size)) {
if ((bytesRead = is.read(dataBytes, pos, size-pos)) >= 0) {
pos = pos + bytesRead;
}
}
String xml_recv = new String(dataBytes, 0, size);
is.close();
8. Read the cookies from the response and store them for subsequent HTTP
requests.
int j = 1;//
while (true) {
String key = conn.getHeaderFieldKey(j);
if (key==null)
break;
else if (key.equals("Set-Cookie")) {
String value = conn.getHeaderField(j);
cookies.addElement(value);
}
j++;
}
2-14
Kronos Incorporated
sPost As String
sAction As String
sXMLData As String
sHTTPHeaders As String
sPost = "POST"
sAction = "http://localhost/wfc/XmlService"
sXMLData = "<xml ..> <request .. /></xml>"
sHTTPHeaders = "Content-type: text/xml"
' Inet1 object is an instance
' of the msinet.ocx control
' placed on the current form
Inet1.Execute sAction, sPost, sXMLData, sHTTPHeaders
2-15
Chapter 2
2-16
Kronos Incorporated
Chapter 3
This chapter introduces and discusses advanced XML API programming topics.
All of the tags in the XML API are defined and described in the Workforce
Central Developers Toolkit Reference Guide.
This chapter contains the following sections:
!
Caution: The source code examples in this programmers guide are provided for
instructional purposes only. The XML tags described herein are not guaranteed to
be compatible with the XML tags defined in the Workforce Central Developers
Toolkit Reference Guide. In all circumstances relating to the XML API, the
reference guide takes precedence over every other Workforce Central document.
The Document Type Definitions (DTDs) in the reference guide are tag-level
descriptions that do not reflect the entire domain. No actions or parameters are
specified. The DTDs are provided for descriptive purposes only. They are not
validated, and are subject to change. They are not used by Kronos or the
Workforce Central server to validate any aspect of the XML API.
Chapter 3
3-2
Kronos Incorporated
3-3
Chapter 3
3-4
Kronos Incorporated
Application Overview
This example illustrates the implementation of a GUI of the Workforce Central
server using the XML API. The data transfer between the Web browser and the
Workforce Central server is performed by a JavaScript object called XMLHTTP.
The actual data transfer between the Web browser and the Workforce Central
server is handled by a JavaScript object named XMLHTTP, which is defined in the
API.js file.
Setup Information
This example has the Logon user and password hard-coded into the source code.
You can change this setting by editing the DEFAULT_USER = "superuser"
and DEFAULT_PSWD = "<superuser password>" variables in the
API.js file. Substitute the actual superuser password at your site for <superuser
password>.
System Requirements
This example requires MSXML, version 2.0 or greater. Version 3.0 sp1 has
problems, too, but is the best option. You can download it from MSDN.
Note: This example requires Internet Explorer 5.5 or greater. It does not support
Netscape. MSXML works with IE 5.0. If you get an error message about an
Automation server not being able to create an object, install the latest version of
MSXML.
3-5
Chapter 3
Known Issues
The follwing are known issues:
1. The XMLHTTP object may drop cookies. A dropped cookie causes any
<Request> to the server to fail due to not being logged on. Selecting the
Logoff option at the top of the GUI, followed by the Logon option usually
resolves the problem. If the problem persists, the Web browser may crash.
This is a known Microsoft bug. For more information, access the Microsoft
support site.
2. Error number 70: Unspecified Error can occur while you are passing data to
the Workforce Central server. You should ignore the error and try again. If the
error persists, close the Web browser window and start again.
3. When you select an existing item in the list of PayCode/Duration edits,
comments are not selected.
4. To Add a new item, select one of the following options:
!
To enter a pay code edit, select a pay code name from the drop-down list
of names.
Enter a date and an amount. Select the New button. The Save button becomes
enabled. Select it to submit all current changes to the Workforce Central
server.
Note: Totals are not updated in the GUI when you enter a new item and press
the Save button, even though this event submits the request to the server. To
see the updated totals, select the Refresh option at the top of the GUI. This
operation requires the background processor to be running.
5. You do not receive a warning about unsaved data when you Logoff or leave
the Web page. Unsaved changes are lost. Select Save or Run All
Transactions to ensure that all current changes have been submitted to the
Workforce Central database.
6. For debugging purposes, the GUIs XML Log window displays the XML
<Response> tags as they are received from the Workforce Central server.
You can toggle the Log display on/off with the Show/Hide XML Log button.
3-6
Kronos Incorporated
The following source code files constitute this sample API application:
!
API.js
Comment.js
Cookies.js
DateFormat.js
DropdownList.js
HyperFindQuery.js
PayCode.js
readme.htm
Recordset.js
timecardeditor.htm
Timesheet.js
Tooltip.js
Transactions.js
Of these files, the API.js file is of greatest interest in the context of this
programmers guide because it defines the reified JavaScript methods and objects
necessary to log on and off, and to pass the XML <Request> tag stream to the
Workforce Central API gateway.
3-7
Chapter 3
3-8
Kronos Incorporated
This is the source code in the API.js file. Note that the values returned by this
application are not those returned by the XML code. For example, the login and
logout methods return true or false, depending on the Status retuned from the
XML.
Note: Substitute the actual superuser password used at your site for
<superuser password>.
/*
Copyright:Kronos, Inc. 2001
Description:
This file provides the basic methods and objects needed to
login, logout, and send xml requests to WFC v4.0 xml api
gateway.
Methods:
logon(username,password[,url])return true or false
logoff([url])
return true or false
execute(dom,url,action)return response dom if
Status="Success", else returns null
url
Object:
XMLHTTP([url])
3-9
Chapter 3
3-10
Kronos Incorporated
function XMLHTTP_init(){
//Msxml2.XMLHTTP.3.0 //Microsoft.XMLHTTP
this._http=new ActiveXObject("msxml2.XMLHTTP")
this._http.open("POST", this.url, false)
this._http.setRequestHeader('Content-type', this.contentType)
//
//
//
//
//
//
//
//
//
}
}
function XMLHTTP_send(xml){
//this._init()
try{
this._http.send(xml.xml)
}catch(e){
e.number = e.number & 0xFFFF
if(e.number == 5){
e.description = "Unable to find URL: "+this.url
}
throw e
}
// see note in init() method ...
this.setSessionIdFromCookies(this._http.getResponseHeader('SetCookie'))
return this._http.responseXML
}
function XMLHTTP_setSessionIdFromCookies(cookies){
if(cookies){
var startPos=cookies.indexOf('jsessionid')
if(startPos>=0){
startPos=cookies.indexOf('=')+1
var stopPos=cookies.indexOf(';',startPos)
jsessionid=cookies.substring(startPos,stopPos)
}
}
}
3-11
Chapter 3
3-12
Kronos Incorporated
*/
var NODE_ELEMENT = 1
function __raiseevent(e){
eval(e)
if(this.parent){
this.parent._raiseevent(e)
}
}
var Request_count=0
function Request(url,dom,parent){
this._dom=dom
this.parent=parent
this.url=(url)?url:DEFAULT_URL
this.id='Request'+(++Request_count)
this.name=this.id
this.type=REQUEST_NODE_NAME
this.getNode=Request_getNode
this.getAction=Request_getAction
this.setAction=Request_setAction
this.getObject=Request_getObject
this.setObject=Request_setObject
this.getResponse=Request_getResponse
this.execute=Request_execute
this.onchange=new Function()
this.getDocumentElement=Request_getDocumentElement
this.obj='top.'+this.id+'RequestObject'
eval(this.obj+'=this')
}
Request.prototype._raiseevent=__raiseevent
function Request_getNode(){
if(this._dom==null){
var _newdoc=new ActiveXObject('msxml2.domdocument')
this._dom=_newdoc.createNode(NODE_ELEMENT, this.type, '')
if(this.parent){
this.parent.getNode().appendChild(this._dom)
this._documentElement=this.parent.getNode().documentElement
}else{
var doc=_newdoc.createNode(NODE_ELEMENT,
DOCUMENT_ELEMENT_NAME, '')
doc.setAttribute('Version', '1.0')
doc.appendChild(this._dom)
this._documentElement=doc
}
3-13
Chapter 3
}
return this._dom
}
function Request_execute(action,object){
if(action){this.setAction(action)}
if(object){this.setObject(object)}
var http=new XMLHTTP(this.url)
try {
this._response=http.send(this.getDocumentElement())
}catch(e){
log("Unable to send request. Possible reason:\nNumber:
"+e.number+"\nDescription: "+e.description)
}
if(this._response==null){return null}
var responseNode=this._response.selectSingleNode(RESPONSE_PATH)
if(responseNode==null){return null}
var
success=(responseNode.getAttribute(RESPONSE_STATUS_ATTR)==RESPONSE
_STATUS_SUCCESS)
if(success){
return responseNode
}else{
// use getResponse() to see the xml returned
return null
}
}
function Request_getResponse(){
return this._response
}
function Request_getDocumentElement(){
this.getNode() // insure we have a dom
return this._documentElement
}
function Request_getAction(){
return this.getNode().getAttribute(ACTION_ATTR)
}
function Request_setAction(vAction){
this.getNode().setAttribute(ACTION_ATTR, vAction)
this._raiseevent('this.onchange("'+ACTION_ATTR+'")')
}
function Request_getObject(){
return this.getNode().childNodes
}
3-14
Kronos Incorporated
function Request_setObject(vObject){
var _root = this.getNode().selectSingleNode('//'+this.type)
if(_root){
var _oldnode = _root.selectSingleNode('//'+this.type+'/
'+vObject.type)
if(_oldnode){
_root.removeChild(_oldnode)
}
}
this.getNode().appendChild((vObject.getNode)?vObject.getNode():vOb
ject)
3-15
Chapter 3
3-16
Kronos Incorporated
Appendix
This appendix describes the set of Uniform Resource Locators (URLs) supplied
with the Workforce Central Developers Toolkit (DTK), and explains how to use
the initial set of URLs to:
!
Build the Workforce Central portals that enable users to interact with
individual Workforce Central components.
Caution: The source code examples in this programmers guide are provided for
instructional purposes only. The Extensible Markup Language (XML) tags and
URLs described herein are not guaranteed to be compatible with the XML tags
and URLs used by the Workforce Central server. In all circumstances relating to
the XML Application Program Interface (API), the XML tags defined in the
Workforce Central Developers Toolkit Reference Guide take precedence over
XML information in every other Workforce Central document.
This appendix is subject to alteration and expansion in subsequent revisions.
This appendix contains the following sections:
!
Overview
Appendix
Overview
This appendix introduces and describes the following Workforce Central URLs,
all of which share the same base href (http://localhost/wfc/
Public/Launch/) as indicated:
Appendix-2
http://localhost/wfc/Public/Launch/EventManager
http://localhost/wfc/Public/Launch/Hyperfind
http://localhost/wfc/Public/Launch/ImportAdministration
http://localhost/wfc/Public/Launch/LaborAccountSet
http://localhost/wfc/Public/Launch/MyReports
http://localhost/wfc/Public/Launch/PatternTemplate
http://localhost/wfc/Public/Launch/PeopleAdministration
http://localhost/wfc/Public/Launch/ReportCategory
http://localhost/wfc/Public/Launch/ReportSelection
http://localhost/wfc/Public/Launch/ReportSetup
http://localhost/wfc/Public/Launch/ScheduleIndividual
http://localhost/wfc/Public/Launch/ScheduleOutline
http://localhost/wfc/Public/Launch/SchedulePeriod
http://localhost/wfc/Public/Launch/SchedulePlanner
http://localhost/wfc/Public/Launch/ScheduleSnapshot
http://localhost/wfc/Public/Launch/ShiftCode
http://localhost/wfc/Public/Launch/Timecard
http://localhost/wfc/Public/Launch/Timestamp
http://localhost/wfc/Public/Launch/WorkforceGenie
http://localhost/wfc/Public/Launch/Workflow
Kronos Incorporated
Appendix-3
Appendix
Note: Alternatively, you can use a Workforce Central URL to invoke a Workforce
Central servlet and launch its corresponding applet by setting the SRC attribute of
an HTML FRAME or IFRAME tag equal to the appropriate URL as shown:
<FRAME SRC = "http://localhost/wfc/Public/Launch/ServletOne">
(or)
<IFRAME SRC = "http://localhost/wfc/Public/Launch/ServletOne">
Appendix-4
Kronos Incorporated
Appendix-5
Appendix
You can use the shortcut keys described in the following table in your query
strings to avoid exceeding the 256-character limitation.
Appendix-6
Key
Description
hf
ha
qn
ts
tf
Key for retrieving time frame for this applet. Add constants from next table
to specify exact pay periods and date ranges.
la
pid
Key for the first selected person number in the list of employees
fa
Key for the first selected labor account in the list of accounts
st
Indicates the time (generated system time) at which a selection was made
bd
ed
pemk
Key for retrieving the mode in which the people editor is launched
ap
dp
Kronos Incorporated
To specify an exact pay period or date range, add keys from the following table to
the timeframe (tf) key described in the previous table.
Key
Description
Week to date
Last week
Yesterday
Date range
10
11
Specified dates
-1
Separator ID
-2
-3
-4
Appendix-7
Appendix
Appendix-8
Kronos Incorporated
Appendix-9
Appendix
Body.html
Index.html
Logon.html
Nav.html
Title.html
Appendix-10
Kronos Incorporated
Logon.htm File
This file contains the HTML source code that submits the initial login request to
the Workforce Central server. Note that the actual superuser password at your site
should be substituted for <superuser password>.
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<TITLE>Logon Page</TITLE>
</HEAD>
<BODY>
<P>
<div id="form1Div">
<form target="_top" action="http://localhost/wfc/portal"
id="LogonForm"
method="POST"
name="logonForm">
<table border="0" width="500">
<tr>
<td width="500"
colspan="2"
align="center"><span class="Heading">
Workforce Central 4.0</span></td>
</tr>
<tr>
<td width="500" colspan="2"> </td>
</tr>
<tr>
Appendix-11
Appendix
<td width="180"
align="right"
class="Label">
Username
</td>
<td width="320"
align="left">
<input value="SuperUser"
id="Username"
name="username"
maxLength="25"
size="27">
</td>
</tr>
<tr>
<td colspan="3"> </td>
</tr>
<tr>
<td width="180"
align="right"
class="Label">Password</td>
<td width="320"
align="left">
<input value="<superuser password>"
id="Password"
name="password"
type="password"
maxLength="25"
size="27">
</td>
</tr>
<tr>
<td width="180"> </td>
<td width="320"
align="left">
<input border="0"
id="LogonButton"
name="logonButton"
value="Log On"
type="submit">
</td>
</tr>
<tr>
<td width="500"
colspan="2"
align="center"
id="MessageCell">
</td>
Appendix-12
Kronos Incorporated
</tr>
</table>
</form>
</div>
</P>
</BODY>
</HTML>
Nav.html File
This file contains HTML code with JavaScript embedded in the HEAD tag:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
<html>
<head>
<title>Navigation Page</title>
<BASE HREF="http://localhost">
<SCRIPT LANGUAGE=javascript>
<!-var newWin = null
function CreateSession(){
var loading = true
newWin = window.open("logon.htm")
}
function goToTimecard(id){
//alert(id)
if(id!=-1){
parent.frames['display'].location= 'http://localhost/wfc/
timecard?pid='+id+'&tf=1'
}
}
function goToApplet(){
var radioValue = ""
for (var i = 0; i < document.timecard.rdoapp.length; i++) {
if (document.timecard.rdoapp[i].checked=="1") {
radioValue=document.timecard.rdoapp[i].value
}
}
parent.frames['display'].location= 'http://localhost/wfc/
'+radioValue+'?pid='+document.timecard.txtpid.value+'&tf=1'
}
Appendix-13
Appendix
function goToSchedule(id){
if(id!=-1){
parent.frames['display'].location= 'http://localhost/wfc/
scheduleindividuallaunch?pid='+id+'&tf=1'
}
}
function goToPersonInfo(id){
if(id!=-1){
parent.frames['display'].location= 'http://localhost/wfc/
employeeadminlaunch?la=quick&pid='+id+'&tf=1'
}
}
//-->
</SCRIPT>
</head>
<body>
<a href="javascript:CreateSession()"><B><I>Logon</I></B></a>
<font color="#008080">
<font face='ms comic sans'>
<a href="/wfc/summarylaunch/quick?viewId=1"
target="display"><I><B>Quick Find</B></I></a><br>
Look at a Timecard:<br>
<select
onchange='goToTimecard(this.options[this.selectedIndex].value)'
id=select1 name=select1>
<option value=-1 selected>Select a person
<option value=101>Adams, J A
<option value=106>Babson, M B
<option value=107>Billings, T C
<option value=221>Chin, Flo
<option value=219>Clarck, Frederic
<option value=108>Davis, R D
<option value=220>Diaz, Mercedes
<option value=214>Dolan, Bruce
</select><br>
Appendix-14
Kronos Incorporated
Appendix-15
Appendix
Title.html File
This HTML code specifies the font information and text string for the Title frame
of the portals initial page:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Chris's Example</title>
</head>
<body>
<font color="#008080">
<font face='ms comic sans'>
<h1 align='center'><I><B>Chris's Portal Example</B></I></h1>
</font>
</font>
</body>
</html>
Appendix-16
Kronos Incorporated
Appendix-17
Appendix
function goToPersonInfo(id){
if(id!=-1){
parent.frames['display'].location= 'http://localhost/wfc/
employeeadminlaunch?la=quick&pid='+id+'&tf=1'
}
}
//-->
</SCRIPT>
</head>
<body>
<a href="javascript:CreateSession()"><B><I>Logon</I></B></a>
<font color="#008080">
<font face='ms comic sans'>
<a href="/wfc/summarylaunch/quick?viewId=1"
target="display"><I><B>Quick Find</B></I></a><br>
Look at a Timecard:<br>
<select
onchange='goToTimecard(this.options[this.selectedIndex].value)'
id=select1 name=select1>
<option value=-1 selected>Select a person
<option value=101>Adams, J A
<option value=106>Babson, M B
<option value=107>Billings, T C
<option value=221>Chin, Flo
<option value=219>Clarck, Frederic
<option value=108>Davis, R D
<option value=220>Diaz, Mercedes
<option value=214>Dolan, Bruce
</select><br>
Get Personal Info:<br>
<select
onchange='goToPersonInfo(this.options[this.selectedIndex].value)'
id=select1 name=select1>
<option value=-1 selected>Select a person
<option value=101>Adams, J A
<option value=106>Babson, M B
<option value=107>Billings, T C
<option value=221>Chin, Flo
Appendix-18
Kronos Incorporated
<option
<option
<option
<option
value=219>Clarck, Frederic
value=108>Davis, R D
value=220>Diaz, Mercedes
value=214>Dolan, Bruce
</select><br>
<!-<a href="/wfc/timecard?la=quick&pid=101&tf=1"
target="display">test</a><br>
<a href="javascript:goToTimecard(101)">test2</a><br>
-->
<a href="/wfc/summarylaunch/mgr?viewId=6"
target="display"><I><B>Pay Period Close</B></I></a><br>
<a href="/wfc/summarylaunch/mgr?viewId=7"
target="display"><I><B>Reconcile Timecard</B></I></a><br>
<a href="/wfc/summarylaunch/mgr?viewId=8"
target="display"><I><B>Shift Start</B></I></a><br>
<a href="/wfc/scheduletabularlaunch?viewId=3"
target="display"><I><B>Schedule Planner</B></I></a><br>
<a href="/wfc/schedulegraphicallaunch?viewId=4"
target="display"><I><B>Schedule Snapshot</B></I></a><br>
<a href="/wfc/schedulesummarylaunch?viewId=5"
target="display"><I><B>Schedule Outline</B></I></a><br>
<a href="/wfc/summarylaunch/mgr?viewId=9"
target="display"><I><B>IS Summary</B></I></a><br>
<a href="/wfc/summarylaunch/rollup?viewId=11"
target="display"><I><B>Test Rollup</B></I></a><br>
<br><br>
Appendix-19
Appendix
Appendix-20
Kronos Incorporated
Appendix-21
Appendix
Appendix-22
Kronos Incorporated
Index
A
Action attribute 1-3
AddOnly 1-20
Delete 1-19
Load 1-19
specification requirements 1-9
supporting persistence 1-19
syntax validation 1-13
Update 1-20
UpdateOnly 1-20
ampersand (&)
example of use as delimiter Appendix-5
API
application
transactions with server 1-10
objects 1-2
tag categories 1-3
B
batch processing
2-4
C
client application 1-2
client system, connecting to server 1-9
connecting to client system 1-9
context sensitive navigation controls 2-4
cookie 1-9
maintaining state example 2-12
preserving context and state using 1-9
2-14
D
data structures, in data-only tags 1-4
database 1-2
Person table 1-5
Data-only tags 1-3
nesting inside Requests 1-16
date range
specifying in URL Appendix-5, Appendix-7
daylight savings 1-22
declaration tag 1-17
Document Object Model (DOM) 3-3
DOM
core API, purpose 2-3
Document Object
submitting as XML Request stream 2-3
dynamic selection lists 2-4
E
exception handling 2-4
Extensible Markup Language (XML)
description 1-1
disclaimer Appendix-1
G
graphical user interface (GUI)
GUI
example 3-8
1-2
Index
J
Java language example 2-12
JavaScript
embedded in HTML Appendix-10
object 3-5
K
key
property 1-20
specifying Appendix-5
Known Issues in example 3-6
L
Labor tags 1-4
launch frame, specifying new Appendix-4
launch window, specifying new Appendix-4
levels of abstraction 2-2
Load Action attribute 1-19
Load attribute
Request tag 1-5
localhost parameter Appendix-3
N
namespace Appendix-4
nested tag 1-16
Index-2
Q
query string parameters
appending Appendix-5
defined Appendix-5
question mark (?), appending Appendix-5
quotation marks, enclosing URL Appendix-3
R
redirecting Appendix-8
reification, defined and described 2-3
reify, defined 3-3
Request
generic 1-15
specifying multiple 1-12, 1-13
Request code, embedding in HTML
form Appendix-8
Kronos Incorporated
Index
Request-Response cycle
comparative examples 2-12
examples 2-4
Response data, interpreting 3-2
Response tag, holding complex data
root tags 1-3
2-3
S
Schedule
entry in database 1-19
tags 1-6
server, described Appendix-3
server, establishing a session Appendix-9
server, logging on/off with URL Appendix-8
servlet, launching a corresponding
applet Appendix-3
session
closing gracefully 1-12
initiating Appendix-3
source code
example 3-9
examples, disclaimer Appendix-1
files, listed 3-7
syntax statement
of Target tag 1-9
T
tag
AccessAssignment 1-8
AccessProfile 1-4, 1-7
AccrualBalanceSummary 1-7
AccrualCode 1-7
AccrualProfile 1-7
AdhocLaborAccount 1-7
ApproveSignoff 1-7
BadgeAssignment 1-8
CancelDeductions 1-7
CustomData 1-8
CustomDate 1-8
Data-only 1-3
DateTotalSummary 1-7
EarnedAccrual 1-4, 1-7
EmailAddress 1-8
EmploymentStatus 1-8
Exception 1-7
ExpectedHours 1-8
highest level is document element
HistoricalPayCodeEdit 1-7
HistoricalPayCodeMove 1-7
Holiday 1-6
HomeAccount 1-8
HyperFindQuery 1-4, 1-7
HyperFindQueryResult 1-7
LaborAccount 1-4, 1-7
LaborLevelDefinition 1-4, 1-7
LaborLevelEntry 1-4, 1-7
Licences 1-8
MarkForTotalization 1-7
Naming 1-8
PasswordHistory 1-8
PayCodeEdit 1-6, 1-7
PayCodeMove 1-7
PeriodTotalSummary 1-7
Permission 1-7
Person 1-8
Personality 1-5, 1-8
PersonIdentity 1-5
PersonInformation 1-5, 1-8
PostalAddress 1-8
Punch 1-6, 1-7, 1-13, 2-5
Request 1-3
ResetAccrual 1-4, 1-7
Response
to Logon Request 1-19
Schedule 1-6, 1-7
example 1-19
ScheduleGroup 1-6, 1-7
ScheduleShift 1-7
ScheduleUnavailable 1-7
ShiftCode 1-7
1-17
Index-3
Index
ShiftSegment 1-7
Supervisor 1-8
Target 1-3
TelephoneNumber 1-8
Timesheet 1-7
User 1-5, 1-8
UserAccount 1-8
UserAccountLockout 1-8
UserAccountStatus 1-8
WorkedDuration 1-6, 1-7
WTKEmployee 1-5, 1-8
tags
combining with other languages 2-2
hierarchical order of 1-16
TARGET attribute, adding to HTML anchor
tag Appendix-4
Target tag 1-3
categories 1-4
specifying multiple tags in same
Request 1-15
time properties, descriptions 1-22
time zone 1-22
Timekeeping tags 1-6
Timesheet Editor API application, example 3-3
Totalizer, described 3-2
transaction 1-9
request-response 1-10
Transmission Control Protocol/Internet Protocol
(TCP/IP)
network 1-9
V
validation
rules 1-14
variables, binding to specified values
Visual Basic
code examples 2-15
comparing with Java 2-15
2-3
X
XML
API 1-2
API disclaimer Appendix-1
API tag 2-4
API tags, manipulating 2-12
character data 1-21
element 1-3
parser, using 2-3
Request stream, passing string as
response 1-2
streams, manipulating with other
languages 2-2
strings, storing in files 2-12
tag 1-2
2-2
U
Uniform Resource Locator (URL) Appendix-1
URL
calling servlets with Appendix-3
disclaimer Appendix-1
URLs, listed Appendix-2
user logon events Appendix-3
Index-4
Kronos Incorporated