Workforce Central Developer S Toolkit Programmer S Guide
Workforce Central Developer S Toolkit Programmer S Guide
Developer’s Toolkit
Programmer’s Guide
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.
For a complete list of the international subsidiaries, see the following Kronos Incorporated Web page:
http://www.kronos.com/world/index.htm
Index
iv Kronos Incorporated
About This Guide
This programmer’s guide is part of the Developer’s Toolkit (DTK) for the
Kronos® Workforce Central® system. A companion document titled Workforce
Central Developer’s 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 programmer’s 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 Developer’s
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:
! Who Should Read This Guide
! Organization of This Guide
! Conventions
! Abbreviations and Terms
! Workforce Timekeeper Documents
About This Guide
vi Kronos Incorporated
Organization of This Guide
Conventions
This guide relies on the following conventions to promote presentational clarity,
maintain internal consistency, and ensure overall accuracy and completeness:
! Presentational Conventions
! General Text Formatting 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.
! 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
! Bold text identifies generic tag categories.
! Bold italic text identifies code-level parameters that appear in syntax
statements. For example, in many URLs the term localhost is presented in
boldface italic text to identify it as a parameter rather than an actual system
name.
Coding Conventions
Source code examples—and all tag names and similar source-code elements that
appear in descriptive paragraphs—are 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.
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
Developer’s 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.
! Brackets ([ ]) surround optional expressions in syntax statements.
x Kronos Incorporated
Abbreviations and Terms
The following informal aliases are used in the context of the Workforce Central
Developer’s Toolkit:
! 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.
“Specify the XML element that contains the AnyName tag,” is synonymous with
the aliased sentence “Specify <AnyName>.”
Abbreviation Meaning
API Application Program Interface
DTD Document Type Definition
DTK Developer’s Toolkit
GUI Graphical User Interface
HTML Hypertext Markup Language
HTTP Hypertext Transfer Protocol
HTTPS Hypertext Transfer Protocol Secure
RDBMS Relational Database Management System
TCP/IP Transmission Control Protocol/Internet Protocol
UI User Interface
URL Uniform Resource Locator
XML Extensible Markup Language
Caution: The source code examples in this programmer’s 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 Developer’s
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 Understanding the XML API
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 transient—they 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.
You can extract data from the Workforce Central database and use it in your own
application, or you can pass data from another application to Workforce Central.
For example, you can pass accruals to another application in your organization or
pass data from another application to the Workforce Central database.
You can build an interface to another technology. For example, you can create a
version of the Workforce Central timecard for use on a cell phone display.
Note: In the context of the Developer’s Toolkit, the term tag is often used as an
abbreviation for “...the XML element that contains the tag.”
The <Request> tag enables you to specify requests that are carried out by the
WTK server. <Request> tags are considered the root tags in the API because
they can contain every category of tag defined by the API, as indicated by the
following diagram:
<Request>
You use the <Request> tag to specify each request that your API application
submits to the Workforce Central server.
Category Description
Access tags There is only one Target tag in this category, <AccessProfile>. The
tag enables your application to retrieve the Access Profiles of the specified
Workforce Central users.
Accruals tags The following Target tags enable your API application to edit the accrual
balances of specified employees:
! <ResetAccrual>
! <EarnedAccrual>
HyperFind There is one Target tag in this category, <HyperFindQuery>. The tag
tags enables your application to request partial queries known as HyperFind
queries. These queries define sets of persons, employees, or users (see
People tags later in this table) that can be specified in subsequent requests
that normally require the specification of a single individual. See the
description of People tags later in this table for formal definitions of the
italicized terms.
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.
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
Every person in the Workforce Central database is represented by a
<PersonIdentity> tag, which, though not a Target tag, is associated
with the <PersonInformation> Target tag. This Target tag defines a
person’s Access Assignment, Badge Assignment, Custom Data, Custom
Dates, EMail Addresses, Employment Status, Expected Hours, Home
Account, Licenses, Naming, Postal Addresses, Supervisor, Telephone
Numbers, and User Account Status.
The following Data-only tags can be added to a
<PersonInformation> tag to specify additional data:
! <WTKEmployee>
Every person in the database who is also an employee has additional
information in this Data-only tag.
! <User>
Every person in the database who is also a user has additional
information in this Data-only tag.
The <Personality> tag maintains the informational inter-
dependencies 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.
Category Description
Schedule tags There are three Target tags in this category:
! <Schedule>
A temporary, transient container tag that aggregates the shifts assigned
to a set of employees or groups over a specified span of time. The tag
contains Data-only tags that represent the shifts and segments of the
schedule. You use a <Schedule> tag to retrieve schedule
information for employees and to manage the association between
employees (or Groups) and Shift tags.
! <ScheduleGroup>
Represents a collection of employees who are treated in the same way
for scheduling purposes. Since employees are moved from group to
group periodically, the content of a <ScheduleGroup> tag is
defined by the group name and an effective date span. Adding an
employee to one group implicitly removes him/her from all other
groups during that group’s effective date span.
<ScheduleGroup> tags can respond to their own Action
attributes. However, these tags are more commonly used as
components of a <Schedule> tag.
! <Holiday>
Represents a predefined holiday period.
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.
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:
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.
Your application interacts with the server through a series of transactions that are
linked into a continuous session by cookies (user-transparent data objects that can
be recorded onto a client’s non-volatile storage media to preserve context and
state from transaction to transaction). The code examples in Chapter 2, “Using the
XML API” provide language-specific information about preserving context and
state with cookies.
Request-Response Transactions
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
Workforce
Your
Central
Web-based
Server
Application
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 Workforce
Web-based Central
Application Logon request 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
server’s response to its logon <Request> into a text string that represents
the XML <Response> to that <Request>.
HTTP Connection
Your Workforce
Web-based Central
Application Logon response Server
Your Workforce
Web-based Next request Central
Application Server
Next response
6. To close the session gracefully, your application must submit an XML Logoff
<Request>.
HTTP Connection
Your Workforce
Web-based Logoff request Central
Application Server
Logoff response
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.
Between logging on and logging off of the Workforce Central server, your
application specifies a series of API <Request> tags, each of which contains a
single Action attribute and one or more Data-only tags containing a set of data
properties whose values are specified as strings. For example, the Date property
of a <Punch> tag is a string that adheres to the local-independent format for
dates. In the United States, this format might be the following string:
2/25/2001
The commonly used properties listed in the following table must obey the
universal validation rules described in the subsequent table:
A Generic Request
The following XML code represents a generic <Request> whose syntax can be
customized to any required specification:
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>.
<Request>
API Tags go here
</Request>
<Request>
API Tags go here
</Request>
<Request>
Logoff attributes go here
</Request>
</Kronos_WFC>
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.
When this tag appears on the top line of your API application, it guarantees that
the XML parser will ensure that the contents of the XML file meets the specified
version and encoding requirements.
Kronos_WFC Tag
The highest-level tag after the XML declaration tag is the following tag, which is
also known as the document element:
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.
Logon Request
DataSource = "devicegroup:deviceID"
The devicegroup parameter specifies the new devicegroup and the deviceID
parameter specifies the new deviceID.
Logon Response
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:
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.
The following table is the Timezone table in the Workforce Central database.
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.
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.
Although there is no specific requirement to use an XML parser with the XML
API, the information passed in and out of the Workforce Central server is in the
form of text strings that have specific formats. Some of the <Request> tags and
many of the <Response> tags contain complex, heavily-formatted data
structures. In these cases, it can be difficult to manage these structures as simple
strings. An XML parser builds structures from these strings that are easier to
manipulate programmatically.
Request-Response Examples
This section presents several API-level examples that demonstrate the request-
response cycle on which all API applications are based.
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 Developer’s Toolkit Reference Guide.
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>
4. Test the <Response> from the Workforce Central server for success. The
response attribute of Status has only two possible values: Success or Failure.
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. Test programatically for a successful Logon by parsing the <Response>
from the Workforce Central server.
3. <Request> that pay period totals be returned for the specified period
(Period = "6/1/2001 - 6/7/2001") for the specified employee
(PersonIdentityNumber = "6"):
<?xml version = "1.0"?>
<Kronos_WFC version = "1.0">
<Request
Action = "Load"
<Timesheet>
<Employee>
<PersonIdentityNumber = "6"
/>
</Employee>
<Period>
<TimeFramePeriod
PeriodDateSpan = "6/1/2001 - 6/7/2001"
/>
</Period>
</Timesheet>
</Request>
</Kronos_WFC>
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 programmer’s 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
<Exceptions>
<TimekeepingException InPunchFlag = "false"
ExceptionTypeName = "UNSCHEDULED" />
<TimekeepingException InPunchFlag = "false"
DifferenceToLimit = "85:00" DurationOfException = "100:00"
ExceptionTypeName = "LONG" />
</Exceptions>
</WorkedDuration>
</TotaledWorkedDurations>
</Timesheet>
</Response>
</Kronos_WFC>
Note: If the Request had failed, the Status attribute of the <Response>
would be set to "Failure" and the <Timesheet> tag would be replaced by
an <Error> tag
Java-based Implementation
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();
…
//set the cookie values - if available
for (int i=0; i <cookies.size(); i++) {
String cookie = (String)cookies.elementAt(i);
conn.setRequestProperty("Cookie", cookie);
}
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++;
}
In this section, the same basic steps implemented in Java in the last section are
implemented in Visual Basic. This comparison reveals that Visual Basic simplifies
the process by internally managing the cookies and much of the HTTP
connection-handling.
The following Inet1 COM object handles the invocation of the HTTP request as
shown:
sPost = "POST"
sAction = "http://localhost/wfc/XmlService"
sXMLData = "<xml ..> <request …….. /></xml>"
sHTTPHeaders = "Content-type: text/xml"
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 Developer’s Toolkit Reference Guide.
Caution: The source code examples in this programmer’s 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 Developer’s
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 Advanced Programming Topics
It also implements the core API of the Document Object Model (DOM), which
enables the API application to dynamically specify values by accessing and
manipulating parsed XML content in a DOM Document Object. This strategy
enables the application to bind variables to specified values, then get the resulting
XML string from the DOM Document Object and submit it to the Workforce
Central server as an XML <Request> stream. This third level of abstraction is
readily implemented in JavaScript.
Caution: The XML tags described herein are not guaranteed to be compatible
with the XML tags defined in the Workforce Central Developer’s 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.
The XML tags used in this example have been reified in JavaScript: each tag's
corresponding object definition can be found in a file named after the tag name
with the .js extension.
Note: This example requires Internet Explorer 5.5 or greater. This example will
not work with any version of Netscape.
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.
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.
! To enter a duration edit, select Hours Worked.
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 GUI’s 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.
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
programmer’s 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.
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
Object:
XMLHTTP([url]) send and receive xml streams from any given
url
XMLHTTP.send(xml)send the xml stream to the given url and
returns the response
Object:
Request([url][,dom][,parent])default dom is created with
Kronos_WFC/Request node path
Request.getAction()returns the action attribute value
Request.setAction(str)sets the action attribute value
Request.getObject()returns the contained node
Request.setObject(obj)sets the contained node
Request.getNode()returns the current dom
Request.execute([action][,obj]) returns the response node on
success otherwise null
Request.getResponse()returns the full response dom returned
from server after execute()
Request.onchange set this property to a function handler,
when the Request object
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)
*/
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
}
}
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
}
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)
This appendix describes the set of Uniform Resource Locators (URLs) supplied
with the Workforce Central Developer’s 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.
! Enhance third-party Web sites by providing them with a means of launching
Workforce Central servlets.
Caution: The source code examples in this programmer’s 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 Developer’s 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.
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:
! 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
1. The Workforce Central server displays a logon page. You enter a valid user ID
and password.
2. When the server authenticates your user ID and password, it establishes an
HTTP connection between the server and the user’s browser. This initiates a
session.
3. The Workforce Central system dynamically generates a set of HTML pages
known as the Workforce Central portal. The portal contains a frame for the
navigation bar and another frame in which the various services are presented.
The navigation bar continues to be available for the duration of the session.
When a navigation bar component is selected, the Workforce Central system
loads the appropriate service into the other frame.
Note: The localhost parameter represents the name of the system on which
your Workforce Central server is installed.
In this example, the URL calls a fictitious servlet named ServletOne. A real
servlet would launch a corresponding applet with a similar name in the same
window of the user’s Web browser.
To specify a string that appears in the browser window as a color-coded hot link (a
link that, when selected, calls the specified servlet to launch the applet), add the
unquoted string in the location occupied by the boldfaced string shown here:
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:
(or)
The first pair of query string parameters in a URL—in this example, a person
number (PID) equal to a value of 245—must always be preceded by a single
appended question mark (?) as shown:
You can use the shortcut keys described in the following table in your query
strings to avoid exceeding the 256-character limitation.
Key Description
hf Key for retrieving HyperFind ID
ha Key indicating a HyperFind action
e Value for a HyperFind action edit
n Value for a HyperFind NEW action edit
d Value for a HyperFind DUPLICATE action edit
qn Value for a HyperFind query name
ts Timestamp for a HyperFind query name
tf Key for retrieving time frame for this applet. Add constants from next table
to specify exact pay periods and date ranges.
la Indicates the applet that launched another applet
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 Key for start date
ed Key for end date
pemk Key for retrieving the mode in which the people editor is launched
ap Value for a people editor mode (Add Person)
dp Value for a people editor mode (Duplicate Person)
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
0 Previous pay period
1 Current pay period
2 Next pay period
3 Previous schedule period
4 Current schedule period
5 Next schedule period
6 Week to date
7 Last week
8 Yesterday
9 Date range
10 Range of relative dates
11 Specified dates
-1 Separator ID
-2 Specified date range
-3 Specified range of relative dates
-4 Specified specific date
<HTML>
<BODY>
<FORM
action = "http://localhost/wfc/XmlService"
method = "POST”>
<TEXTAREA rows=20 cols=100 id=KronosXML name=KronosXML>
<?xml version = "1.0"?>
<Kronos_WFC version = "1.0">
<Request
Object = "System"
Action = "Logon"
Username = "SomeValidUsername"
Password = "SomeValidPassword"
/>
</Kronos_WFC>
</TEXTAREA><BR>
The Logon servlet returns the default portal page. You can redirect the Logon to
an alternate dynamically-created portal page or to a static Web page.
The source code consists of HTML code with embedded JavaScript code as
required. In this sample, the code is stored in the following HTML files:
! Body.html
! Index.html
! Logon.html
! Nav.html
! Title.html
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>
<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>
</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'
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>
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
<option value=219>Clarck, Frederic
<option value=108>Davis, R D
<option value=220>Diaz, Mercedes
<option value=214>Dolan, Bruce
</select><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>
</font>
</font>
</body>
</html>
Title.html File
This HTML code specifies the font information and text string for the Title frame
of the portal’s 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>
<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'
}
function goToSchedule(id){
if(id!=-1){
parent.frames['display'].location= 'http://localhost/wfc/
scheduleindividuallaunch?pid='+id+'&tf=1'
}
} //wfc/scheduleindividuallaunch?la=quick&
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
</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>
</font>
</font>
</body>
</html>
H P
hot link, specifying a string as Appendix-4 pay period, specifying in URL Appendix-7
HTML, SRC attribute Appendix-4 People tags 1-4
HTTP persistence
connection supported by tags 1-19
establishing Appendix-3 Person Number 1-5
example 1-10 portal
request 1-10 defined Appendix-3
response 1-11 generating an example Appendix-10
Hyperfind queries 1-4 specifying in third-party Web
site Appendix-21
J property
Java language example 2-12 Datasource 1-18
JavaScript LaborAccountName 1-13
embedded in HTML Appendix-10 obeying validation rules 1-13
object 3-5 PayCodeName 1-13
specing values as strings 1-13
K WorkRuleName 1-13
Punch entry, inserting into server database,
key example 2-5
property 1-20
specifying Appendix-5 Q
Known Issues in example 3-6
query string parameters
L appending Appendix-5
defined Appendix-5
Labor tags 1-4 question mark (?), appending Appendix-5
launch frame, specifying new Appendix-4 quotation marks, enclosing URL Appendix-3
launch window, specifying new Appendix-4
levels of abstraction 2-2 R
Load Action attribute 1-19
Load attribute redirecting Appendix-8
Request tag 1-5 reification, defined and described 2-3
localhost parameter Appendix-3 reify, defined 3-3
Request
N generic 1-15
specifying multiple 1-12, 1-13
namespace Appendix-4 Request code, embedding in HTML
nested tag 1-16 form Appendix-8
ShiftSegment 1-7 V
Supervisor 1-8
validation
Target 1-3
rules 1-14
TelephoneNumber 1-8
variables, binding to specified values 2-3
Timesheet 1-7
Visual Basic
User 1-5, 1-8
code examples 2-15
UserAccount 1-8
comparing with Java 2-15
UserAccountLockout 1-8
UserAccountStatus 1-8
WorkedDuration 1-6, 1-7
X
WTKEmployee 1-5, 1-8 XML
tags API 1-2
combining with other languages 2-2 API disclaimer Appendix-1
hierarchical order of 1-16 API tag 2-4
TARGET attribute, adding to HTML anchor API tags, manipulating 2-12
tag Appendix-4 character data 1-21
Target tag 1-3 element 1-3
categories 1-4 parser, using 2-3
specifying multiple tags in same Request stream, passing string as 2-2
Request 1-15 response 1-2
time properties, descriptions 1-22 streams, manipulating with other
time zone 1-22 languages 2-2
Timekeeping tags 1-6 strings, storing in files 2-12
Timesheet Editor API application, example 3-3 tag 1-2
Totalizer, described 3-2
transaction 1-9
request-response 1-10
Transmission Control Protocol/Internet Protocol
(TCP/IP)
network 1-9
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