Professional Documents
Culture Documents
ClarioNET Manual
ClarioNET Manual
This publication is protected by copyright and all rights are reserved by Michael D. Brooks. It may not, in whole or part, be copied, photocopied, reproduced, translated, or reduced to any electronic medium or machine-readable form without prior consent, in writing, from Michael D. Brooks.. This publication supports ClarioNET and Clarion 5.0 & 5.5. It is possible that it may contain technical or typographical errors. The author provides this publication as is, without warranty of any kind, either expressed or implied. SoftVelocity Inc. is the exclusive worldwide distributor of the ClarioNET Web Enabling Thin Client Technology for Clarion. All information regarding this product can be obtained directly from: SoftVelocity Inc. 2769 East Atlantic Boulevard Pompano Beach, Florida 33062 (954) 785-4555 www.softvelocity.com
Trademark Acknowledgments: SoftVelocity is a trademark of SoftVelocity Incorporated. Clarion is a trademark of SoftVelocity Inc. ClarioNET is a trademark of Michael D. Brooks. Microsoft and Windows are registered trademarks of Microsoft Corporation. All other products and company names are trademarks of their respective owners.
Printed in the United States of America (06/2001)
CONTENTS
CONTENTS
1 - INTRODUCTION AND OVERVIEW Documentation . . . . . . . . . . . . . . . . . . . . . . . 5 What to Read First. . . . . . . . . . . . . . . . . . . . 5 Manual Conventions . . . . . . . . . . . . . . . . . . 6 Technical Support . . . . . . . . . . . . . . . . . . . . 6 Licensed vs. Trial Status . . . . . . . . . . . . . . . . 7 2 - PRODUCT OVERVIEW Thin Client Computing . . . . . . . . . . . . . . . . . . . 9 Architecture . . . . . . . . . . . . . . . . . . . . . . . . 10 3 - SETUP Running the Setup Program. . . . . . . . . . . . . . . . 13 ClarioNET Deployment Requirements . . . . . . . . . . 13 Server Deployment Requirements. . . . . . . . . . . 14 3 - QUICKSTART . . . . . . . . . . . . . . . . . . . . . . . 15 5 - APPLYING CLARIONET TO YOUR APPLICATION . . . 18 Template Options . . . . . . . . . . . . . . . . . . . . . 21 Enable ClarioNET . . . . . . . . . . . . . . . . . . . . . 21 License Password . . . . . . . . . . . . . . . . . . . . . 21 Application Visible on Server (EXE Broker Only) . . . . . 22 Windows HELP Sent to Client . . . . . . . . . . . . . . . 22 INI Files Default to Client . . . . . . . . . . . . . . . . . 22 Reports Use a Progress Bar. . . . . . . . . . . . . . . . 23 56 bit Blowfish Encryption. . . . . . . . . . . . . . . . . 23 Implement as Continuous Connection . . . . . . . . . . 23 Client Refresh Interval (minutes) . . . . . . . . . . . . . 23 ________________________________________________________ClarioNET
2
Client Auto Shut Down . . . . . . . . . . . . . . . . . . 23 Server Auto Shut Down . . . . . . . . . . . . . . . . . . 24 Use ABC Toolbar . . . . . . . . . . . . . . . . . . . . . 24 CPCS Report Generation Compatibility Server . . . . . . 25 LoadStar RPM Templates Compatibility . . . . . . . . . 25 6 - PROGRAMMING CONSIDERATIONS Introduction . . . . . . . . . . . . . . . . . . . . . . . . 27 Design Guidelines . . . . . . . . . . . . . . . . . . . . . 28 Defines . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 Window Management . . . . . . . . . . . . . . . . . . . 30 File and INI File Management . . . . . . . . . . . . . . . 31 Help Files . . . . . . . . . . . . . . . . . . . . . . . . . 32 Graphics Statements . . . . . . . . . . . . . . . . . . . 33 Security . . . . . . . . . . . . . . . . . . . . . . . . . . 33 Encryption . . . . . . . . . . . . . . . . . . . . . . . 33 User Access . . . . . . . . . . . . . . . . . . . . . . 34 Server Access . . . . . . . . . . . . . . . . . . . . . 34 IIS Patches . . . . . . . . . . . . . . . . . . . . . . . 34 User Interface Considerations. . . . . . . . . . . . . . . 34 Application Design Notes . . . . . . . . . . . . . . . . . 35 7 - CONVERSION CONSIDERATIONS Reviewing Source Code Procedures . . . . . . . . . . . 37 Searching USE Attributes on Controls . . . . . . . . 38 ABC vs. Clarion Template Chain . . . . . . . . . . . . . 38 8 - REPORTING Server Printing Setup Considerations . . . . . . . . . . 39 ClarioNET Server Sire Rreport Programming. . . . . . . 40
CONTENTS
ClarioNET________________________________________________________
CONTENTS
Client Side Processing . . . . . . . . . . . . . . . . . . 41 9 - SERVER SETUP Print Setup . . . . . . . . . . . . . . . . . . . . . . . . . 43 Database . . . . . . . . . . . . . . . . . . . . . . . . . . 44 10 - CLIENT PROGRAM Include Files . . . . . . . . . . . . . . . . . . . . . . . . 45 Deployment Requirements . . . . . . . . . . . . . . . . 46 Client Size and Download . . . . . . . . . . . . . . . . . 46 11 - SERVER DEPLOYMENT Testing and Developing with the Application Broker . . . 47 Performance . . . . . . . . . . . . . . . . . . . . . . . . 50 File Locations . . . . . . . . . . . . . . . . . . . . . . . 51 Graphics Files : ICO, JPG, GIF, & Other image files . . . 52 12 - ADVANCED TASKS/HOW-TO How to Transfer Files . . . . . . . . . . . . . . . . . . . 53 How to Use Command Line Parameters . . . . . . . . . 59
How to Call a Client Procedure To Execute on the Client . . . 60
How to Place a HyperLink in the Server Program . . . . 62 How to Change a Client Side Cursor . . . . . . . . . . . 62 How to Display a Splash Screen at Startup. . . . . . . . 63 APPENDIX Files Installed . . . . . . . . . . . . . . . . . . . . . . . 65 ClarioNET Report Functions. . . . . . . . . . . . . . . . 68 Other Server Side ClarioNET Procedures . . . . . . . . 70 Server Class Defined. . . . . . . . . . . . . . . . . . 70 Initialization and Closedown . . . . . . . . . . . . . . 70 Responding to Client Queries . . . . . . . . . . . . . 72 ________________________________________________________ClarioNET
4
Window Management . . . . . . . . . . . . . . . . . 73 Miscellaneous . . . . . . . . . . . . . . . . . . . . . 76 PushWindow . . . . . . . . . . . . . . . . . . . . . . 77 Client Class Properties . . . . . . . . . . . . . . . . . . 80 Windw Structures Properties Support . . . . . . . . . . 88 Window Complexity Limitations . . . . . . . . . . . . 89 WINDOW and APPLICATION Properties . . . . . . . 90 Control Properties . . . . . . . . . . . . . . . . . . . 91 General Property and Control Notes . . . . . . . . . 104 Forced Closedown . . . . . . . . . . . . . . . . . . . . 112 Notes for Hand Coders. . . . . . . . . . . . . . . . . . 113 Problems and Limitations . . . . . . . . . . . . . . . . 117 Additional Programming Guidelines . . . . . . . . . . . 122 Clarion Library Source Code Changes . . . . . . . . . 123 Changing the BUILTINS.CLW file . . . . . . . . . . 123 Clarion LEGACY Template Changes . . . . . . . . 124 Template Registry Setup . . . . . . . . . . . . . . . . . 125 Error Messages. . . . . . . . . . . . . . . . . . . . . . 125 Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
CONTENTS
ClarioNET________________________________________________________
1 - Introduction
1 - Introduction
Documentation
What to Read First
Everything you need to know to apply ClarioNET to a Clarion Application should be in this book. If one of your questions is not answered we want to know! Please email documentation@softvelocity.com and tell us how we can make this document even more useful for you. To enjoy the fastest way to get acquainted with ClarioNET we suggest that you:
Skim the Product Overview section in this chapter and be sure you
read the white papers located at www.softvelocity.com/clarionet.
Follow the steps in the QuickStart chapter for a brief but instantly
gratifying experience in applying ClarioNET to a Clarion .APP file and then running it over IP (using localhost). After those initial steps we sincerely hope that you read through this entire document. Weve designed it as a reference and a users guide to assist you in answering the How Do I...? and What parameter does this function take? questions.
________________________________________________________ClarioNET
6
Manual Conventions
Symbols are used in the syntax diagrams as follows:
Symbol
[]
1 - Introduction
Meaning
Brackets enclose an optional (not required) attribute or parameter.
( )
| |
Vertical lines enclose parameter lists, where one, but only one, of the parameters is allowed.
Any word in ALL CAPS is a Clarion language keyword. DataNames use mixed case with caps for readability. comments are predominantly in lower case. The purpose of these conventions is to make the code examples readable and clear.
Technical Support
You can receive unlimited free technical support for ClarioNET on the Internet.
ClarioNET________________________________________________________
1 - Introduction
Licensed vs. Trial Status
The ClarioNET programming package is supplied as a complete system with one exception....it operates in a Trial mode until you enter your ClarioNET license number. All of the functionality is available with the Trial mode....you can use it to completely develop your web enabled application or test a conversion of an existing application. At the trial level the client program will ALWAYS display a Unlicensed Demonstration Version banner as a starting window after launching the server based program and at regular intervals throughout the client session. When your ClarioNET license is purchased you are assigned a LicensePassword. You can enter this license password into the main template parameter screen -or- as the first parameter to the ClarioNETServer:Init procedure call. When a valid License Password is specified the Unlicensed Demonstration messages will be removed.
________________________________________________________ClarioNET
1 - Introduction
ClarioNET________________________________________________________
2 - Product Overview
2 - Product Overview
Thin Client Computing
Thin Client computing has become the vision of the future for distributing application software to users desktops. Thin Client refers to a small, self-contained program that resides on the users (client) computer that displays screens and processes only keyboard and screen input. It is directly linked to the real program that is running at a remote location....on a powerful server. The two programs operate by exchanging information. The client tells the server what mouse and keyboard actions the user has performed. The server tells the client what to display to the user. This type of software design has many advantages over the early method of software distribution and usage:
The software and data are installed just once on a centralized server.
There are no large installation tasks on the client systemjust a simple single file executable program.
The database is held on a high speed, secure file server with a quality
backup plan in place.
________________________________________________________ClarioNET
10
2 - Product Overview
The user can run its User Interface only. The application itself
executes on an Intranet or Internet server connected to the User Interface over the HTTP (web) protocol. The user experiences the same rich Windows interface with speedy performance and full functionality....with zero additional programming or capability loss.
Architecture
For a ClarioNET deployment you actually create two different executables programs 1) One is the actual Clarion application which is the program that contains the full functionality. These are the EXE and DLL files that can run as a standalone desktop application -or- can reside and run on a server running either Microsoft Internet Information Server or the Clarion Application Broker. This executable communicates with the database, gathers data for all displayed windows, takes care of updates, and formats the reports. The only thing it doesnt do is display on the server console when running as a ClarioNET application. The second program is the Client application which is also a Windows executable program. This program contains no logic except the ClarioNET remote User Interface system. As a Windows program it has full access to normal Windows controls and resources such as local printers. When the ClarioNET client application is started it contacts the server via HTTP protocol and requests that the server run a particular application. The server then starts a new instance of the program and provides the client with
2)
ClarioNET________________________________________________________
2 - Product Overview
an identifier so that it can be uniquely identified for future communication with the same instance of the server application.
11
The server application will send the client encrypted, compressed data that tells it the full structure of all windows to display and what data to display in the controls. The client is simply an intelligent assistant that receives instructions from the server to render and manage a user interface. The user operates the program as presented by the client EXACTLY as they would be running the program locally. The ClarioNET client and server subsystems handle all user interactions and window updates throughout the session and for all aspects of the application running on the server.
Once the application instance on the server is started and it opens a window, the Client then opens an identical window and controls. To the end user it appears that a normal Windows program executes...the only difference being a small green/yellow/red LED control on the title bar which indicates when the client is communicating with the server. Typically when a new window is displayed the client and server exchange between 1,000 to 9,000 bytes of data. Thereafter only instructions to update data are exchanged, usually less than one kilobyte per exchange (and most of the time less than 200 bytes!). ClarioNET does not use constant communication streams like other remote client products, helping to keep bandwidth requirements down and server activity to a minimum. This small communications overhead results in a snappy and fast interface for the end user. The client application itself is a one-time download of a single EXE file of as little as 500KB, and may be used for as many sessions or applications as the end user has access to.
________________________________________________________ClarioNET
12
2 - Product Overview
If the user selects to print a report, the report is formatted and created as a WMF file on the server and sent to the client application. The client application then displays a preview and prints the metafile to the local printer. This means the exact report that is designed for the application is what the client gets....a superior solution to browser-based report layout capabilities. As the client continues to open windows, manipulate controls, or create reports, these actions are executed on the server. Encrypted & compressed communications convey the results to the end user and send new data or commands back to the server. When the end user shuts down the application, both the client program and the instance on the server are terminated. If the end user loses a connection, the server application is terminated when it reaches a timeout value set by the developer.
ClarioNET________________________________________________________
3 - Setup
13
3 - Setup
Running the Setup Program
To install ClarioNET you must have already installed Clarion Version 5.0 or later. We strongly recommend that you apply all patches (which are freely downloadable) from www.softvelocity.com to your copy of Clarion. Locate SETUP.EXE, double-click the icon, follow the directions, and read the README.TXT files to install ClarioNET.
Note: The setup program will back up your BUILTINS.CLW file and replace it. If you have customized the BUILTINS.CLW file you must compare the old and new files to merge previous changes into the new file.
Microsoft Windows 95,98,NT,2000, or ME TCP/IP Internet Connection using HTTP 4-16 MB RAM of available ram (depends on application complexity)
________________________________________________________ClarioNET
14
Suggested Server Specifications
These suggestions assume you will be deploying a normally complex Clarion application and expect a normal load of 20 to 50 simultaneous instances on the server. More users will require additional RAM and multiple processors for optimal performance.
3 - Setup
Microsoft Windows NT or 2000 server 512 MB Ram Recommended Pentium 733MHz or better recommended. 256kbps high quality internet TCP/IP Internet Connection using HTTP with a static IP address.
ClarioNET________________________________________________________
4 - Quick Start
15
4 - Quick Start
This section shows you a quick way to get an example application up and running. In just minutes you will add the ClarioNET template, recompile, copy some files, and run your first ClarioNET application that you created More complete explanations of all the steps appear later in this manual. For the QuickStart, you will open an example.app file, apply the ClarioNET template, and run it through the Application Broker.
Note: The Clarion Application Broker must have already been installed. Please consult the documentation for that product.
Just follow these steps: 1. 2. 3. If you have not run the Application Broker setup, do so, accepting the default file locations. Start the Application Broker. Open your browser and type the URL http://localhost (or http://localhost:8080 if youre using an alternate port) to verify that your IP sockets are set up correctly. You should see a standard SoftVelocity default.htm web page that was installed with the Clarion Application broker in your browser. If you do not then either TCP/IP is not installed, the localhost id is not established on your computer, or some other problem exists that you will need to correct. 4. 5. Open the Clarion for Windows development environment. Open a small application weve installed for you:
(Clarion directory)\Examples\Clarionet\Quick\Quick.app
The following # 6, 7, 8, 9, and 10 is required for Clarion 5.0 applications and any hand-coded projects. The template for Clarion 5.5 applications adds the project define automatically. 6. 7. Press the [Project] button in the Application Tree dialog. Press the [Properties] button in the Project Properties dialog.
________________________________________________________ClarioNET
16
8. 9. Click the Defines tab. Add ClarioNETUsed to your defines.
4 - Quick Start
11. Press the [Global] button. 12. Press the [Extensions] button in the Global Properties dialog. 13. Press the [Insert] button in the Extension and Control Templates ialog. 14. Select ClarioNET(Server) in the ClarioNET class to add it, accepting all the default settings. 15. Press [OK] twice to return to the Application Tree. 16. Compile your application. 17. Make a directory under the CWICWEB tree named \CWICWEB\CWEXEC\QUICK. 18. Copy the files QUICK.EXE and STATES.TPS from the directory
(Clariondirectory)\Examples\Clarionet\Quick\
to the directory
\CWICWEB\CWEXEC\QUICK.
19. Copy the files C55RUNX.DLL, C55DOSX.DLL and C55TPSX.DLL from the directory
(Clarion directory)\bin
to the directory
\CWICWEB\CWEXEC
20. Copy the files CLRNT55S.DLL, and LSCOMP.DLL from the directory
(Clarion directory)\bin
to the directory
\CWICWEB\CWEXEC\QUICK.
ClarioNET________________________________________________________
4 - Quick Start
Client screen showing round LED indicator at upper-right
17
21. Run the pre-compiled client: and press the [Connect] button.
Note:
(Clarion directory)\Examples\Clarionet\Quick\Qwikclnt.exe
If port 80 is already used and you will be using port 8080 for the application broker, youll see a Port box in the client; please change this from 80 to 8080 before connecting.
You should be running a small application for browsing and editing a small list of state abbreviations. Note the LED indication on the caption bar. This is the only indication on the client side that this is different than a normal application. The LED alerts when your client is ready & waiting for your actions (green), processing an outgoing or incoming task (yellow), or sending & receiving instructions from the server (red). If you input anything from the client side by mouse or keyboard while its yellow or red it will beep to inform you that it couldnt process the input....you should make the request again.
________________________________________________________ClarioNET
18
4 - Quick Start
ClarioNET________________________________________________________
19
Note:
Many programs will appear to run, at first glance, without adding the ClarioNETUsed define. You must still add the define, for its possible that you will encounter problems when you explore your program running under ClarioNET. The POPUP, HELP, INI, ALERT, SELECT, and all graphics capabilities will not work unless this define is added.
After adding the define, apply the ClarioNET global template to your application:
________________________________________________________ClarioNET
20
1. 2. 3. 4. 5. 6.
[OK]
Applying the template and recompiling will in most cases create a web
enabled application ready for immediate testing. However, it is sometimes impossible for ClarioNET to locate every window or control that awaits user interaction in the embed code that you may have added to the template generated code. Therefore it is necessary to examine the behavior of all the windows, reports, and commands within your application to verify that they work properly. The next chapter will provide you with detailed information on the considerations you as a programmer must keep in mind so that you can convey all the functionality of a normal application to the remote user using ClarioNET.
ClarioNET________________________________________________________
Template Options
21
Template Options
Enable ClarioNET
This checkbox enables or disables the inclusion of ClarioNET code in your ABC or Clarion (legacy) generated application.
License Password
This password is provided with your purchased copy of ClarioNET. The ClarioNET programming package is supplied as a complete system; you must, however, enter your license code when you develop an application. If you do not specify a License Password your applications will display Unlicensed Demo banners and licensing reminder messages.
________________________________________________________ClarioNET
22
Template Options
The License Password is assigned to you at the time the license is purchased. All of the functionality is available without entering a License Password...this is called Trial mode. You can use it to completely develop your web enabled application or test a conversion of an existing application. This is useful to show work in progress to a client, provide a web demo to prospects, or just to educate yourself of the groundbreaking capabilities of ClarioNET. Hand coders will need to enter the valid License Password as the first parameter to the ClarioNETServer:Init function.
ClarioNET________________________________________________________
Template Options
INI calls to be made that will severely effect the performance of your program because of network lag time.
23
________________________________________________________ClarioNET
24
Client Auto Shut Down
Template Options
This value is the number of minutes the Client will wait for any type of user activity (keypress, mouse control selection, etc.) before automatically shutting down both the server and client programs. For example, if the end user forgets to shut down the server based program (goes off to lunch or leaves for the day), it is good practice to have it shut down so as not to consume server resources. A value of zero (0) disables the inactivity check.
Note: The Client shut down time must always be less than the server shut down time. If your entries specify otherwise the Server Auto Shut Down time will be internally set to one minute longer than the Client Auto Shut Down time.
Throughout the ClarioNET session the server program waits for client commands, except when Push Window calls are executed. The server has no way to tell the client it is shutting down. By setting the client time shorter than the server time the client will always shut down first. The server time is only used when the client and server have lost contact and the server program must shut itself down to rid the server of a hung program instance.
ClarioNET________________________________________________________
Template Options
25
Web applications cannot use MDI, and so ClarioNET must duplicate the toolbar on each window. This is a complex process, made harder because the template must automatically detect when a toolbar is to be used.
________________________________________________________ClarioNET
26
Template Options
ClarioNET________________________________________________________
6 - Programming Considerations
27
6 - Programming Considerations
Introduction
In general, the internal workings of a Clarion application easily lends itself to separating the user interface from the application. Clarion programs create controls, customize their appearance, and fill them with data before displaying them on screen. The complete description of a window is a data structure. During program operation, all data structures are created before the ACCEPT loop is started, The ACCEPT loop starts and displays the data structure, and then the ACCEPT loop awaits user interaction. ClarioNET replicates the data structures that the server application creates on the client and the client uses the local copy of Windows to render the identical window (data structure). The client then begins its ACCEPT loop, and transfers any messages regarding user interaction back to the server based program. The server processes these events, keypresses, and data changes, and sends back just the changes to the data structures to the client. The client again asks the local copy of Windows to make any changes to the relevant controls.
________________________________________________________ClarioNET
28
6 - Programming Considerations
If you understand this it should be easy to debug any programs that youve applied the ClarioNET template to. Keeping this workflow in mind when you create new applications will enable you to easily design new programs with ClarioNET in mind as an option, whether you implement the new application as a ClarioNET application or a normal desktop application. In general, just about everything in wizard-generated template code transfers to ClarioNET without modification. Any logic that you place in embeds should also transfer easily providing you observe the basic design guidelines (see next section). Any user interface code that you place in embed code that creates windows, utilizes timers, or awaits user interaction, however, will need to be checked. The ClarioNET template generally finds all the user interface code in the windows and reports that the templates generate, but it cant always guarantee the same for your embeds.
Design Guidelines
These items should be carefully checked during your program design stage to avoid hard to find problems in the later stages of development.
IMPORTANT ! It is ESSENTIAL that the design guidelines below are followed before you test or deploy your ClarioNET web enabled program.
If your program needs to operate both as a local program and web deployed program use ClarioNETServer:Active() to test if the application was launched by the Clarion Application Broker and is running as a web deployment.
Add ClarioNETUsed as a project define. Make the required source code changes to BUILTINS.CLW Disable all Edit In Place usage. This is automatically done for you in
the ABC templates.
Your server program must be StandAlone. Your client program must be Local.
ClarioNET________________________________________________________
6 - Programming Considerations
Check your WINDOW and APPLICATION structure to be sure all
controls have USE attributes. If you need to add them you can use a dummy field equate label.
29
Disable Clarions INI file strategy of saving window sizes in INI files. Do not use windows in report procedures. Gather all data needed to
generate a report THEN call the procedure that generates the report.
Always use the PREVIEW attribute on reports. If using the ISAPI Clarion Application Broker make the entries in the
Windows registry to specify a system default printer.
Both Client and Server programs must be 32 bit. Disable all Drag & Drop usage. Disable or remove all OCX controls. Delete Clarion Internet Connect or Web Builder templates from the application.
________________________________________________________ClarioNET
30
6 - Programming Considerations
Windows API calls are not transferred through to client. Disable all
calls to write to the window, play sounds, etc..
Defines
Always add ClarioNETUsed as a project define. For Clarion 5.0 applications do the following: 1. 2. 3. 4. Press the [Project] button in the Application Tree dialog. Press the [Properties] button in the Project Properties dialog. Click the Defines tab. Add ClarioNETUsed to your defines.
Many programs will appear to run, at first glance, without adding the ClarioNETUsed define. You must still add the define, for its possible that you will encounter problems when you explore your program running under ClarioNET further.
Note:
Window Management
Your program running on the server is using the Client as the user interface. The two must always be aligned, that is the client is displaying the window exactly as it exists on the server. Most of this is automatic however you must keep in mind:
ClarioNET________________________________________________________
6 - Programming Considerations
31
________________________________________________________ClarioNET
32
6 - Programming Considerations
Help Files
ClarioNET supports Windows help that is implemented in Clarion using the HELP() statement to specify the help file to be used. ClarioNET redefines the HELP Clarion procedure call to ClarioNETs own internal procedure. When your application is not being used in ClarioNET mode then the standard Clarion help system on the local computer is used. ClarioNET supports help by transferring the entire HELP file to the client along with the HLP attributes on all screen controls. The help file is transferred at startup and, if your server application has specified a new help, when the client window is being updated. The help file on the client follows the same usage as the icon and image files.
Note: All files are loaded from server to client once and are deleted when the client worksession is complete.
Because the entire help file is sent to the client, it is strongly recommended that you keep the help file(s) small. You can use multiple calls to HELP in your application to bring the proper one of multiple
ClarioNET________________________________________________________
6 - Programming Considerations
.HLP files into scope. The file is only sent once during a session; repeated calls will not cause another file transfer.
33
In a hand coded program you must explicitly add a line of code to enable help, at the start of your application, following ClarioNETServer:Init:
ClarioNET:EnableHelp( SHORT Mode),SHORT
This function turns on and off the help system usage. The Mode parameter should be 1 to enable the transfer of the help file to the client and 0 to prevent the transfer of the help file to the client. This also effects the call to HELP without parameters!
Graphics Statements
ClarioNET supports all the Clarion language statements: ARC, BLANK, BOX, LINE, CHORD, ELLIPSE, ROUNDBOX, SHOW, TYPE, PIE, AND POLY. This is done by redirecting the standard Clarion graphics calls to ClarioNET procedures by using the ClarioNETUsed define and the revisions to the BUILTINS.CLW file. ClarioNET automatically detects whether the application is running on a local desktop or was launched by a remote ClarioNET client and will redirect the graphics as needed (graphics sent to reports are not effected). Windows API calls that draw to the window are not captured.
Security
There are three general areas of security for consideration: encryption, user access, and server access.
Encryption
All communications between client and server are encrypted, and up to 56 bit encryption is provided. This provides a very high level of security for your data against compromise by potential crackers with packet sniffers. In certain cases higher encryption might be needed (financial institutions for example). Should this be the case, please contact SoftVelocity.
________________________________________________________ClarioNET
34
User Access
6 - Programming Considerations
Although ClarioNET encrypts the data it cant prevent remote users from leaving client program icons on their desktop which, with just a double-click, can be used to access the data by anyone passing by. We encourage you to add a password procedure to the client application. By initially disabling the Connect button before password verification you can prevent initial unauthorized access. In this case you will probably not want to store user IDs and passwords in a data file, which would then have to be downloaded to the client along with the drivers. An alternative would be to store user IDs and passwords in an array in the client EXE and check against that as a simple and straightforward first line of protection.
Server Access
We strongly encourage you to build password checking into the server side application. Because the client cannot access any data files on the server unless you specifically download them to the client with code in the server program, its simple enough to use a local data file for verification of access rights. This also allows you to collect the user ID and password to forward to the database server.
ClarioNET________________________________________________________
6 - Programming Considerations
35
Application Design
You are in charge of the application programs design. Because there will be 50 or so copies of the same application running on the server each coding efficiency or coding mistake will be magnified 50 times. ALWAYS be thinking about these items:
Memory usage
Dont hog RAMyou will be taking it from all the other instances of your program.
________________________________________________________ClarioNET
36
6 - Programming Considerations
Your end users may be running in different resolutions, and have
different fonts on their systems. Try to keep your windows from growing overly large, and stick to basic fonts such as Arial, Times New Roman, and MS Sans Serif.
ClarioNET________________________________________________________
7 - Conversion Considerations
37
7 - Conversion Considerations
Reviewing Source Code Procedures
We strongly encourage you to review your source code module by module, specifying that the development environment show you all filled embed points. This will allow you to identify any windows, timers, or other user interface features which were not template generated. Clarion makes it easy to do this. You may select the Category tab in the application tree to view all source code type procedures. You can just right-click each, choose Source, and then review all your code. Additionally, you can check any procedure by double-clicking the procedure to view its properties dialog, pressing the Embed button to view embed code, and then the [Show Filled Only] button to see only those embeds that have custom code attached. When creating future projects, we encourage you to create procedures for every window using templates, and calling the procedure whenever you wish to open that window, so that all your user interface elements will be accessible to ClarioNET. In other words, dont put WINDOW structures in source code.
________________________________________________________ClarioNET
38
7 - Conversion Considerations
Searching USE attributes on Controls
Any time a control appears in your application running locally BUT DOES NOT appear in a ClarioNET client, the first item to check is that the control contains field equate labels. For example:
USE(?Label1)
Each control MUST have a USE variable otherwise the ClarioNET client will not receive enough information to duplicate the control correctly. Menus (in particular those imported from older DOS applications) may lack USE attributes. TAB controls should also be checked carefully.
ClarioNET________________________________________________________
8 - Reporting
39
8 - Reporting
When Clarion for Windows was first developed, the developers copied a printing feature which was specific to Windows NT at that time. This involved creating a metafile, which is a series of instructions to the Windows GDI (Graphics Device Interface) that describes how Windows should draw the elements on a page. (This is not a generic page description language like postscript) These instructions, in conjunction with the device settings and driver for the printer, allow Windows to provide complete instructions to the printer to create a complex report. When your program creates a report, it does so on the server. ClarioNET compresses and encrypts the metafile (WMF file) created on the server and sends it to the client. WMF files are created when the PREVIEW attribute is implemented for a report, which is why you MUST always enable print preview in your ClarioNET applications. The client places the received metafiles on the client disk and calls the Print Preview display procedure. Depending on the user selections the metafiles are then sent to the local printer driver and then on to the locally connected printer. Because just the GDI instructions for the report are sent to the client, and they are highly compressible, this provides for highly efficient communication speed and complete support for reports as designed.
________________________________________________________ClarioNET
40
Note!
8 - Reporting
You must install a printer on the server, even if you do not intend to physically connect any printer at all to the server.
In general, we recommend installing an industry standard driver such as the HP LaserJet Series II, or any of the HP Postscript drivers. The servers printer driver should be able to support any size of paper or device options (such as color) that you wish to define for any of your reports.
Note! There are additional very important instructions in the chapter entitled Server Setup which specifically apply to ISAPI deployment. Microsoft Internet Information Server (IIS) handles the printer device differently than Application Broker.
Although Report Preview mode must be enabled (using the PREVIEW attribute on the report) to generate the WMF files, the actual visual report previewing code must be disabled (the template code does this for you). If you use third party tools you must disable server side previewing and add your third party code to replace the supplied previewer code in the client. Performance Tip..... Clarion ABC and Legacy templates both control printing by opening a progress window with a TIMER attribute which is set 1. This means a timer event is generated every 1/100th of a second. The report generation process is driven by these timer events, thus triggering record processing and PROGRESS window updating.
ClarioNET________________________________________________________
8 - Reporting
41
For very large reports you may wish to rewrite the procedure to eliminate the timer generated process which can cause performance degradation and consume server processing time in an environment where the processor is shared among many instances of a program. Plan on testing.
Be sure that both the server and the client have printer drivers installed
that can print the size of the paper specified in the report.
________________________________________________________ClarioNET
42
bubblejet printers from 1993.
8 - Reporting
Do not expect perfect output on old or oddball equipment such as In general, test all reports thoroughly with the printer the reports are to
be printed on.
ClarioNET________________________________________________________
9 - Server Setup
43
9 - Server Setup
Print Setup
The IIS ISAPI Application Broker on Windows NT/Windows 2000 requires a default printer to be assigned. For the EXE Application Broker deployment, whichever user account is logged in when starting the broker must have a default printer. You must manually edit the registry in order to print properly when you run server applications using IIS/ISAPI. The setup program copies .reg files to make this easier. On NT based systems, when you choose a default printer it does not create a default printer for all users....only the user account you logged in under. The default for all users, except those who choose a default printer, is still no printer. This lack of a printer setting is what IIS sees because IIS doesnt log in under a normal user account. When your Clarion application (launched by the application broker running under IIS) creates a report, it requires a printer device capable of setting the page size. Therefore, if no default printer is set for IIS account in the registry, the Clarion application creates a metafile based on the screen dimensions. The screen settings are the wrong proportions and dont support different paper sizes or orientation. The ClarioNET client will attempt to resize the metafile that results from this, but the printed results will be unsatisfactory, and in most cases, incomplete. The steps below will help you install a default printer for the default user on Windows NT. 1. Install one of the following printer drivers, telling Windows NT its a local printer attached to LPT 3 (whether the printer physically exists or not) and specifying its the default printer. Windows NT administrators should have their Windows NT install CD handy. It doesnt matter whether the printer exists, is connected or not, nor does it matter whether the printer is local or network. HP LaserJet Series II HP LaserJet 2100 Series PS Optionally if youve already installed a printer and the printer name as it appears in the printer settings window is exactly the same as it appeared when you selected from the Windows NT Printer Setup
________________________________________________________ClarioNET
44
9 - Server Setup
wizard dialog, edit the file YourPrinterName.reg.renameme (see below). Replace the three instances of YourPrinterName with the actual printer name, exactly as it appeared in the Printer Setup dialogs list of printers. 2. In the (Clarion)\examples\ClarioNET\reg directory, locate the printername.reg.renameme file corresponding to the printer you selected. Copy it to a floppy disk, or over the network to your server. On the server, rename the file to filename.reg, and execute the .reg file. This will have no effect on your printer settings for current users. It will, however, set this printer as the default printer for any new user accounts local to this machine. Note that the .reg file has set the port to LPT3, to minimize any possible conflicts.
3.
Database Considerations
For any installation for which you expect more than ten users simultaneously, try to use a DBMS residing on another server. Short of using carrier pigeon to relay IP packets, local file management is the biggest drag on connecting your remote clients. Note that this does not mean placing Clarion or Topspeed files on a separate file server, and letting the server application manage them.
ClarioNET________________________________________________________
10 - Client Program
45
10 - Client Program
To use a ClarioNET application, the end user requires a client program that:
Gathers the server, program, and other information. Makes calls to ClarioNET procedures in the clrnt50c.lib or clrnt55c.lib
static library to start the server program and implement remote user interface. A fully functional sample client program is supplied with your install of ClarioNET. This program consists of the following component files
Include Files
Two include files are needed in the client program.
INCLUDE(CLIENT.INC) INCLUDE(CLIENT.CLW) Contains TYPE definitions & EQUATEs
Contains PROCEDURE prototypes
________________________________________________________ClarioNET
46
Deployment Requirements
10 - Client Program
The main requirement for your Client application is that you need to author the client application shell that will display your logo, gather client data, assign ClarioNET variables, and call the ClarioNET client procedures to launch the server based application, and exit when the ClarioNET session is finished. There is no requirement to display a Client window first before launching the server based application. The ClarioNET launching procedures can be called directly to make it look as if the server program was launched locally simply by selecting the program icon.
Note! The client application must have the project Runtime Library set to Local. ClarioNET requires that WININET.DLL is present. This library is part of the operating system. This library takes care of all HTTP and Proxy calls. If the workstation can successfully browse the web using a recent browser, it should be fine for running a ClarioNET application.
Note:
ClarioNET________________________________________________________
11 - Server Deployment
47
11 - Server Deployment
ClarioNET works with both Microsoft Internet Information Server, via ISAPI (Information Server Application Programming Interface) Application Broker, or with the EXE Clarion Application Broker. In general, any moderately busy site will wish to use IIS because of its superior logging, security, and management tools. EXE Application Broker is perfectly fine for small sites and developer testing. It is very important that you set up Application Broker properly.
________________________________________________________ClarioNET
48
11 - Server Deployment
place images common to more than one application in the public directory. 1. Start the EXE Clarion Application Broker. For Clarion 5.0 the Application Broker EXE file is in the \CWICWEB directory and is called CWBROKR1.EXE for the limited test version, and CWBROKER.EXE for the unlimited version. For Clarion 5.5 the Application Broker exe file is C55APS.EXE. 2. Check App Broker Settings for HTTP Port and Public Directory In some cases your default HTTP port 80 might already be used. This is the case with the typical operating Web server. In this case you can use the EXE broker with an alternate Port. After you start the EXE broker there will be an icon in your System tray at the lower right side of your status bar. Click on it once, then select Setup from the menu of the window that is displayed. You will need to review the Public Directory and Port Number. The other items are not that important. Port Number is the port on your computer that the EXE broker will listen to for the incoming messages from the ClarioNET client. Public Directory must be the full drive/directory path to a directory under CWICWEB. The most common entry is C:\CWICWEB\PUBLIC.
Note: If the application broker started without any error or warning messages the Port shown on the Setup screen will work fine.
3.
Determine the PORT and IP ADDRESS that the Application Broker will respond to. This is the single most troublesome area of using the Application Broker for most developers. When testing on a single machine, simply use http://localhost as your address. If you wish to provide access for someone outside, via the Internet, open a command prompt and type IPCONFIG if you are using Windows NT or Windows 2000, or WINIPCFG, if you are using Windows 95 or Windows 98. These utilities will display your external IP address. Substitute the external IP address for localhost.
4.
Determine the full URL that you need to use in the ClarioNET Client.
ClarioNET________________________________________________________
11 - Server Deployment
49
The URL is the Uniform Resource Locator that all Internet TCP/IP connections use. This consists of your IP address, directory name, program name, and a .0 to indicate specifically that the request should be routed through the Application Broker. Thus, if your application is MYAPP.EXE, and its located in the \CWICWEB\EXEC\MYDIR directory, the full URL will be:
http://localhost/exec/mydir/myapp.exe.0
5. Test your Clarion Application Broker Installation with a Browser Before creating the client application, and after creating and placing a ClarioNET server application in the proper location, launching the URL in your browser should return the following message:
ClarioNET( 1 JUN 2001, 10:35:26) ServerVersion = 00000000057 Unrecognized command line, process error = 0
Note that the dates and version might be different; but receiving this message indicates you have specified everything correctly and the application broker and all the pieces appear to be in place and working correctly. If you did not receive the message, it may be because:
Your Clarion EXE may not be in the directory. Your Clarion program does not have the ClarioNET calls added to it.
This is either because you did not add the ClarioNET template to your application or your hand coded program does not have the ClarioNETServer:Init call in the proper location (which can mean that there are other deficiencies also).
The Clarion program cannot find the necessary .DLL.s. The Clarion program has tried to open a file, an error occurred, and a
message is displayed on the server that has paused the programs execution.
You are using the Clarion 5.0 Application Broker with a program
compiled with Clarion 5.5, or the opposite combination
________________________________________________________ClarioNET
50
11 - Server Deployment
Performance
Because the communication between client and server is remarkably streamlined, and compression and encryption are both very efficient, ClarioNET has virtually no effect on your application performance, other than the fact that you will now have many instances of the application running on a single server. The best programming guidelines for optimizing server performance are as follows:
The chart above chronicles the opening of twenty clients, using a local database, on a Windows 2000 Advanced Server system with 512MB of RAM. This shows the loading of each client successively, each loading the same application, each loading a browse window.
ClarioNET________________________________________________________
11 - Server Deployment
51
File Locations
Consult your Application Broker documentation for more detailed information. In general you can use the following map for placing your files to deploy a ClarioNET application. The server portion of a ClarioNET web deployment requires the files:
ClarioNET Files: CLRNT55S.DLL LSCOMP.DLL Clarion Files: C55RUNX.DLL C55DOSX.DLL -orCLRNT50S.DLL
-or-or-
C5RUNX.DLL C5DOSX.DLL
Your application program can also use the Path to find files, but we cant give you guidelines on this as the EXE and ISAPI version environments might impose other requirements.
________________________________________________________ClarioNET
52
11 - Server Deployment
Place files that are used in multiple applications in either the EXEC or
program directory.
ClarioNET________________________________________________________
53
Locate the user interface component in the server application you wish
the end user to use to begin the transfer.
Place the code in the Accepted embed (on a button for example). Server to Client File Transfers
The following code places a fully qualified file name in the file QUEUE provided by ClarioNET (you do not have to declare the QUEUE), adds the QUEUE item, declares a variable to store the return value from ClarioNET file transfer procedure, calls the ClarioNET procedure with a parameter of your choice, and then displays a message box with the result:
! Download PDF File FLQ:FileName = c:\cwicweb\public\ClarioNETProductSheet.PDF ADD(FileListQueue) ReturnString = ClarioNET:SendFilesToClient(1) MESSAGE(ReturnString)
________________________________________________________ClarioNET
54
You must add your own code to the ClarioNET:ClientFilesReceivedFromServer procedure to perform any tasks with the newly received files.These files ARE NOT AUTOMATICALLY DELETED from the temporary directory when the client program exits. Server Side Procedure:
ClarioNET:SendFilesToClient(SIGNED Flag)
Flag
This value will be sent through to the ClarioNET:ClientFilesReceivedFromServer procedure on the client. It is a user defined flag that is sent to the client side procedure once all files have been transferred.
Returns: STRING(256) The above procedure sends the files to the client and calls ClarioNET:ClientFilesReceivedFromServer client procedure with the same Flag parameter. Within the client procedure you can check the
ClarioNET________________________________________________________
55
Flag
This value will be the parameter of the server procedure ClarioNET:SendFilesToClient. STRING(255). This value will be the return value from your call to ClarioNET:SendFilesToClient.
Returns
The ClarioNET client will call this function in response to the server program calling ClarioNET:SendFilesToClient. This procedure (which you must write) is responsible for examining the FileListQueue and determing what to do with the files received. FileListQueue will be FREEd immediately after returning from this procedure. You do not need to FREE it yourself.
For transfers from the client side to the server, ClarioNET provides two functions. ClarioNET:GetFilesFromClient is used in the server program to call the client to gather files to be sent. ClarioNET:SendClientFilesToServer is used in the client program to identify the transferred files, and is called immediately after the server procedure. The client must assign a valid path/filename of the files to FLQ:FileName and ADD it to the QUEUE. The following QUEUE is contained in the ClarioNET server DLL. When files are received from the client, FLQ:Filename has the complete file specification on the server where the received files have been placed.
FileListQueue QUEUE,PRE(FLQ),EXTERNAL,DLL(1) Filename STRING(512) END
________________________________________________________ClarioNET
56
The following code is the ClarioNET:SendClientFilesToServer procedure as illustrated in the sample handcoded client program. This procedure is called indirectly...when your server program calls ClarioNET:GetFilesFromClient the message is passed through to the client which in turn calls the ClarioNET:SendClientFilesToServer procedure in the client connect source code portion.
Note: ClarioNET:SendClientFilesToServer must be defined on your client program source code. It is defined as EXTERNAL within the ClarioNET client LIB files and this EXTERNAL must be resolved to create the client EXE.
! ClarioNET:SendClientFilesToServer PROCEDURE(SHORT Flag, STRING ServerFileInfo) ! FileList STRING(5000) Extension STRING(*.*) PathName Pos1 Pos2 CODE FREE(FileListQueue) RetVal# = FILEDIALOG(Select Files To Send, FileList, Extension, 11000b) IF RetVal# = 0 THEN RETURN(no files selected) END CSTRING(FILE:MaxFilePath) SHORT SHORT
ClarioNET________________________________________________________
57
Pos1 = INSTRING(|, FileList, 1, 1) IF Pos1 = 0 FLQ:Filename = CLIP(FileList) ADD(FileListQueue) ELSE PathName = FileList[1 : Pos1-1] & \ LOOP Pos2 = INSTRING(|, FileList, 1, Pos1+1) IF Pos2 = 0 FLQ:Filename = PathName & FileList[Pos1+1 : Pos2 - 1] ADD(FileListQueue) Pos1 = Pos2 ELSE Pos2 = LEN(CLIP(FileList)) FLQ:Filename = PathName & FileList[Pos1+1 : Pos2] ADD(FileListQueue) BREAK END END END ! This code just to displays the queue !LOOP I# = 1 TO RECORDS(FileListQueue) ! GET(FileListQueue, I#) ! MESSAGE(File & i# & : & CLIP(FLQ:Filename)) !END RETURN(ok)
Upon receipt of the files, the server applications QUEUE will contain the fully qualified file specification and the ClarioNET:GetFilesFromClient procedure will return ok. The server program must move or delete the file(s) as necessary and FREE the QUEUE. Note that after a normal session closedown the files on the server will be deleted. Server Side Procedure...
ClarioNET:GetFilesFromClient(SIGNED Flag, STRING Info)
Flag
This value will be sent through to the ClarioNET:SendClientFilesToServer procedure on the client. This string (maximum 1024 chars) will be sent through to the ClarioNET:SendClientFilesToServer procedure on the client.
Info
________________________________________________________ClarioNET
58
Returns: STRING(256)
The above procedure sends the parameters directly to the ClarioNET:SendClientFilesToServer procedure on the client. Within the client procedure you can check the Flag and Info string to control the logic of selecting the files to send to the server. The sample client programs supplied with ClarioNET contain these procedures. Use the search function in the editor to find ClarioNET:SendClientFilesToServer, then insert whatever code you wish within the procedure. Client Side Procedure...
ClarioNET:SendClientFilesToServer(SIGNED Flag, STRING Info)
Flag
This value will be the parameter of the server procedure ClarioNET:GetFilesFromClient. This string will be the parameter of the server procedure ClarioNET:GetFilesFromClient. STRING(255). This value will also be the return value from your call to ClarioNET:GetFilesFromClient.
Info
Returns
The ClarioNET client will call this function in response to the server program calling ClarioNET:GetFilesFromClient. This procedure is responsible for loading the FileListQueue with the fully qualified file specification for the files to be sent to the server. This means Drive:\Directory\Filename. At this point your client program procedure has control and can inspect or move the files, display windows, use FILEDIALOG locally, or call other procedures you have created. FileListQueue will be FREEd immediately after returning from this procedure. You do not need to FREE it yourself.
ClarioNET________________________________________________________
59
in the server application to check these parameters received from the client.
These values will be available for inspection after the call to ClarioNETServer:Init.
________________________________________________________ClarioNET
60
On the client side, locate the ClarioNET:ClientProcedure (by using the search function in the editor on the example client code). This procedure MUST be defined in the client....it is defined as an EXTERNAL procedure in the ClarioNET client library and must be found to finish linking the client EXE. The following code examines the P1 parameter and calls the function:
!ClarioNET:ClientProcedure PROCEDURE(*WINDOW WinPtr, STRING P1, STRING P2, ......, STRING P15) !CODE WinHandle = WinPtr{PROP:HANDLE} IF P1 = PlayMovie IF NOT FileDialog(Select video file,AVIFileName,AVI Files |*.avi,0) RETURN(0) END
ClarioNET________________________________________________________
61
The code above first examines the pointer to the window passed in the procedure and assigns it to a global variable, which the PlayMovie procedure will call later. It then takes care of other client side processing (a file dialog), which has to be done before calling the procedure.
Note: The above PlayMovie procedure is a simple demo of using Clarion to display a file dialog and play a movie, and can be found at the SoftVelocity web site, in the Clarion FAQ section.
The first parameter is a pointer to the currently open client window. Then the additional string parameters, of which only one P1 is necessary, are for passing whatever you wish the server to pass. Pass procedure names on the client for example.
Note: We advise that when placing client procedures in your client programs that you use a single client with multiple client procedures for more than one customer. In other words, if you have, for example, a backup procedure for client As application, it may be inappropriate to leave that code in for client B, even though you dont expect to call it!
________________________________________________________ClarioNET
62
KEY
The following provides BUTTON structures for sample hypertext and email links:
BUTTON(Open the SoftVelocity Home Page...), AT(198,50),USE(?Button25), FLAT, FONT(Arial,9,,FONT:underline,CHARSET:ANSI), MSG(http://www.softvelocity.com), KEY(ClarioNET:WEBLINK), | #ORIG(?Button25) BUTTON(Send E-Mail to SoftVelocity Sales),AT(206,81), USE(?Button26),FLAT, FONT(Arial,9,,FONT:underline,CHARSET:ANSI), MSG(mailto:sales@softvelocity.com), KEY(ClarioNET:WEBLINK), | #ORIG(?Button26) | | | |
| | | |
ClarioNET________________________________________________________
63
Note that the cursor changes work in ClarioNET mode only! If you run the server .EXE file from a desktop, the cursor change will not work.
Window Events/OpenWindow
Note! Standard ABC template generated Splash windows should work fine as is. ClarioNET was designed for them, including the timer used to close the window automatically.
In Legacy template generated code use the following as a guide to implement splash screens:
________________________________________________________ClarioNET
64
ClarioNET________________________________________________________
APPENDIX
65
APPENDIX
Files Installed
The SETUP.EXE installation program will install the following files in the locations shown. The directories noted refer to directories under the main Clarion install directory. \bin clrnt50s.dll Clarion 5.0. Server side DLL that gives the ClarioNET functionality to your server application. Clarion 5.5. Server side DLL that gives the ClarioNET functionality to your server application. Server side DLL that provides data compression, encryption, and encoding for communicating with the ClarioNET client. Independent of Clarion version.
clrnt55s.dll
lscomp.dll
\lib clrnt50s.lib Clarion 5.0. Name resolution library for your server application to resolve the ClarioNET functions in the clrnt50s.dll file. Clarion 5.5. Name resolution library for your server application to resolve the ClarioNET functions in the clrnt55s.dll file. Clarion 5.0 & 5.5. Name resolution library for your server application to resolve the ClarioNET functions. We have provided this for Third Party Developer usage. As 3rd parties add ClarioNET code permanently into their compiled DLLs they will ship this LIB file to resolve external names when ClarioNET is not licensed by the final end user. Clarion 5.0. Client side static link library that contains all communication and functional code to communicate to the server based ClarioNET enhanced application.
clrnt55s.lib
clntstub.lib
clrnt50c.lib
________________________________________________________ClarioNET
66
clrnt55c.lib
APPENDIX
Clarion 5.5. Client side static link library that contains all communication and functional code to communicate to the server based ClarioNET enhanced application.
lsdecomp.lib Clarion 5.x. Client side static link library that contains data decompression and decoding procedures. prntprvw.lib Clarion 5.x. Client side static link library that contains the print preview system. This is the compiled prntprvw.prj project that is also supplied with this package. Please note: this print preview source code is provided for your convenience so you have print preview automatically in your client. You can replace this entire source code as needed \libsrc clarionet.clw Module definitions to be included in the server based applications global MAP. clarionet.inc Class and type definitions for Server module. client.clw Module definitions to be included in the client side program that will call the ClarioNET client. Class definitions and equates for client module
client.inc \template
clarionet.tpl Template for web enabling your Clarion application using the ABC -or- legacy template. This template also includes provisions for 3rd party template generated code and will change as 3rd party support is improved or we receive information from them. \examples\clarionet\ (This directory contains subdirectories that contain example code.)
ClarioNET________________________________________________________
APPENDIX
\prntprvw
67
prntprvw.prj & prntprvw.clw This is the source code for the ClarioNET client print preview procedures supplied as prntprvw.lib. You can modify the print preview system to suit your needs \connect connect50.prj, connect55.prj, and connect.clw Client side launching program shell that can be customized/replaced to provide your own specific startup interface to the ClarioNET client. Use the proper project file to match your Clarion version. connect55.app Client side launching application for Clarion 5.5. \Abc abc.app & example.dct Simple example application using an ABC template generated program. \invoice web examples from the softvelocity.com site. \legacy legacy.app & example.dct Simple example application using an Legacy Clarion generated program. \handcode handcode.prj& handcode.clw Simple example application in a single handcoded .CLW. file. \doc\ClarioNET clarionet.pdf Adobe Acrobat documentation for ClarioNET
________________________________________________________ClarioNET
68
readme.txt
APPENDIX
Contains the latest information on the most recent installation of the ClarioNET development system. Please read this information as it contains information not covered in this manual
This statement allows ClarioNET to generate its own filenames for the WMF files generated by the report. All subsequent calls by internal Clarion routines to get WMF names are routed to this function. ClarioNET erases these files automatically after they are sent to the client.
ClarioNET:StartReport
This method is called near the starting point of the report. It causes a Generating Report window to appear on the client. The client then waits for the server to start transmission of the WMF report files.
ClarioNET:UpdateReportProgress(BYTE Pct)
This method creates a progress bar on the Generating Report window that is being displayed on the client. The progress bar is displayed on the first call and the percentage complete (Pct) is updated on each subsequent call. The progress bar percentage on the client is only sent at 7% increments to minimize bandwidth (regardless of how many times you call this procedure). Pct represents the percentage of report completion. This value ranges from 0 to 100.
Note! Only use this for long reporting processes. Because of the server->client->server communication it can cause small reports to print much slower.
ClarioNET________________________________________________________
APPENDIX
ClarioNET:EndReport
69
This procedure is called after the report is prepared, ClarioNET has been notified of the WMF file names and the report properties have been set. It is preferable that this should be the LAST procedure called before exiting the REPORT procedure and returning to the calling procedure. When this procedure is called the following tasks take place: 1. 2. 3. The client is notified that it will be receiving the report WMF files in compressed form. The client closes the Generating Report status window and opens the Downloading Report status window. The server side prepares and sends a compressed file containing al the WMF files to the client and waits until the client side printing process is finished. The client side receives the compressed file, uncompresses it, places the WMF files into the client temporary directory, and calls the ReportPreview procedure.
The server program will be waiting for the client to finish printing before program execution after ClarioNET:EndReport continues. This means that while the user is reviewing the report in the ReportPreview procedure and while the report is printing on the client (or being sent to a spooler) the server program is waiting. This is necessary because the server program could execute other code that sends commands to the client and it would not be listeningit still would be managing the printing process.
4.
Note:
ClarioNET:GetPrintFileName(SIGNED PageNo)
This procedure is added to the main application CLW file and is used as a call point for the ClarioNET:GeneratePrintFileName procedure from anywhere in your application.
ClarioNET:AddMetafileName(STRING Filename)
This procedures assigns the WMF filenames to an internal ClarioNET QUEUE for use by the EndReport procedure.
ClarioNET:SetReportProperties(REPORT)
________________________________________________________ClarioNET
70
APPENDIX
This procedure sends the report structure, which must not be closed, to ClarioNET so the properties can be scanned and sent to the client. This includes landscape, paper size, measurement type, etc.
ClarioNETServer:Init( <STRING> LicensePassword, LONG ServerNoActivityShutDown, LONG ClientNoActivityShutDown, USHORT DisplayServerScreen STRING BlowfishFlag)
ClarioNET________________________________________________________
APPENDIX
71
LicensePassword Specifies the License Password assigned to the licensed ClarioNET developer and turns off Demonstration mode. ServerNoActivityTimeOut Sets the maximum number of minutes between activity received from client to keep the server based application running. If no client events are received for more than ServerNoActivityTimeOut minutes ClarioNET will issue a HALT(). This is the safeguard check to stop a running application that has lost contact with the client.
Note: Server time out needs to be greater than the Client time out. If not it will be internally set to one minute longer than the Client time out
ClientNoActivityTimeOut Sets the maximum number of minutes the client will wait for end-user keyboard or mouse interaction before signaling the server to close the application, and then the client itself will close. When this value is negative it signals continuous connection by the client. In this case the client simply contacts the server at this time interval to let the server know the session should not be dropped. DisplayServerScreen When the EXE broker is used, setting this value non-zero provides display of the server application screen on the server when being run with ClarioNET. BlowFishFlag Set to 0 to disable 56 bit blowfish encryption Any non-zero value turns encryption on. This function initializes the ClarioNET server component and must be the first ClarioNET function to be called. We recommend that it is the first procedure called in your program, if you are hand coding.
________________________________________________________ClarioNET
72
APPENDIX
ClarioNETServer:Init performs all the initialization of the ClarioNET server side system. If certain command line parameters are not found then the program is assumed to be launched locally and all further ClarioNET calls are disabled. This function returns a zero (0) in all cases except when a Query was sent from a client program using the ClarioNET:QueryServerProgram procedure call. In this case you must respond to the query with the ClarioNETServer:SendClientQueryResponse procedure.
ClarioNETServer:Kill
This disconnects the application from the Clarion Application Broker, disposes of created data, and performs final housecleaning. This must be called to deallocate memory when ClarioNETServer:INIT was called and a successful ClarioNET session was started.
ClarioNETServer:Active
This is used to determine if the ClarioNET server system is active. Returns 1 for active, 0 for inactive.
ClarioNET________________________________________________________
APPENDIX
On your server program, the ClarioNET template adds the following code:
73
When ClarioNETServer:Init is called the procedure examines the way in which the program was launched. If it was launched with a Query from a client it returns non-zero. In this case your server code must respond back to the client using the ClarioNET:SendClientQueryResponse procedure. In addition the program must immediately exit. In the example source code shown above, the template automatically adds the ClarioNET:HandleClientQuery call, prototype, and procedure to your application source code. The ClarioNET:HandleClientQuery procedure is a placeholder where YOU need to add code to inspect the query string sent from the client which is contained in ClarioNET:Global.ClientQueryRequest. When finished you can return a string from this procedure to return to the client.
Window Management
The Window Management procedures provide initialization, maintenance, and closing of the client window. These methods must be used in each procedure that provides WINDOW display processing.
Note! These procedures work as a coordinated set and SHOULD NOT be called thinking that you can force some manner of functionality.
CW
This function is called at the beginning of each procedure and is used by the ClarioNET system to detect if the current procedure was called from EVENT:OpenWindow in the calling procedure. This is important to determine how to continue when returning to the calling procedure.
________________________________________________________ClarioNET
74
This must be called after OPENing the window and before ClarioNET:InitWindow.
ClarioNET:InitWindow( ClarioNETWindowClass CW, *Window ThisWindow, SHORT WindowType, <LONG DisplayTime> )
APPENDIX
CW
ThisWindow The label of the WINDOW structure that will be used for the ACCEPT loop. Type A window type number; 1 =WINDOW, 3 = APPLICATION
DisplayTime The display time in seconds for the window. A non-zero number indicates the window on the client will close automatically. This results in an EVENT:CloseWindow being posted to the ACCEPT loop. This is used primarily for Splash windows that need to close automatically. This function registers the window with the ClarioNET system. It should be called after the window is OPEN()ed and before the ACCEPT loop.
ClarioNET:OpenWindow( ClarioNETWindowClass CW)
CW
This function is called during the EVENT:OpenWindow event. It causes some housekeeping and status monitoring to be performed.
ClarioNET:TakeEvent( ClarioNETWindowClass CW)
CW
An instance of the ClarioNETWindowClass for this procedure. A non-zero return value indicates the Window should be closed by POST(Event:CloseWIndow).
Returns
ClarioNET________________________________________________________
APPENDIX
75
ClarioNET:TakeEvent is the most important ClarioNET function that controls the Client. It must be called as the first item in the ACCEPT loop. It performs the following actions: 1. On return from this function, if there has been client activity, the affected controls USE variable is updated, keycode PRESSed, and the EVENT Posted to the ACCEPT loop. Your code can continue as usual without knowing that the data entry and/or event had not occurred on the local machine. After your code has performed all its tasks and the window has been modified as needed and is ready for display, this procedure will scan the window and send the changes to the client.
2.
CW
This procedure MUST BE CALLED on EVENT:CloseWindow in ALL ACCEPT LOOPS. This procedure does not forcefully close the client window; it simply sets internal variables to prepare for the ClarioNET:KillWindow call that contacts the client as needed.
ClarioNET:KillWindow( ClarioNETWindowClass CW)
CW
This function is used to finish up window processing after the CLOSE(Window) call is executed.
Note! This procedure call should be the last code to execute before returning from the procedure.
CW
An instance of the ClarioNETWindowClass needs to be defined in the DATA area for the WINDOW being used. An instance of the BROWSE class that has been instantiated in the module to handle all browse activities for the LIST control in the window.
BRW
________________________________________________________ClarioNET
76
This procedure is only used in ABC template generated programs to support toolbars.
APPENDIX
Miscellaneous Procedures
The following procedures are also available for use by programmers:
ClarioNET:ClientBeep(SHORT Sound)
Sound
This procedure is used to set the extent to which ClarioNET scans the window and its controls for changes at runtime. See the appendices for further details.
ClarioNET:GetTempDir, STRING
Returns the full drive and directory specification for the temporary directory being used for the unique server program execution instance.
Note: If you place files here you need to REMOVE them when exiting the program.
ClarioNET:GetINI( Section1, Entry, | Default |, | Filename |) ClarioNET:PutINI( Section1, Entry, | Default |, | Filename |)
ClarioNET allows setting and retrieving of INI file values on the client or server. There are five procedure calls that you can use (two of them being the standard GETINI and PUTINI Clarion procedures). These two procedures always reference the client INI files. The parameters and return values for these functions are identical to the Clarion GETINI and PUTINI procedure. These two methods should only be called: 1) 2) After the call to ClarioNETServer:Init and before ClarioNET:OpenWindowInit. AFTER the main window has closed.
ClarioNET________________________________________________________
APPENDIX
3)
77
Any other time when the server is responding to an event sent from the client.
The Client must be waiting for a response from the server when you call these procedures.
ClarioNET:INIMode( SHORT Mode), SHORT
Mode
Specifies the mode used in the standard Clarion GetINI and PutINI functions. A 1 directs all standard Clarion GETINI and PUTINI calls to the remote client computer. A 0 directs all GETINI and PUTINI calls to the server.
This function returns the last INIMode used. ClarioNET redfines a number of standard Clarion procedures to its own internal ones. The standard Clarion GETINI and PUTINI procedures have been redefined to trap all INI file activity and the redirect it to either the server or client computer.
Note: Enabling all GETINI and PUTINI to be directed to the client may have performance penalties. In a web deployment each call requires a roundtrip communication which may lessen the perceived speed of your client. CLASS,TYPE CSTRING(512) CSTRING(512) LONG END RunCallClass,EXTERNAL,DLL(1)
RunCall
RunCall is defined in the ClarioNET server extension DLL. This class allows you to specify an EXE program file to run at Frequency second intervals during the execution of the server application. The Clarion RUN command is used with NoWaitFlag. The parameter is sent as the command line parameter.
________________________________________________________ClarioNET
78
PushWindow : Forced Client Window Display
APPENDIX
The PushWindow set of procedures give you the ability to forcefully display a window on the client, update the displayed information, and close it down. You may only call these procedures when the server program has been notified of a client action (button press, menu selection, entry change, etc).
Note: The Push Window system is a separate code area in the client and will not respond to ANY control messages from the server EXCEPT ClarioNET:UpdatePushWindow and ClarioNET:ClosePushWindow. Therefore, you must NOT call any procedures, open windows, read INI files, or anything elseor the system will hang.
This PushWindow system was designed for you to display continuously changing status screens when a long process is being performed. The window that you define is only opened briefly.... long enough to read the layout and get the USE variable contents. You cannot write to the Push Window screen because it is not open. If you OPEN it yourself the ClarioNET code will try opening it again and the program will GPF. Simply define a window and specify static USE variables for any controls that will be changed as part of your updating process. These procedures take a Clarion WINDOW structure as the parameter. Any data that will change on this window MUST be assigned to a static USE variable. The PushWindow procedures work as follows:
ClarioNET________________________________________________________
APPENDIX
Using this design never leaves YourWindow open but provides a display framework for quick scan and send. No user interaction can occur on the client. The window is simply displayed and does not respond as the client waits for the next instruction from the server.
Note:
79
Do not call any other ClarioNET procedures between the OPEN and CLOSE calls except the PushWindows UPDATE procedure.
Window A Clarion WINDOW structure. This procedure displays the Window on the client.
ClarioNET:UpdatePushWindow(Window)
Window A Clarion WINDOW structure. This procedure updates Window on the client with and changes to the Window control USE variables.
ClarioNET:ClosePushWindow(Window)
Window A Clarion WINDOW structure. This procedure updates Window on the client with and changes to the Window control USE variables.
PushWindow Example....
The following ROUTINE will cause a small window to appear on the client and the progress bar to advance in 5% steps with each LOOP cycle. When the LOOP is complete the window will be cleared on the client and the client will again await further instructions.
SomeProcess ROUTINE DATA Progress1 LONG window WINDOW,AT(,,216,38),GRAY,DOUBLE
STRING(Process Completion Status....),AT(11,8) PROGRESS,USE(Progress1),AT(17,22,190,5),RANGE(0,100) END
CODE
________________________________________________________ClarioNET
80
Progress1 = 0 ClarioNET:OpenPushWindow(window) LOOP I# = 1 TO 100 BY 5 -Process LogicProgress1 = I# ClarioNET:UpdatePushWindow(window) END ClarioNET:ClosePushWindow(window)
APPENDIX
A CLASS named CLRNT_C of type ClarioNETSession is defined in the clrnt50c.lib and clrnt55c.lib files. You must reference this class in the main program portion of your client program as: CLRNT_C ClarioNETSession, EXTERNAL
This class provides the properties (variables) that you define to connect to the server application and is defined in CLIENT.INC.
ClarioNetSession CLASS,TYPE HostProgramName CSTRING(128) HostProgramDirectory CSTRING(128) ServerName CSTRING(128) ServerPort UNSIGNED(80) UserAgent CSTRING(50) UseProxy SHORT UsePreconfig SHORT ProxyServer CSTRING(256) ProxyUserName CSTRING(128) ProxyPassword CSTRING(128) GraphicDownloadFlag UNSIGNED ConnectionTimeout UNSIGNED CharSet SHORT ProgressUpdateFrequency SHORT PingFlag SHORT LaunchingWindow &WINDOW UseLaunchingWindow SHORT ClientTempDirectory CSTRING(512) Param1 STRING(200) Param2 STRING(200)
ClarioNET________________________________________________________
APPENDIX
Param3 Param4 Param5 HostSessionID ServerString1 ServerString2 ServerString3 EventSelectedAllowed END STRING(200) STRING(200) STRING(200) CSTRING(128) STRING(128) STRING(128) STRING(128) SHORT
81
Class Properties
CLRNT_C .HostProgramName CSTRING(128) The HostProgramName property is a CSTRING(128) that holds the program name to execute on the server. For example, INVOICE.EXE. Be sure to add the EXE extension. CLRNT_C .HostProgramDirectory CSTRING(128) Holds the virtual directory path on the server where the program is located. For ISAPI broker this is typically the cws/cwlaunch.dll/yourappdir or cws/ c5launch.dll/yourappdir. For EXE broker this is exec/yourappdir. CLRNT_C .ServerName CSTRING(128) This is the proper Internet address of the application server. The fully qualified name can be either an IP address or a domain name, i.e.www.softvelocity.com or 216.237.145.63.
Note: When testing with the EXE broker on the same machine you might be using localhost as the server name. Be sure to test this with a browser to make sure the Clarion Application Broker can be reached.
CLRNT_C .ServerPort UNSIGNED(80) Holds the server port. Default is port 80. Next most common HTTP port is 8080. CLRNT_C .UserAgent CSTRING(50) This identifies the client to the server and is set to Clarionet when not assigned a string in the client startup program.
________________________________________________________ClarioNET
82
CLRNT_C .UseProxy SHORT Set this to 1 to enable use of data that specifies a proxy server. CLRNT_C .UsePreconfig SHORT
APPENDIX
Instructs client HTTP communications system to retrieve proxy server settings from the Windows registry. Internally this uses INTERNET_OPEN_TYPE_PRECONFIG as the dwAccessType parameter for a call to wininet function InternetOpen. CLRNT_C .ProxyServer CSTRING(256) Allows you to specify the proxy server. Setting CLRNT_C.UsePreconfig to 1 will ignore this value. CLRNT_C .ProxyUserName CSTRING(128) Holds the user name for client proxy authentication. CLRNT_C .ProxyPassword CSTRING(128) Holds the password for client proxy authentication. CLRNT_C .GraphicDownloadFlag UNSIGNED In a thin client design you probably want as few files on the client as possible, and those files do not need to be persistent between client working sessions. In most programs there are many little graphic items used as icons and images in the form of ICO, GIF, JPG, WMF, and other format files. ClarioNET transfers these files, as specified in your server program, to the client during the worksession. However, you may wish to cache these files so that they only need to be downloaded once or download them every time they occur in a new window, and you need to decide whether they should be erased after every session or be left on the hard disk to be used next time. GraphicDownloadFlag allows you specify which will be the best for your application. We use a two-digit number to specify the method. The lower digit instructs when to get the file from the server, and the upper digit is a flag that instructs ClarioNET to erase the files when the client session has finished.
ClarioNET________________________________________________________
APPENDIX
Flag values that do not erase after the session: 1 Always download the file with every new window or window update.
83
2 Download the file once each session, even if it already exists on the disk, and use it for all future occurrences of the same file name. 3 Download the file regardless if it exists and use it for all future occurrences of the same file name. Adding ten (10) to these values causes the download files to be erased after the client session ends. CLRNT_C .ConnectionTimeout UNSIGNED Specifies the time in seconds that the HTTP function waits for a response from the server before returning and posting a No response from server message. We advise setting this to a high value, perhaps 30, until such a time as your typical server response time is known. 10 seconds would be typical. CLRNT_C .CharSet SHORT Specifies the default character set to use for the Client when none is specified from the server. This value is a Clarion CHARSET: equate from the EQUATES.CLW file. Typically CHARSET:ANSI would be used , but if in doubt, do not assign any value. If none specified the value is zero, which equates to CHARSET:ANSI. The availability of this setting can help non-English clients display the characters correctly. CLRNT_C .ProgressUpdateFrequency SHORT When a PROGRESS control is placed on a window this indicates that the server program might be performing processing that will update the window contents. When a PROGRESS control is used on a window the client will automatically contact the server every ProgressUpdateFrequency/100 seconds and request a refresh of its status. Depending on your program, the window will be updated, closed, or a newly opened window will appear. It is recommended to set this value to double the average client/server/client communication time. The default value is three
________________________________________________________ClarioNET
84
seconds, however, we recommend smaller time intervals for faster TCP/IP connections. CLRNT_C .PingFlag SHORT
APPENDIX
If this flag is set to 1 before the client procedure call ClarioNET:StartServerProgram, the server programs simply returns the date and time on the server and version of the ClarioNET server DLL. This can be used to test the existence of the program in a quiet way. CLRNT_C .LaunchingWindow &WINDOW CLRNT_C .UseLaunchingWindow SHORT When the two procedures to launch the server program are called there is usually a wait time where the client window will disappear. These two properties allow you to design a window that will be displayed during this period. Although the display may be rather brief, if the Internet connection is slow this will fill the time with at least some indication of activity. CLRNT_C.LaunchingWindow should be assigned a WINDOW name using the &= operator. CLRNT_C.UseLaunchingWindow should be set to 1 to instruct ClarioNET to actually display the window. CLRNT_C .ClientTempDirectory CSTRING(FILE:MaxFilepath) A temporary directory where ClarioNET can store swap files, icons, images, and print files. If unassigned ClarioNET will get the Windows temporary path from the Windows API. CLRNT_C .Param1 CSTRING(200) CLRNT_C .Param2 CSTRING(200) CLRNT_C .Param3 CSTRING(200) CLRNT_C .Param4 CSTRING(200) CLRNT_C .Param5 CSTRING(200) These are command line parameters that you can specify, which will be passed to the server based application when the ClarioNET:StartServer procedure is called.
ClarioNET________________________________________________________
APPENDIX
Note:
85
The server receives all five parameters. If unassigned they will be sent as zero length strings.
The Following values are available AFTER calling ClarioNET:StartServerProgram: CLRNT_C .HostSessionID CSTRING(128) This is the session ID of the instance of the server program. It is used by ClarioNET to identify which session of your server program is linked to the current client session.
Note : HostSessionID is assigned by the server-based program.
Three strings received from the server when the application is launched, that is after ClarioNET:StartServer returns.
Note: ServerString1 and ServerString3 will be blank when running in demonstration mode.
CLRNT_C .EventSelectedAllowed SHORT Normally EVENT:Selected is not sent from the client to the server. The main reason is that EVENT:Selected is usually always followed by EVENT:Accepted and sending both creates two Client/Server/Client communications. This would double the perceived response time for each change. If EVENT:Selected is not sent then there is no lag time as users often click controls for no real reason. However, there will be times when your program code needs to trigger on EVENT:Selected. There are two ways you can change this property: 1. 2. At client startup set this property accordingly. Use ClarioNET:CallClientProcedure with a flag set so that your client side logic is triggered to set this value.
________________________________________________________ClarioNET
86
ClarioNET Client Startup Procedures
ClarioNET:StartServerProgram
APPENDIX
Only two procedures are needed by the ClarioNET client library to implement the entire ClarioNET client system. ClarioNET:StartServerProgram is the first procedure, takes no parameters, and returns 0 if completed without problems. A non-zero return value indicates a problem occurred. If ClarioNET:StartServerProgram returns zero (0) then the server program has been started and the values for ClarioNET:Global. ServerString1, ClarioNET:Global. ServerString2, and ClarioNET:Global.ServerString3 have been received from the server. The next step is to hide your launching program screen and hand control over to the ClarioNET client system. After this is done your client program will have no interaction with the system (except if the client side file transfer procedures of Call Client procedure functinalities are used). In our demo programs we simply use HIDE(0) to hide the current screen. Do not call this procedure with START(). Returns SHORT. The following EQUATES are specified in the client.inc file can be used to test the return value from ClarioNET:StartSession:
No errors
Could not create temporary file Could not initialize Http System
Could not start session, server problem CLRNT_ERR_DECOMP_INIT_FAILURE Could not initialize decompression library CLRNT_ERR_NO_HOSTNAME No HostProgramName was specified CLRNT_ERR_NO_HOSTDIR No HostProgramDirectory was specified CLRNT_ERR_NO_SERVERMAME No ServerName was specified CLRNT_ERR_VERSION_MISMATCH Client/Server version mismatch
ClarioNET________________________________________________________
APPENDIX
ClarioNET:StartClientSession
87
This procedure begins the remote client session and will handle the entire communication and user interface display process. It will not return until you have exited the program or a Client Time Out forced automatic closing of the application. This should only be called after a successful return from ClarioNET:StartServerProgram. Returns SHORT. The following can be returned from ClarioNET:StartClientSession:
CLRNT_ERR_NONE CLRNT_ERR_INACTIVE
No errors Client was inactive and closed automatically CLRNT_ERR_HTTP_TIMEOUT HTTP System timed out CLRNT_ERR_PING CLIENT_C.PingFlag is set
ClarioNET:ClientProcedure(*WINDOW WinPtr, STRING P1, <STRING P2>,.....,<STRING P15>) WinPtr P1 - P15 Pointer to the currently OPEN window on the client. These are the same parameters passed to ClarioNET:CallClientProcedure.
ClarioNET:ClientProcedure is a client function that is called from the server using ClarioNET:CallClientProcedure. The parameters are passed directly to this procedure. Calling this procedure from the server enables you to access whatever functionality you desire to add on the client side. WinPtr is provided so you can access all the details of the window currently being used. This means you can do API calls.....hence, virtually any functionality can be added. Our intent was to use parameter P1 as a CASE parameter to decide what should be done.You can return up to 100 characters.
Note: If the server calls ClarioNET:CallClientProcedure then the ClarioNET:ClientProcedure (see below) will be called. The server will be waiting for a response from that procedure before servers normal ACCEPT processing continues.
This procedure must be defined in your client program. It is defined as an EXTERNAL procedure in the ClarioNET client program library file.
________________________________________________________ClarioNET
88
Returns
APPENDIX
STRING Returns string os sent to the server and is the return value from ClarioNET:CallClientProcedure.
ClarioNET:QueryServerProgram(STRING),STRING,PROC This method call allows you to send a message to the server program and have specific tasks performed. Use this function only before starting a client session. This is useful, for example, to get a list of the available programs the client can connect to. For example:
DelimitedProgramList STRING(200) DelimitedProgramList = ClarioNET:QueryServerProgram(getprogramlist)
On the server the ClarioNETServer:Init procedure returns a one (1) when a query has been received. This allows you to call specific procedures in the server program to respond to the query by examining the passed string parameter. In the case of this example you could read a database of the ClarioNET server programs available and send back that information as a delimited string such as:
INVOICE.EXE:PAYABLES.EXE:RECEIVABLES.EXE
The ClarioNET:QueryServerProgram procedure would then return this string to the DelimitedProgramList STRING and from there your client program could parse the information (looking for a : ), assign it to a drop combo, and let the user select which program to launch on the server.
ClarioNET________________________________________________________
APPENDIX
89
When the server based program has made changes to the window
or its controls After the server based program receives the changes from the client it continues to execute your program code just as if a local user had made the change. The program code does whatever it is designed to do and updates the screen control USE variables or makes changes to icons, images, or the properties of the window or its controls. After screen updating is finished and the internal Clarion ACCEPT processing sees that no additional events are waiting to be processed (i.e. the window is ready for redisplay), ClarioNET sends just the changes to the client.
________________________________________________________ClarioNET
90
WINDOW Complexity Limitations
APPENDIX
Although ClarioNET has enormous capacity to replicate a Clarion user interface there are some limitations that apply. Within the items below the word total means that for the sum of all the type of controls listed the quantity cant exceed the maximum given. However, this is per window and so you can see that the windows can be tremendously complex before the limits are exceeded.
Maximum of 40 total LIST and COMBO controls per window. Maximum of 200 fields in a LIST QUEUE. Maximum of 1000 total ENTRY, SPIN, CHECK, SHEET,
OPTION,PROGRESS, ITEM, LIST and COMBO controls per WINDOW.
Maximum of 25 TEXT controls per window. Maximum of 40 ICONs within each LIST control. Maximum of 25 ALRT keys per window and per control. No
aggregate limit.
Supported
. . . Y . . . Y
Modify at Runtime
. . . . N . . . . Y . . . . N . . . . N . . . . Y . . . . Y . . . . N . . . . N . . . . N . . . . N . . . . N . . . . N . . . . Y . . . . Y . . . . Y . . . . Y . . . . Y . . . . Y . . . . N . . . . Y . . . . Y . . . . N . . . . Y
. . . . N . . . . N . . . . N . . . . N . . . . N . . . . N . . . . Y . . . . N . . . . Y . . . . N . . . . Y . . . . N . . . . N . . . . N . . . . N . . . . N . . . . Y . . . . Y . . . . N . . . . N . . . . N
MDI . . . . . . . N MinHeight . . . Y MinWidth Msg . . . Y Modal . . . . . . N . . . . . . Y NoFrame . . . . N NoTips . . . . . Y Palette . . . . . Y Pixels . . . . . Y Resize . . . . . Y SelectedColor . Y SnapHeight SnapWidth Status** System . . Y . . Y
Centered . . . Y Color . . . . . Y Cursor . . . . N Dock . . . . . N Docked . . . N Double . . . . N DropId . . . . N FillColor . . . Y Font . . . . . Y . . Y . . Y . . Y Fontcharset . Y Fontcolor Fontname Fontstyle Gray Height
SelectedFillColor Y . . . . N
Fontsize . . . Y . . . . . Y . . . . Y
. . . .
Y . . . . Y
. . . . Y
Vscroll . . . . . Y
ClarioNET________________________________________________________
APPENDIX
Icon Imm Max . . . . . Y . . . . . Y . . . . . Y . . . . Y . . . . N . . . . N . . . . Y . . . . N . . . . N VScrollPos Wallpaper Width . . Y . . . Y . . . . Y . . . . Y . . . . Y . . . . Y . . . . Y Iconize . . . . Y Mask . . . . . Y MaxHeight . . Y
91
. . . . . Y
Xpos . . . . . . Y Ypos . . . . . . Y
*First 25 AlertKeys returned by {PROP:Alrt, x}, except MouseLeft **Zones 1 to 4 only Note: If a WINDOW or APPLICATION has a RESIZE and NOFRAME and there is no text then it will appear without a title bar
The following events in the client side ClarioNET program are sent to the server.
EVENT:Accepted EVENT:AlertKey EVENT:NewSelection EVENT:ScrollUp EVENT:ScrollDown EVENT:PageUp EVENT:PageDown EVENT:ScrollTop EVENT:ScrollBottom EVENT:Locate EVENT:ScrollDrag EVENT:MouseIn EVENT:MouseOut EVENT:Expanded EVENT:Contracted EVENT:Expanding EVENT:Contracting EVENT:Sized EVENT:Selected ( only when flag in client is set)
BOX
Attributes Supported Modify at Runtime At . . . . . . . Y Color . . . . . Y Disable . . . . Y . . . . 2 . . . . 2 . . . . 1,2 Hide . . . . . . Y Attributes Supported Modify at Runtime . . . . 1,2 . . . . 2 . . . . 2
LineWidth . . . Y Round . . . . . Y
________________________________________________________ClarioNET
92
Fill . . . . . . Y . . . . 2 . . . . 2 Scroll . . . . . Y . . . . 2 Full . . . . . . Y
APPENDIX
The BOX control does not generate any events, therefore no update to the server will occur.
BUTTON
Attributes Supported Modify at Runtime Alrt* . . . . . Y . . . . N . . . . 2 . . . . N . . . . 1,2 . . . . N . . . . 1,2 . . . . N . . . . N . . . . 2 . . . . 2 . . . . 1,2 . . . . Y . . . . 2 Imm . . . . . . N Attributes Supported Modify at Runtime . . . . N . . . . N . . . . N . . . . 2 . . . . N . . . . N . . . . N . . . . 2 . . . . N . . . . N . . . . 2 . . . . 2
At . . . . . . . Y Cursor . . . . N Default . . . . Y Delay . . . . . N Disable . . . . Y DropId . . . . N Flat . . . . . . Y Font Hide Icon . . . . . Y . . . . . Y . . . . . Y Full . . . . . . Y Hlp . . . . . . Y
Std . . . . . . . Y ToolTip
The BUTTON control generates the following events which cause updates to the control on the server:
EVENT:Accepted EVENT:AlertKey
Also see How to Place a Hyperlink in the Server Program for additional BUTTON capabilities.
CHECK
Attributes Supported Modify at Runtime Alrt* . . . . . Y . . . . N . . . . 2 . . . . 2 . . . . 1,2 . . . . N . . . . 1,2 . . . . N . . . . 2 . . . . 2 . . . . 2 Icon . . . . . . Y . . . N Attributes Supported Modify at Runtime . . . . 2 . . . . N . . . . N . . . . N . . . . 2 . . . . N . . . . 2 . . . . 2 . . . . 2 . . . . 2
InToolBar
ToolTip
ClarioNET________________________________________________________
APPENDIX
Full . . . . . . Y Hide . . . . . Y Hlp . . . . . . Y . . . . 2 . . . . 1 . . . . Y Trn . . . . . . . Y TrueValue . . . Y Value . . . . . . Y . . . . 2 . . . . 2 . . . . N
93
The CHECK control generates the following events which triggers sending update information to the server:
EVENT:Accepted EVENT:AlertKey EVENT:Selected, (client property EventSelectedAllowed is set to 1)
The true and false values of the CHECK, KEYCODE, and EVENT are also sent to the server.
COMBO
COMBO controls have the following constraints: 1. 2. 3. 4. 5. 5. Anything that can be specified as a FORMAT that controls the COMBO appearance is supported. Up to 200 QUEUE fields are recognized. This includes the invisible extra queue fields used for formatting. Scroll bars and VCRs jump to a record on a keystroke and double mouse click. Trees, including the expand and contract icons are supported. Up to 30 ICONs in the list tree is supported. Up to 40 total LIST and COMBO controls are supported per WINDOW.
Supported Modify at Runtime Alrt* . . . . . Y . . . . N . . . . N . . . . 2 . . . . N . . . . 2 . . . . 2 . . . . N . . . . 2 . . . . N . . . . 2 IconList Imm . . . . Y Attributes Supported Modify at Runtime . . . . Y . . . . N . . . . N . . . . 2 . . . . 2 . . . . 2 . . . . N . . . . 2 . . . . 2 . . . . N
Attributes
. . . . . . Y
Cursor . . . . N
Ovr . . . . . . . Y
________________________________________________________ClarioNET
94
Disable . . . . Y DragId Drop Font . . . . N . . . . . Y . . . . . Y . . . . 1 . . . . N . . . . 2 . . . . N . . . . 2 . . . . 2 . . . . N . . . . 2 . . . . 2 . . . . 1 . . . . Y . . . . 1 . . . . N ReadOnly Req Scroll Skip Text . . . Y . . . . N . . . . N . . . . 2 . . . . N . . . . 2 . . . . N . . . . N . . . . 2 . . . . 2 . . . . N . . . . 2 . . . . 1 . . . . 1 . . . . . . N . . . . . Y . . . . . . Y . . . . . . Y . . . . Y
APPENDIX
Right . . . . . . Y
Style . . . . . . N ToolTip
Hscroll . . . . Y HVScroll . . . N
The COMBO control generates the following events which triggers sending update information to the server:
EVENT:AlertKey EVENT:Contracted EVENT:Expanded
The values of PROPLIST:MouseDownRow and PROPLIST:MouseDownZoneare set for the next property inspection.
EVENT:Accepted EVENT:Expanding EVENT:PageDown EVENT:PreAlertKey EVENT:ScrollDown EVENT:ScrollUp EVENT:Contracting EVENT:Locate EVENT:PageUp EVENT:ScrollBottom EVENT:ScrollTop
ClarioNET________________________________________________________
APPENDIX
ELLIPSE
Attributes Supported Modify at Runtime At . . . . . . . Y Color . . . . . Y Disable . . . . Y Fill . . . . . . Y . . . . 2 . . . . 2 . . . . 1,2 . . . . 2 Full . . . . . . . Y Hide Scroll . . . . . . Y . . . . . Y LineWidth . . . Y Attributes Supported
95
Modify at Runtime
. . . . 2 . . . . 1,2 . . . . 2 . . . . 2
The ELLIPSE control does not generate any events, therefore no update to the server will occur.
ENTRY
Attributes Supported Modify at Runtime Attributes Supported Modify at Runtime
Alrt*
. . . . . Y
InToolbar
. . . N
. . . . N . . . . N . . . . 2 . . . . 2 . . . . 2 . . . . 2 . . . . 2 . . . . 2 . . . . N . . . . 2 . . . . N . . . . 2 . . . . N . . . . 2 . . . . 2 . . . . 2
At . . . . . . . Y Cap . . . . . . Y Center . . . . Y . Y Color . . . . . Y CONTENTS Decimal Cursor . . . . N . . . Y Disable . . . . Y DropId . . . . N Font Hide Imm Ins . . . . . Y . . . . . Y . . . . . Y . . . . . . Y Full . . . . . . Y Hlp . . . . . . Y
Key . . . . . . . Y Left . . . . . . . Y Mask . . . . . . Y Msg . . . . . . Y . . . Y . . . Y Ovr . . . . . . . Y Password ReadOnly Req Scroll Skip Text
. . . . . . Y . . . . . Y . . . . . . Y . . . . . . Y . . . . Y
Right . . . . . . Y
ToolTip
Trn . . . . . . . Y Upr . . . . . . . Y
The ENTRY control generates the following events which triggers sending update information to the server:
EVENT:Accepted EVENT:AlertKey EVENT:Selected, (client property EventSelectedAllowed is set to 1) EVENT:NewSelection, (only if IMM is set)
After one of these events the CONTENTS of the control, the EVENT, and KEYCODE are sent to the server.
________________________________________________________ClarioNET
96
APPENDIX
For all EVENTs, the contents of the server ENTRY controls USE variable is changed, the EVENT is posted, and PROP:Touched is set to TRUE. If EVENT:NewSelection and EVENT:AlertKey is the EVENT then PRESSKEY(Keycode) is used to insert the keycode. The server program can examine KEYCODE or EVENT to retrieve the values sent from the client.
GROUP
Attributes Supported Modify at Runtime Alrt* . . . . . Y . . . . N . . . . 2 . . . . 2 . . . . 2 . . . . N . . . . 2 . . . . N . . . . 1,2 . . . . N . . . . 2 Full . . . . . . . Y Hide . . . . . . Y Hlp . . . . . . . Y Key . . . . . . . Y Msg Scroll Skip Text . . . . . . Y . . . . . Y . . . . . . Y . . . . . . Y . . . . Y Attributes Supported Modify at Runtime . . . . 2 . . . . 1,2 . . . . Y . . . . N . . . . 2 . . . . 2 . . . . 2 . . . . 2 . . . . 2 . . . . 2
ToolTip
Trn . . . . . . . Y
The GROUP control does not generate any events, therefore no update to the server will occur.
IMAGE
IMAGE controls have the following constraints: 1. 2. Image controls can have an image specified at compile time or runtime. Image controls are unique in that the image contents must be extracted and written to a file at runtime. This file is then transferred to the client and assigned to the image control. PROP:TempImagePath and PROP:TempImage properties are used to control the location and name of the temporarily extracted image. If the image is assigned at runtime, the image file must be located in the executables directory or in the PATH.
3. 4.
ClarioNET________________________________________________________
APPENDIX
Note: At runtime, ClarioNET uses PROP:TempImage to extract the image to a file.
Supported Modify at Runtime At . . . . . . . Y Centered . . . Y Disable . . . . Y Full . . . . . . Y Hide . . . . . Y Hscroll . . . . Y . . . . 2 . . . . 2 . . . . 1,2 . . . . 2 . . . . 1,2 . . . . 2 HVScroll . . . . Y Scroll Text . . . . . Y . . . . . . Y Attributes Supported
97
Attributes
Modify at Runtime
. . . . 2 . . . . N . . . . 1,2 . . . . 2 . . . . 2
Tiled . . . . . . Y Vscroll . . . . . Y
The IMAGE control does not generate any events, therefore no update to the server will occur.
ITEM
Attributes Supported Modify at Runtime At . . . . . . . Y Check . . . . Y . Y Color . . . . . Y CONTENTS First Font Hide Disable . . . . Y . . . . . Y . . . . . N . . . . . Y . . . . N . . . . N . . . . N . . . . N . . . . 1 . . . . N . . . . N . . . . 1 Hlp . . . . . . . Y Icon Last Msg . . . . . . Y . . . . . . Y . . . . . . Y . . . Y Key . . . . . . . Y Attributes Supported Modify at Runtime . . . . Y . . . . 2 . . . . N . . . . N . . . . 2 . . . . N . . . . 2
Separator Text
Std . . . . . . . Y* . . . . N . . . . . . Y
*STD:Close and STD:PrinterSetup are supported. All other STD window actions are not supported.
LINE
Attributes Supported Modify at Runtime At . . . . . . . Y Color . . . . . Y Disable . . . . Y Full . . . . . . Y . . . . 2 . . . . 2 . . . . 1 . . . . 2 Hide Scroll . . . . . . Y . . . . . Y Attributes Supported Modify at Runtime . . . . 1 . . . . 2 . . . . 2
LineWidth . . . Y
The LINE control does not generate any events, therefore no update to the server will occur.
________________________________________________________ClarioNET
98
LIST
APPENDIX
A LIST control is treated the same as a COMBO control. For information on the LIST control refer to the COMBO Control section.
MENU
Attributes Supported Modify at Runtime At . . . . . . . Y Color . . . . . Y Disable . . . . Y First Font Hide . . . . . Y . . . . . N . . . . . Y . . . . N . . . . N . . . . 1 . . . . N . . . . N . . . . 1 . . . . Y Icon Last Msg . . . . . . Y . . . . . . Y . . . . . . Y . . . Y Attributes Supported Modify at Runtime . . . . 2 . . . . N . . . . N . . . . 2 . . . . N . . . . 2
Key . . . . . . . Y
Separator Text
Std . . . . . . . Y* . . . . N . . . . . . Y
Hlp . . . . . . Y
*STD:Close and STD:PrinterSetup are supported. All other STD window actions are not supported.
OPTION
Attributes Supported Modify at Runtime Alrt* . . . . . Y . . . . N . . . . 2 . . . . 2 . . . . 2 . . . . 2 . . . . 1,2 . . . . N . . . . 1,2 . . . . N . . . . 2 Full . . . . . . . Y Hide . . . . . . Y Hlp . . . . . . . Y Key . . . . . . . Y Msg Scroll Skip Text . . . . . . Y . . . . . Y . . . . . . Y . . . . . . Y . . . . Y Attributes Supported Modify at Runtime . . . . 2 . . . . 1,2 . . . . Y . . . . N . . . . 2 . . . . 2 . . . . 2 . . . . 2 . . . . 2 . . . . 2
ToolTip
Trn . . . . . . . Y
The OPTION control generates the following events which trigger update information to the server:
EVENT:Accepted EVENT:AlertKey EVENT:Selected, (client property EventSelectedAllowed is set to 1)
ClarioNET________________________________________________________
APPENDIX
99
After one of the above events occur, the CHOICE of the control, the EVENT, and KEYCODE are sent to the server. The new RADIO control is selected on the server and the OPTION control report it using CHOICE.
PANEL
Attributes Supported Modify at Runtime At . . . . . . . Y Bevel . . . . . Y Disable . . . . Y Fill . . . . . . Y . . . . 2 . . . . 2 . . . . 1,2 . . . . 2 Full . . . . . . . Y Hide Scroll . . . . . . Y . . . . . Y Attributes Supported Modify at Runtime . . . . 2 . . . . 1,2 . . . . 2
The PANEL control does not generate any events, therefore no update to the server will occur.
PROMPT
Attributes Supported Modify at Runtime At . . . . . . . Y Center . . . . Y Color . . . . . Y Cursor . . . . N Disable . . . . Y Font . . . . . Y Full . . . . . . Y . . . . 2 . . . . 2 . . . . 2 . . . . N . . . . 1,2 . . . . 2 . . . . 2 Hide . . . . . . Y Attributes Supported Modify at Runtime . . . . 1,2 . . . . 2 . . . . 2 . . . . 2 . . . . 1,2 . . . . 2
Trn . . . . . . . Y
The PROMPT control does not generate any events, therefore no update to the server will occur.
PROGRESS
Attributes Supported Modify at Runtime At . . . . . . . Y Color . . . . . Y CONTENTS . Y Cursor . . . . N Disable . . . . Y . . . . 2 . . . . 2 . . . . 1,2 . . . . N . . . . 1,2 Full . . . . . . . Y Hide Scroll . . . . . . Y . . . . . Y . . . . . Y Range Attributes Supported Modify at Runtime . . . . 2 . . . . 1,2 . . . . 2 . . . . 2 . . . . 2
Trn . . . . . . . Y
When a PROGRESS control is placed on a window the client window behaves slightly differently. Normally the client software does not contact the server unless the user has performed some activity to generate an EVENT. With a PROGRESS control present the client
________________________________________________________ClarioNET
100
APPENDIX
window periodically checks with the server to refresh the client window. The time between automatic refresh is set on the client side with the ProgressUpdateFrequency class property. When the client frequency is reached, a message is sent to the server to scan the current window and send the changes to the client. The change can consist of anything including the detection that another window has opened. The limitation to this is that the ACCEPT loop on the server must be cycling. This is essential because the message sent from the client will only be heard by the server when the ACCEPT loop gets an event.
Note: Automatic client update requests will only occur when the PROGRESS control is enabled. If disabled, the automatic update requests will stop.
RADIO
Attributes Supported Modify at Runtime Alrt* . . . . . Y . . . . N . . . . 2 . . . . 2 . . . . N . . . . 1,2 . . . . N . . . . 2 . . . . 2 . . . . 2 . . . . 1 . . . . Y Icon . . . . . . Y Attributes Supported Modify at Runtime . . . . 2 . . . . N . . . . N . . . . 2 . . . . N . . . . 2 . . . . 2 . . . . 2 . . . . 2 . . . . 2 . . . . N
ToolTip
Trn . . . . . . . Y Value . . . . . . Y
The RADIO button will only send an EVENT to the server when an EVENT:AlertKey is generated. The only action on the client is to set the KEYCODE that causes the alert and post the EVENT:AlertKey to the server.
ClarioNET________________________________________________________
APPENDIX
REGION
Attributes Supported Modify at Runtime At . . . . . . . Y Bevel . . . . . Y Color . . . . . Y Cursor . . . . N Disable . . . . Y DragId Fill . . . . N DropId . . . . N . . . . . . Y . . . . 2 . . . . 2 . . . . N . . . . N . . . . 1,2 . . . . N . . . . N . . . . 2 FillColor . . . . Y Full . . . . . . . Y Hide Imm Scroll . . . . . . Y . . . . . . Y . . . . . Y Attributes Supported
101
Modify at Runtime
. . . . 2 . . . . 2 . . . . 1,2 . . . . N . . . . N . . . . N
SelectedColor Y 2 Trn . . . . . . . Y
If the mouse is clicked in the REGION, EVENT:Accepted is sent to the server. If the IMM attribute has been set, EVENT:MouseIn and EVENT:MouseOut is sent then the mouse enters and leaves the region.
Note: Using IMM with this control should be used sparingly to spare network traffic.
SHEET
Attributes Supported Modify at Runtime Above Below . . . . Y . . . . Y . . . Y . Y . . . . N . . . . 2 . . . . N . . . . N . . . . 1 . . . . 2 . . . . 1,2 . . . . N . . . . 1,2 . . . . N . . . . N . . . . 2 . . . . N . . . . 1,2 Hscroll . . . . . Y Imm Join . . . . . . Y . . . . . . Y Attributes Supported Modify at Runtime . . . . 2 . . . . N . . . . N . . . . N . . . . N . . . . 2 . . . . N . . . . N . . . . 2 . . . . N . . . . N . . . . N . . . . N
At . . . . . . . Y BrokenTabs . Y CHOICE Color . . . . . Y CONTENTS Cursor . . . . N Disable . . . . Y Down . . . . . Y DropId . . . . N Font Hide . . . . . Y . . . . . Y Full . . . . . . Y
The SHEET control generates the following events which trigger update information to the server:
EVENT:AlertKey EVENT:NewSelection EVENT:Selected, (client property EventSelectedAllowed is set to 1)
________________________________________________________ClarioNET
102
APPENDIX
When a new tab is selected on the client, the SHEET control gets the event. The new tab CHOICE is sent to the server along with EVENT and KEYCODE. PROP:Selected is used to select the new tab on the server. The client program will receive the EVENT and can check which tab is displayed by using CHOICE.
Note: EVENT:TabChanging is not sent.
SPIN
Attributes Supported Modify at Runtime Alrt* . . . . . Y . . . . N . . . . 2 . . . . N . . . . N . . . . 2 . . . . 1,2 . . . . N . . . . N . . . . N . . . . 1,2 . . . . N . . . . 2 . . . . N . . . . 2 . . . . 1,2 . . . . Y . . . . N . . . . N . . . . N . . . . N InToolbar . . . N Attributes Supported Modify at Runtime . . . . N . . . . N . . . . N . . . . N . . . . 2 . . . . N . . . . 2 . . . . N . . . . N . . . . N . . . . N . . . . N . . . . N . . . . 2 . . . . 2 . . . . 2 . . . . 2 . . . . N . . . . N
At . . . . . . . Y Cap . . . . . . Y Center . . . . Y . Y Color . . . . . Y CONTENTS Decimal Cursor . . . . N . . . Y Delay . . . . . Y Disable . . . . Y DropId . . . . N Font . . . . . Y From . . . . . N Full . . . . . . Y Hide . . . . . Y Hlp . . . . . . Y Hscroll . . . . Y HVScroll . . . N Imm Ins . . . . . Y . . . . . . Y
Key . . . . . . . Y Left . . . . . . . Y Mask . . . . . . Y Msg . . . . . . Y . . . . . Y . . . Y Ovr . . . . . . . Y Range ReadOnly Req Scroll Skip Step Text
Repeat . . . . . Y . . . . . . Y . . . . . Y . . . . . . Y . . . . . . Y . . . . . . Y . . . . Y Right . . . . . . Y
ToolTip
The SPIN control generates the following events which trigger update information to the server:
EVENT:Accepted (and CONTENTS have not changed) EVENT:AlertKey EVENT:Selected, (client property EventSelectedAllowed is set to 1) EVENT:NewSelection (only if IMM is set)
After one of these events, the CONTENTS of the control, EVENT, and KEYCODE are sent to the Server.
ClarioNET________________________________________________________
APPENDIX
STRING
Attributes Supported Modify at Runtime Angle . . . . Y . . . . 2 . . . . 2 . . . . N . . . . 2 . . . . N . . . . 2 . . . . 1,2 . . . . N . . . . 2 . . . . 1,2 . . . . N . . . . 2 . . . . 2 . . . . 1,2 Left . . . . . . . Y Max . . . . . . N Min . . . . . . . N Page . . . . . . N PageNo Reset Scroll Skip Sum Tally Text . . . . N . . . . . N . . . . . Y . . . . . . N . . . . . . N . . . . . . N . . . . . . Y Attributes Supported
103
Modify at Runtime
. . . . 2 . . . . N . . . . N . . . . N . . . . N . . . . N . . . . 2 . . . . N . . . . N . . . . N . . . . N . . . . N . . . . 2
At . . . . . . . Y Ave . . . . . . N Center . . . . Y Cnt . . . . . . N Color . . . . . Y Contents . . . Y Cursor . . . . N Decimal . . . Y Disable . . . . Y DropId . . . . N Font Hide . . . . . Y . . . . . Y Full . . . . . . Y
Right . . . . . . Y
Trn . . . . . . . Y
The STRING control does not generate any events, therefore no update to the server will occur.
TAB
Attributes Supported Modify at Runtime ChildIndex . . Y Color . . . . . Y Disable . . . . Y DropId . . . . N Font Hide . . . . . Y . . . . . Y . . . . N . . . . 2 . . . . 1,2 . . . . N . . . . 2 . . . . 1,2 Hlp . . . . . . . Y Key . . . . . . . Y Msg Req Text . . . . . . Y . . . . . . N . . . . . . Y . . . . Y Attributes Supported Modify at Runtime . . . . Y . . . . N . . . . 2 . . . . N . . . . 2 . . . . 2
ToolTip
All activity for The TAB control occurs through its parent SHEET control.
Note: The tab order cannot be changed at runtime.
TEXT
Attributes Supported Modify at Runtime Alrt* . . . . . Y . . . . Y . Y . . . . N . . . . 2 . . . . 2 . . . . 2 . . . . 1,2 Key . . . . . . . Y Left . . . . . . . Y Msg . . . . . . Y . . . Y Ovr . . . . . . . Y ReadOnly Attributes Supported Modify at Runtime . . . . N . . . . 2 . . . . 2 . . . . 2 . . . . 2
________________________________________________________ClarioNET
104
Cursor . . . . N Disable . . . . Y DropId . . . . N Font Hide . . . . . Y . . . . . Y Full . . . . . . Y Hlp . . . . . . Y Hscroll . . . . Y HVScroll . . . Y Ins . . . . . . Y . . . . N . . . . 1,2 . . . . N . . . . 2 . . . . 2 . . . . 1,2 . . . . Y . . . . 2 . . . . N . . . . 2 Req . . . . . . Y . . . . N . . . . N . . . . 2 . . . . 2 . . . . 2 . . . . 2 . . . . 2 . . . . 2 . . . . 2 . . . . 2 Resize . . . . . Y Right . . . . . . Y Scroll Single Skip ToolTip . . . . . Y . . . . . Y . . . . Y . . . . . . Y
APPENDIX
The TEXT control generates the following events which trigger update information to the server:
EVENT:Accepted (if the contents of the TEXT control have changed) EVENT:AlertKey EVENT:Selected, (client property EventSelectedAllowed is set to 1)
After one of these events the CONTENTS of the control, the EVENT, and KEYCODE are sent to the server.
ClarioNET________________________________________________________
APPENDIX
ClarioNET:SetUpdateExtents(SHORT ControlType, SHORT Extent)
105
ControlType An integer constant, expression, EQUATE or variable that specifies the type of control to limit. EQUATE statements for the ControlType can be found in the EQUATES.CLW file. These equates are denoted by a prefix of CREATE:. A special CREATE:AddDelete ControlType is also available. Extent An integer constant, expression, EQUATE or variable that defines the degree to which each controls properties are scanned. A value of zero (0) means that no scanning is done. A value of one (1) means that only the most basic properties are scanned for changes. This includes CONTENTS, HIDE, and DISABLE. A value of two (2) means that all control properties are scanned.
This procedure sets the extent that ClarioNET investigates the server programs current CONTROL attributes for changes. Although ClarioNET is extremely fast in its window and control property scanning, windows with 500 to 1,500 controls can take a perceptible amount of time. There is also a special ControlType CREATE:AddDelete that is defined for ClarioNET. This specifies that the window is scanned for added or deleted controls at runtime and can take perceptible time for windows with over 400 controls. When the ControlType is set to CREATE:AddDelete the Extent parameter can be set to zero (0) to disable the check for added and deleted controls. If set to one (1) the checking for added and deleted controls is enabled. The default extent value for all controls (except CREATE:AddDelete) is two (2) and for CREATE:AddDelete it is one (1).
________________________________________________________ClarioNET
106
APPENDIX
creates it on the client. The same thing occurs for deleted controls; if a control is found missing in the window it is deleted on the client.
ClarioNET________________________________________________________
APPENDIX
Note!
107
A common problem caused by a missing USE attribute is when controls are not visible on the client. If you notice missing controls or menu items, look first for a missing USE attribute in your server side program.
However there is no guarantee that these changes will effect the current server printer device that is being used by the server based program.
________________________________________________________ClarioNET
108
APPENDIX
The following STD attributes are not supported, and will display a Functionality Not Supported message window on the client, and will be ignored by the server program.
STD:WindowList STD:CascadeWindow STD:Cut STD:Paste STD:Undo STD:TileVertical STD:TileWindow STD:ArrangeIcons STD:Copy STD:Clear STD:TileHorizontal
ClarioNET________________________________________________________
APPENDIX
PROP:AlwaysDrop
109
Inspected on LIST and COMBO controls when first building the window for transfer to client.
PROP:DeferMove & PROP:LazyDisplay
Ignored. The client side of ClarioNET is the only displayed user interface; ClarioNET client side code handles all moves and refreshes for maximum speed.
SYSTEM{PROP:ColorDialogHook} SYSTEM{PROP:FontDialogHook} SYSTEM{PROP:PrinterDialogHook}
These properties are redirected to internal ClarioNET procedures that replicate the call on the client. Your server program receives a response identical to the program running locally.
SYSTEM{PROP:FileDialogHook}
Will display a message on the client that FILEDIALOG is not currently available in ClarioNET.
PROP:HaltHook, PROP:StopHook, & PROP:AssertHook
These properties are set to display a message box on the client and return the response to the server program.
PROP:MaxHeight, PROP:MaxWidth PROP:MinHeight, PROP:MinWidth
These properties are examined and sent to the client when first building a window.
PROP:NoTips
This property is checked both when first building the client window and for each update process.
PROP:AcceptAll & SELECT()
This deals with AcceptAll mode. ClarioNET is constantly checking SYSTEM{PROP:AcceptAll} from within the ClarioNET:TakeEvent procedure. When SYSTEM{PROP:AcceptAll} = 1 the call returns immediately.
________________________________________________________ClarioNET
110
APPENDIX
When AcceptAll finishes, either after finding a problem control or all controls are processed, SYSTEM{PROP:AcceptAll} is set to 0 by Clarion and the ClarioNET:TakeEvent processing continues.
PROP:Checked
Not used because examining the CONTENTS() of a CHECK control is more accurate.
PROP:ChoiceFEQ
Can be examined on the server program for current choice. Setting this property will have an effect only when ClarioNET tries to detect the {PROP:Selected} item in a SHEET or OPTION control.
PROP:Edit
Not available.
PROP:EventsWaiting
Used extensively within ClarioNET:TakeEvent to determine when all server program business logic. processing is finished and the screen can be scanned for transmission.
PROP:Follows
This property assigns a new tab order location for a control. Unfortunately there is no way that we can support tab order changes with the standard Clarion syntax. We have provided the procedure:
ClarioNET:SetPropFollows(SIGNED ControlFEQ, SIGNED FollowsFEQ)
ControlFEQ The Field Equate Label of the control to change tab order. FollowsFEQ The Field Equate Label of the control that should come immediately before ControlFEQ. This enables you to change the tab order at runtime.
ClarioNET________________________________________________________
APPENDIX
Note!
111
If you CREATE a control at runtime always use this procedure call to set the tab order location of your newly created control.
PROP:HscrollPos & PROP:VscrollPos If you assign a value to these properties the ClarioNET Window update process will detect the change for the specific control and the client scroll position will be updated. PROP:IconList Fully supported in LIST controls. PROP:PrintMode ClarioNET sets this property in REPORT procedures to make sure that images on reports are written to the Clarion created WMF file. PROP:LineHeight This property is inspected when updating LIST and COMBO controls. PROP:Threading ClarioNET forces your server application to use the single document interface immediately within the call to ClarioNETServer:Init. This is accomplished by setting SYSTEM{PROP:Threading} = 0. This is an operational requirement of the Clarion Application Broker. PROP:Touched When an ENTRY, TEXT, SPIN, or COMBO has data modified by client action, PROP:Touched for that control is set to .1.. PROP:LineHeight This property is inspected when updating LIST and COMBO controls.
________________________________________________________ClarioNET
112
APPENDIX
Forced Shutdown
A well behaved remote client automatically shuts down when no activity is apparent. When a specified time has elapsed and not activity has been performed on the client, both client and server programs will shut down automatically. In all cases the Clarion HALT procedure call is used to make sure that the executing program is completely shut down and all memory is deallocated. There are several scenarios that are considered.
ClarioNET________________________________________________________
APPENDIX
113
This is a general overview of the cycle of interaction between ClarioNET and your server program. Numbers in parentheses refer to the map of critical procedures. (1) & (6) ClarioNETServer Initialization and CloseDown are accomplished with the calls to ClarioNETServer:Init and ClarioNETServer:Kill. These procedures initialize data structures and communicate with the Clarion Application Broker to gather the necessary server communication information. (2) ClarioNET Window Initialization must occur for each Clarion PROCEDURE that will display and process a Window. This is handled with the ClarioNET:OpenWindowInit, ClarioNET:InitWindow and ClarioNET:OpenWindow procedures. These procedures use a locally instantiated ClarioNETWindowClass class as a parameter used for keeping track of the Window and its current state.
________________________________________________________ClarioNET
114
APPENDIX
(3) Event Detection, Window Scanning, & Client Notification is the most important function call in the system. ClarioNET:TakeEvent must be the first call after ACCEPT so that it can monitor the status of the window. ClarioNET:TakeEvent has two purposes: (a) It detects when there are no more events waiting (PROP:EventsWaiting} = 0) so that the window can be scanned and sent to the client. (b) When a command is received from the client (EVENT:Request) the ACCEPT is triggered and ClarioNET:TakeEvent handles the incoming command. During the server program operation, the ACCEPT loop is just looping through waiting for a TCP/IP-HTTP signal from the Client. When received, the Event and/or Data is posted to the proper window or control and the ACCEPT loop continues to process your code that senses the event and data change. Your Clarion server program has no idea where the change came from just that the event and data has changed. At this stage the Client is waiting for a response. The client is effectively dead until the server sends a response. The Clarion program continues to execute program code to finish the predetermined outcome of the event and/or data change. only when there are no events waiting in the ACCEPT loop does the ClarioNET:TakeEvent procedure again detect that {PROP:EventsWaiting} = 0 and scan the window, sending any changes to the client. (4) Window Close Signaling: It is critical that the client be informed when a Window is closing. This is the primary cause of the client going dead. Do not rely on .BREAK. to exit the ACCEPT loop. Always use POST(EVENT:CloseWindow). (5) ClarioNET Window Kill: When processing of a window is complete and the PROCEDURE is exiting, it is essential to call ClarioNET:KillWindow to DISPOSE of CLASSes instantiated for that Window and to notify the Client that the window is being closed. This is essential because the Client also must DISPOSE of CLASSes, exit a PROCEDURE, and then recontact the server to refresh the prior Window. (6) ClarioNETServer Close Down : When the program itself is terminating, ClarioNETServer:Kill must be called to cleanup and safely return all memory and resources to the server.
Note: The ClarioNET server extension is a one-pass system. Once your server program is launched and you call your first window, all further WINDOWs must be called from the
ClarioNET________________________________________________________
APPENDIX
top level WINDOW. After the first window is closed you can ONLY call the following server side ClarioNET procedures to contact the client: ClarioNET:CallClientProcedure Any INI functions, MESSAGE, ClarioNET:ClientBeep ASK
115
________________________________________________________ClarioNET
116
! Be the first executable code statement after ! ACCEPT.
APPENDIX
CASE EVENT() OF EVENT:CloseWindow ClarioNET:CloseWindow(ClarioNETWindow) OF EVENT:OpenWindow ClarioNET:OpenWindowInit(ClarioNETWindow) ! This simply records and clears the window TIMER. END ! ALWAYS exit the ACCEPT loop by posting EVENT:CloseWindow. !!!! END CLOSE(Window) ClarioNET:KillWindow(ClarioNETWindow) ! This procedure cleans up memory allocated in ! ClarioNET:InitWindow and sends any required ! messages to the client to close its window.
ClarioNET________________________________________________________
APPENDIX
117
7)
Client launches program but during usage it freezes. 1) 2) 3) 4) You have not added the template to ALL your applications EXE and DLL APP files. The particular area of code being executed is using Edit-In-Place or Query by Example (QBE) functionality . A procedure has been called on EVENT:Timer. ClarioNET procedure calls have been placed by hand coding and either the locations or usage is incorrect.
________________________________________________________ClarioNET
118
APPENDIX
Problems can occur when your own custom code or third party code is used and the following conditions exist: 1) 2) If code writes directly to the screen using API calls these items will not appear on client. When using classes that override default ABC classes, there is a small chance that ClarioNET calls will not be added, or added in the wrong locations. Code or DLLs (custom or 3rd party) that are compiled without the BUILTINS.CLW file that we provide that controls the redirection of standard Clarion procedure calls can cause unstable behavior. Code or DLLs (custom or 3rd party) that are compiled without the ClarioNET procedure calls will hang the system when any of these windows are opened
3)
4)
The six procedure calls are designed to analyze your running application from various points of execution. Their location is critical. These procedures are:
ClarioNET:OpenWindowInit ClarioNET:InitWindow ClarioNET:OpenWindow ClarioNET:TakeEvent ClarioNET:CloseWindow ClarioNET:KillWindow
Calling Procedures That Display Windows in EVENT:Timer
Do not call a procedure that requires user interaction to close from an EVENT:Timer. Window procedures can and must only be called in response to a user event. Because the server program is always waiting for client instructions, the client can only know whats happening in response to an event it sends to the server. Each ACCEPT loop that processes a window is designed so that it is waiting for a specific EVENT from the client program. An instruction can be sent to the client only after the client has contacted the server, and the client is waiting for a response.
ClarioNET________________________________________________________
APPENDIX
If you call a procedure on an EVENT:Timer, not only will the data stream that is sent to the client be ignored, but the server client alignment will be invalidated and both sides will be hung.
119
This restriction does not apply to windows that will close themselves, as in small status windows with progress controls or text that changes as the event loop is cycled.
Window Size is Incorrect on Client
When you use INI files to save and restore WINDOW and APPLICATION size that subsequent runs may result in improper window sizes. This is because the Clarion size saving INI process reads the displayed windows size and saves it. There is a good chance that the window size on the server might be different than the client. You can of course change the size and location of the window and controls using runtime property assignments and the ClarioNET server code will transmit these changes to the client. We recommend that you disable the INI window size saving procedure upon testing ClarioNET:Active() = 1.
A Call to POPUP Can Hang the Server
When the client window is created a complex parent/child scanning operation takes place that creates parents before children, then creates controls in the proper tab order. It is essential that all controls have USE variables. Be especially vigilant of TABs and MENUs.
Report Progress Windows That Require an Event to start printing
A single guideline will make your report generation procedures work perfectly: do not combine a WINDOW with a REPORT procedure that requires user action. Perform all user selection processes to gather data
________________________________________________________ClarioNET
120
APPENDIX
that will be used to generate the report in a separate procedure. Let the REPORT procedure do just that...generate the report.
Windows with PROGRESS Controls
If a WINDOW or APPLICATION contains a PROGRESS control, the ClarioNET client will respond in a special way. After displaying the window the client will request a refresh of the window information at regular intervals. This behavior can be canceled by DISABLEing the progress control.
Printout Size Limits or Orientation
With ClarioNET, Clarions Report Print Preview mode must always be used.This is needed to force reports to print to Windows Metafiles) by the server program. The .WMF files are sent to the client. All metafiles for a single report are combined in a single compressed archive for transfer to the client. The maximum size is limited only to the practical transmission time to the client. WMF files compress to an average of 2 to 15K per page. ClarioNET has NO LIMITS to the complexity of a report page or the number of pages. There is only a common sense limitation that you need to determine because of the time it takes to send the compressed file of printout pages to the client. Be aware when a huge printout (2,000 + pages) could be generated that could take a long time to download to the client.
Missing ICON or IMAGE contents
There is a maximum of 40 LIST and COMBO controls per window and a maximum of 200 QUEUE fields per LIST. If the listbox exceeds these limits your listbox data will not be formatted properly. Most often you will see records shifted over a number of columns as the list lines progress downwards.
ClarioNET________________________________________________________
APPENDIX
Wrong BUTTON has DEFAULT behavior
121
It is possible that you have used the DEFAULT attribute on a BUTTON control in a window more than once. ClarioNET recognizes this feature on the first BUTTON with the DEFAULT attribute as it scans the window in control specification order.
Calling other Window procedures during Window startup
Many times you may wish to call a splash type window during the opening process of a window. This is fine in ClarioNET but we recommend that you call the procedure to display the splash window BEFORE the ACCEPT loop begins or in the EVENT:OpenWindow location within the ACCEPT loop. If the splash window procedure that you have called returns a result that should cause the calling procedure to immediately RETURN, you can use a RETURN statement.
Program Lockup
Because ClarioNET maintains a strict client server alignment of events and window layering, it is essential that the two never lose their alignment. If alignment is lost there is no way to recover, and the link is considered dead. The server program will time out and terminate itself. The client program will exit after a time out, either from inactivity or because of an HTTP timeout event. This is the most common area of problems with ClarioNET and usually stems from a coding error in the server program.
Font Sizes on the Client
Because the client computer may be using a different screen resolution and screen font size than the server, there is the possibility the size of screen controls such as strings may be wrong. This is unavoidable and can be eased if you test your application in several screen resolutions to be sure everything fits well. When ClarioNET receives an APPLICATION or WINDOW to display it determines the basic font size that was used on the server and creates a window with the same size font. The resulting window should be nearly identical.
MDI apps become SDI apps
ClarioNET forces your application to run as a Single Document Interface application. This is required by the Clarion Application Broker. Please note the following items as you inspect your MDI application coding:
________________________________________________________ClarioNET
122
1.
APPENDIX
POSTing events to other threads will have no effect. The event will be posted to the current thread. Please examine what could happened in the current ACCEPT loop received a POSTED event. Variables with the THREAD attribute become more global in scope.
There is no need to remove the START or MDI items from your program. START will simply become a procedure call and MDI will be ignored.
2.
Note!
This can be caused is there is a vertical bar .|. in the contents of one of the queue fields. Clarion internally uses this character as a delimiter when it is providing ClarioNET with the LIST contents. There is no way for us to change this at present, and we suggest that you filter this character out and change it to an alternative.
API Calls That Write to Server Screen
If compiled without the revised BUILTINS.CLW these may hang the system if calling anything that was revised.
ClarioNET________________________________________________________
APPENDIX
123
2. 3. 4.
Move the cursor to just below the MODULE Line. Select File | Import File, and select ClarioNET_Builtins.CLW file from the Clarion LIBSRC Directory. Save the file.
________________________________________________________ClarioNET
124
5. 6. Load an application and compile.
APPENDIX
The compiler will report 18 Indistinguishable New Prototype Errors. This is expected because the old prototypes are still in the BUILTINS.CLW file. You need to comment out those lines. This is easily done as follows.... Press the [Edit] errors button. Press the [OK] button for the Edits made in generated source.. Warning dialog. The cursor will be placed at the source of the first error encountered. Turn the line to a comment by adding an exclamation (!) point just before the code that appears on the line.
7. 8. 9.
10. Use the [F4] key to find each successive error. Comment out each of these lines of code. 10. Complete the modification by saving the modified BUILTINS.CLW. Recompile your application. The ClarioNET server extension DLL automatically detects when your application is running locally and simply sends the calls on to the standard Clarion procedures. When launched for web usage ClarioNET receives the procedure calls and stores the information internally for transmission and replication on the client.
2.
ClarioNET________________________________________________________
APPENDIX
3.
125
Go to line 208. Immediately after the CASE EVENT() statement, add the following template code:
#EMBED(%WithinEventProcessing,Event Processing for ACCEPT Loop) NOTE: If the standard Clarion Legacy templates have been modified, the line numbers specified above will differ. Look for the mentioned code instead of line numbers.
Error Messages
These error messages will appear in a standard Clarion MESSAGE box if an error occurs.
Client Error: Transfer File to Server Error Opening File: (filename) Error # (?) Error : ????? Skipping file
The file specified on the client side to be transferred to the server could not be opened for the reasons stated in .Error.. Non-fatal error, the file will be skipped and not transferred.
Client Error: Transfer File to Server Size of file : (filename) exceeds internal limits of (size) Skipping file
________________________________________________________ClarioNET
126
The file was too large for the client side internal transfer buffers. Non-fatal error, the file will be skipped and not transferred.
APPENDIX
Client Error: Transfer File to Server Size of encoded file : (filename) exceeds internal buffer size of (size) Skipping file
After the file was mime encoded and encrypted, the resulting datastream size was too large for the internal buffer. Non-fatal error, the file will be skipped and not transferred.
Client: Shell Execute Error Error executing connection to : (command)
This occurs when a button with ClarioNET:WEBLINK as the KEY equate was pressed and the ShellExecute command used ended in failure.
Client: Non-Fatal Server Error Stream did not contain a header or receive encrypting Command = (datastream portion)
A datastream has been received by the client that was not properly formatted by the server. This means that either the datastream was corrupted in transit via the TCP/IP connection or that some serious error has occurred on the server.
Client: Datastream Error Unrecognized Assignment Function Code
This indicates that one of the codes used on the server to tell the client what to do is not recognized by the client. If this happens the most likely problem is that the ClarioNET procedure calls in the server application are not properly placed -or- the basic logic used in the design of ClarioNET is being violated in the server program. The most common source of this message is when a new window is opened when the client is expecting a simple update stream for the current window.
Limit Exceeded Messages More than (x) variables required for screen. Number of Lists (x) exceeds internal limit of (x) queues Number of String USE variables exceeded
All the above messages indicate that the screen was too large to be rendered on the Client. Your first action should be to reduce the number of controls on your screen. Also, contact SoftVelocity, providing your
ClarioNET________________________________________________________
APPENDIX
127
window structures, so that the internal capacities might be increased in future editions.
Client : Report Generation Error There was a data compression/encryption error... (info) when the report was being prepared for transmission.
This indicates there was an error on the server when the files were being compressed and encrypted for transmission to the client.
Client: File Error Client File Error on (filename) Location: (number) Error Value = (number) Error : (string)
This is a general message when a file CREATE, OPEN, ADD, APPEND, CLOSE, or GET operation encountered an error. The .Location. number can be reported to SoftVelocity to determine where the error occurred and aid in debugging for future problems.
Client: Compression Error In-Ram Compression Initialization Error In-Ram Decompression Initialization Error
This indicates that the main data compression/encoding system could not be initialized and is a fatal error. Please report this to SoftVelocity.
Client: Compression Error (1) Stream Compression Error Code: (number) (2) Stream Decompression Error Code: (number)
This indicates an error has occurred during the compression/encryption process for sending data to the server. Please report this to SoftVelocity.
Client: Decompression Error Client Decompression System ERROR (string)
This indicates that an error has occurred decompressing & decrypting the datastream received from the server. Please report this to SoftVelocity.
Server: Compression Error Server Compression System ERROR (text)
________________________________________________________ClarioNET
128
APPENDIX
This indicates that an error has occurred compressing & encrypting a datastream to send to the client. Please report this to SoftVelocity.
Server: File Error Server File Error... Filename : (filename) Code Location Marker : (number) Calling Index : (number) Error # (number) Error : (text)
This is a general message when a file CREATE, OPEN, ADD, APPEND, CLOSE, or GET operation encountered an error. The Location and Index values can be reported to the authors of ClarioNET to determine where the error occurred and aid in debugging for future problems.
ClarioNET________________________________________________________
Index
129
Index
Symbols
8080 15,17,81
A
ABC ABC Toolbar Abc.app ACCEPT ALERT Application Broker application logic Application Visible on Server ARC Architecture Arial ASK AssertHook 2,21,24,28,38,40,63,66-67,76,118 2,24 67 27,30,60,70,74-75,87,89,100, 113-116,118,121-122,124-125 108 3,5,10,13-15,22,28-30,40,43,47-49, 51,72,81,108,111,113,117,121 50,60 1,22 33,108 1,10 36,62 3,108,115 108-109
B
bitmapped graphics BLANK Blink, Inc. BlowFishFlag BOX BREAK BUILTINS.CLW BUTTON 35 33,108 46 71 33,91-92,108 30,57,114 4,13,28,33,108,118-119,122-124 62,92,121
________________________________________________________ClarioNET
130
C
CENTER CHECK CHORD ClarioNET Clarionet.clw Clarionet.inc Clarionet.tpl ClarioNET:Active ClarioNET:CallClientProcedure ClarioNET:ClientBeep ClarioNET:ClientProcedure ClarioNET:CloseWindow ClarioNET:EnableHelp ClarioNET:GetFilesFromClient ClarioNET:GetPrintFileName ClarioNET:Global.ClientQueryRequest ClarioNET:HandleClientQuery ClarioNET:InitWindow ClarioNET:KillWindow ClarioNET:OpenPushWindow ClarioNET:OpenWindow ClarioNET:OpenWindowInit ClarioNET:PutINI ClarioNET:QueryServerProgram ClarioNET:RegisterBrowse ClarioNET:SendClientFilesToServer ClarioNET:SendClientQueryResponse ClarioNET:SendFilesToClient ClarioNET:SetCursor 31 29,90,92-93,110 33,108 4,1-3,5-129 66 66 66 119 60,85,87-88,115 76,115 60-61,87 75,116,118 22,33,107 55-58 68-69 73 73 74,113,115-116,118 75,114,116,118 78-80 63,73-74,76,113,115-116,118 73,76,113,115-116,118 76 72,88 75 55-58 73 53-55 62-63
Index
ClarioNET________________________________________________________
Index
ClarioNET:SetPropFollows ClarioNET:SetUpdateExtents ClarioNET:StartClientSession ClarioNET:TakeEvent ClarioNET:WEBLINK ClarioNETServer:Active ClarioNETServer:Init ClarioNETServer:Kill ClarioNETUsed ClarioNETWindow.MouseX ClarioNETWindowClass client application Client Auto Shut Down Client Procedure Client Queries Client Refresh Interval Client Side Cursor Client side launching program Client.clw Client.inc ClientNoActivityTimeOut Clntstub.lib ClosePushWindow CLRNT_C .ClientTempDirectory CLRNT_C .EventSelectedAllowed CLRNT_C .HostProgramDirectory CLRNT_C .HostProgramName CLRNT_C .LaunchingWindow CLRNT_C .PingFlag CLRNT_C .ProxyPassword CLRNT_C .ServerPort
131
110 76,104-105 87 74-75,89,109-110,114-115,118 62,126 28,40,72 7,22,33,49,59,70,72-73,76,88,111,113 72,113-114 16,19,28,30,33 29,106 73-75,113,115 10-12,34,46,49 2,23-24 3,60-61,63 3,72 1,23 3,62 67 66 66,86 71 65 78-80 84 85 81 81 84 84 82 81
________________________________________________________ClarioNET
132
CLRNT_C .UseLaunchingWindow CLRNT_C .UsePreconfig CLRNT_C .UserAgent CLRNT_ERR_DECOMP_INIT_FAILURE CLRNT_ERR_HTTP_FAILURE CLRNT_ERR_HTTP_TIMEOUT CLRNT_ERR_INACTIVE CLRNT_ERR_NO_CREATE_TEMP CLRNT_ERR_NO_HOSTDIR CLRNT_ERR_NO_HOSTNAME CLRNT_ERR_NO_SERVERMAME CLRNT_ERR_NONE CLRNT_ERR_PING CLRNT_ERR_SESSION_FAILURE CLRNT_ERR_VERSION_MISMATCH Clrnt50c.lib Clrnt50s.dll Clrnt50s.lib Clrnt55c.lib Clrnt55s.dll Clrnt55s.lib ColorDialogHook COMBO Command Line Parameters Comp.lang.clarion Connect.clw Connect50.prj Connect55.prj Console Continuous Connection control attributes 84 82 81 86 86 87 87 86 86 86 86 86-87 87 86 86 45,65,80 65 65 45,66,80 65 65 108-109 29,90,93-94,98,109,111,120 3,59 6 67 67 67 10,39 1,23,112 104
Index
ClarioNET________________________________________________________
Index
CPCS Report Cursor Customer Service CWICWEB
133
2,25 62-63,123-124 6 16,47-49,51
D
Datastream Error Datastreams DBMS default printer Defines DelimitedProgramList Deployment device settings DisplayServerScreen distributed processing Downloading Report 126 23 44,50 29,43-44 2,16,19,30 88 1,3,13,46-52 39 71 60 69
E
Edit-in-Place ELLIPSE Encryption EQUATES Error Messages Error Opening File EVENT:Last EVENT:Selected EVENT:Timer Example.dct EXEC external IP address 38 33,95,108 1-2,23,33 83,86,105 4,125 125 29,120 85,91,93-95,99,101-102,104 29,117-119 67 16,47,49,51-52 48
________________________________________________________ClarioNET
134
F
file transfers FileDialogHook FileListQueue Client File Error on ..... FLQ:Filename Font Sizes FontDialogHook fully qualified file name Functionality Not Supported 53-54 108-109 53-58 127 54-55,57 121 108-109 53 108
Index
G
GETINI global template GraphicDownloadFlag Graphics Device Interface Graphics Statements GROUP 22,76-77,108 19,31 80,82 39 2,33 96,106
H
Handcode.clw Handcode.prj HELP HELP Sent to Client help system HP LaserJet Series II HTTP protocol HyperLink 67 67 1,19,22,32-33,107-108 1,22 22,32-33 40,43 10 3,62
I
ICON 29,90,93,120
ClarioNET________________________________________________________
Index
IMAGE Images INI file Internet Explorer Internet Information Server ISAPI ISAPI broker ISAPI deployment
135
35,52,96-97,120 47-48,51-52,82,84,89,111,120 29,31,35,53,76-78,119 13 10,40,47,117 14,22,29,40,43,47,51,81 81 40
K
KEY 62,93,95-96,99-100,102,104,126
L
LED indication Legacy.app License Password LicensePassword Limit Exceeded Messages LINE List Box LoadStar RPM local file management Localhost Lockup Lscomp.dll Lsdecomp.lib 17 67 1,7,21-22,71 7,70-71 126 33,97-98,108 122 2,25 44 5,15,48-49,81 121 65 66
M
MDI Metafile MOUSEX 24,30,36,90,121-122 12,39,41,43,120 106
________________________________________________________ClarioNET
136
MSG Multiple Document Interface 62 30
Index
N
Netscape Navigator News.softvelocity.com Newsgroup non-English clients n-tier computing 13 6 6 83 10, 60
O
OPTION Overhead 29,90,98-99,106,110 11
P
page size PANEL Password Patches PIE POLYGON POPUP PORT PREVIEW attribute print preview printer driver PRINTERDIALOG Printout Size Limits Prntprvw.clw Prntprvw.lib Prntprvw.prj 39,43 99 7,21,34,82 13,34 33,108 108 19,108,119 2,25,28,48,69-70,111,119-120,124 29,39-40 39,45,66-67 39-41,43 41,107 120 67 66-67 66-67
ClarioNET________________________________________________________
Index
PROGRESS project define PROMPT PROP:AlwaysDrop PROP:DeferMove PROP:LazyDisplay Properties Support PUBLIC Public directory PUTINI
137
29,40,79,83,90,99-100,120 15,28,30,119 99 109 109 109 4,90 47-48,51-52 56 22,76-77,108
Q
Query-by-Example QuickStart 38 5,15
R
RADIO README.TXT Redirected Clarion Standard Procedures Redirected Standard Dialog Boxes reg file REGION Report Functions Report Generation Error Report Preview Report Progress Report status window Required Fields Requirements Resolutions ROUNDBOX 99-100 5,13 108 108 43-44 101 3,68 127 40 119 69 106 1,3,13,46 31,36,121 33,108
________________________________________________________ClarioNET
138
RunCallClass Run-Time Property Handling 77 108
Index
S
Security SELECT Server Access server application Server Auto Shut Down Server Class Server Side Procedure Calls ServerNoActivityTimeOut Setup SHEET Shell Execute Error SHOW Shrinker Single Document Interface Source Code Procedures SPIN Splash Screen Stream did not contain a header SYSTEM{PROP:Threading} 2,33 108-109 2,34 11-12,20,27,32,43-44,49,52-54,57, 59-60,62,65,71,77,80,111,126 2,23-24 3,70 118 71 1-5,13-14,39-41,43-44,48,97-98,107,125 29,90,101-103,106,110 126 33,108 46 29,121 2,37 29,90,102,111 3,63 126 30,111
T
TAB tab order technical support Template Options Template Registry 38,103,119 103,110-111,119 6 1,21-26 4,125
ClarioNET________________________________________________________
Index
TEXT thin client Thread TIMER Times New Roman Transfer Files Trial mode TYPE
139
29,90,103-104,106,111 10,36,60,82 24,30,122 30,40,116 36 3,53 7 33,45,70,77,80,82,108
U
Uniform Resource Locator UpdatePushWindow URL USE attributes USE Attributes USE variable User Access user interface 49 78-80 15,45,48-49 29,38 2 38,75,78-79,89,96,106,119,126 2,34 11,27-28,30,37,40,45,53,87,89-90,109
W
white papers window height and width WINDOW Properties Window Size Windows 2000 Windows NT WININET.DLL WinPtr WMf Www.softvelocity.com 5 31 90 119 43,48,50 39,43,48 13,30,46 60-61,87 12,39-40,52,68-69,82,111,120 6,13,81
________________________________________________________ClarioNET
140
Index
ClarioNET________________________________________________________