How This Application Works

The iMeet application uses many of the different types of programming techniques that are available with Netscape Navigator. The iMeet application uses many of the features of the Netscape development environment, including standard HMTL, server-side JavaScript (Livewire), client-side JavaScript, and Java applets. To make things more interesting, many of the client-side features (applets and javascript code) are generated dynamically by the server-side code.

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.

Understanding the Source Code

To keep our application's source code as understandable as possible, a standard source code format was used throughout this application. This format was as follows:

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:

Because each form may go to a number of possible destinated, a convention was adopted where each form would post back to itself. Each submit button on that form was tagged with a unique label. In the handler portion of the source file, the existence of each possible unique label was tested, and an appropriate action taken. For example, the "doCancel" label might be used to cancel a particular form. The handler would test for the existence of the doCancel label, and if found, perform the appropriate cleanup and redirection to the previous page.

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.).