This application comes with complete source code. If you want to dive right in, it may be best to start there. If you prefer the gentle approach, this section will contain a brief description of the technologies and how we applied them to this application.
Each visible page in the application corresponds to an HTML file. Associated with most HTML files was a .js file, which contained server-side JavaScript routines referenced by the html file. The basic structure of the HTML files are as follows:
Each .html / .js file pair used a unique label to prefix its functions. For example, all javascript functions using in the file book.html are prefixed by "BK_". By using these conventions and having the forms post to the same file, it became fairly easy to define the exact interface between different pages of the applications.
Here is a brief synopsis of each screen in this application, and some of the features of each screen.
The Login Screen
This screen simply verifies the user and their password. LiveWire is
used to compare the supplied Username and Password to those stored in
the database. Client-side JavaScript is used to generate error
messages. Using client-side javascript is useful in this situation
because of it's speed advantages. Client-side JavaScript allows the
programmer to interact with the user without forcing the user to wait
for a seperate html file with an error message to load.
The Daily Schedule
The Daily Schedule (My Calendar) screen uses almost everything.
Java is used in small doses. Java applets must be used with caution,
as they can greatly increase the loading time of each page.
In iMeet, we take care to ensure that
that the extra wait time to the user is justified. Having the
calendar and the week view applet in the iMeet application make the
program much simpler to use, and add real value to the program.
LiveConnect is used to transfer data back and forth between Java and
JavaScript. Specifically LiveConnect is used to transfer information
regarding the date selected in the Calendar applet into the date field
at the top of the page. As one can see from the code in this
application, using LiveConnect in this manner is relatively straightforward.
As with most of this application, LiveWire's database connectivity library
is used extensively on this page. In fact,
almost every page in the iMeet application contains some portion that
is dynamically generated from a database.
Browse Meeting Rooms
The room view screen uses many of the same features that are used in
the Daily Schedule page. Something that is of interest however is the
week widget. This is the same applet that is used in the User View to
display an overview of a person's meetings for the week. By changing
the parameters passed to the applet however, the Java program now
displays all meetings for a week for that particular room.
By changing the parameters that are passed to the Java Applet, the
behavior of the applet is changed slightly. You will note that in the
daily schedule page, when you click on a meeting the current date is
changed, whereas in the Room View, clicking on a meeting directs the
browser to load the Meeting View screen for that particular meeting.
The applet has been programmed to operate differently because of
probable differences in the users intent. In the User view, the user
probably wants to see what is happening on that day, but in the Room
View, the user probably wants to look at that particular meeting.
Booking a Meeting
Again, this screen uses all of the techniques described above.
Additionally, this screen shows how client-side javascript can be used
in conjunction with LiveWire and Java applets.
Here the employee name widget is implemented using client-side JavaScript. Client-side JavaScript is an easy way of showing immediate feedback based on the users input. Obviously in the situation of inviting employees to a attend a meeting, a multiple select box is not feasible for large lists of employees and using a Java applet would require a great deal of parameter passing to get the Employee names out of the database on the server and into the Java applet on the client. The easy compromise is client-side javascript. This allows immediate feedback to the user without having to reload pages continuously, pass huge amounts of data to java applets, or force the user to use unsuitable input widget for a particular task.
In addition, client-side JavaScript is used to verify that form input
is valid before the form is ever posted to the server. Here the
client-side JavaScript is used as follows. On the FORM tag in the
HTML an onSubmit option is added which cancels the form submission if
the input was invalid. The form is verified by calling a verification
routine with the onClick tag in the submission button. If the input
in the form is not valid (eg. the public description is too long) then
the submission to the server is aborted, a dialog box is displayed,
and the focus on the form is directed to the field containing the
invalid data. Client-side JavaScript provides an excellent way to
provide feedback to the user without incurring wait times required by
server-side processing.
Searching for Room
The code behind this page is an excellent example of LiveWire's
database access capabilities. While executing the search algorithm,
this code generates temporary tables, uses multiple updatable cursors
simultaneously, and makes extensive use of server-side JavaScript to
implement Boolean logic and bitfields on character strings.
Granted that this is a simplistic search algorithm, but JavaScript is
being used here to solve a scheduling problem (not a trivial problem
in Computer Science).
All of these pages make use of common code. Two groups
of functions that are common in this particular are those prefexed by
CM_ (common) and IF_ (interface). During the course of developing
this application, the software programmers have isolated some
frequently excecuted functions such as connecting and disconnecting
from the database (CM_Connect and CM_Disconnect) and some interface
routines that are frequently used such as verifing form input
(IF_VerifyRoutines) and writing standard toolbars to the top and
bottom of each page (IF_DisplayToolbar). Even during the very short
development period of the iMeet application, it was quite easy to
build common library javascript routines
Database Schema
Shown below is the physical model of the tables used for the iMeet
application.
Note: Some of the tables and fields in this schema are not used in this release of the iMeet application. The reason these tables and fields were left in is that this schema demonstrats how the iMeet application can be integrated directly into a larger suite of office tools (inventory maintenance, personal calendars, etc.).