Extending Your Advanced Revelation Applications (Migration,Warehousing,Web)
Created at 24 APR 1998 04:10PM
Table of Contents
Introduction
Advanced Revelation[#I1]
OpenInsight for Workgroups[#I2]
A Note on Sharing Data Between Advanced Revelation and OpenInsight[#I3]
Low-Level Extension
Extend Your Application to Contemporary Environments[#L1]
Mid-Level Extensions
Extend Your Application to the Web[#M1]
Extend Your Data to Other Databases[#M2]
Extend Parts of Your Application to Graphical User Interface[#M3]
High-Level Extension
Port Your Entire Application to Windows[#H1]
Appendix 1
Sharing Data Between Advanced Revelation and OpenInsight[#A1A]
Program for Advanced Revelation 2.12 & Below[#A1B]
Program for Advanced Revelation 3.0 & Above[#A1C]
Appendix 2
Network Product Support Matrix[#A2]
Appendix 3
Upgrading to Advanced Revelation 3.1x[#A3]
Appendix 4
Attaching Advanced Revelation Tables to OpenInsight[#A4]
Appendix 5
Setting Up OpenInsight as a Web Server Extension[#A5]
Appendix 6
OpenInsight Form Controls and HTML[#A6]
Appendix 7
The SUBMIT Event[#A7]
Appendix 8
Internet QuickEvents[#A8]
Appendix 9
Custom Internet Procedures[#A9]
Appendix 10
Sample Code for a Custom Internet Procedure[#A10]
INTRODUCTION
Advanced Revelation
There are over 1 million licensed users of Advanced Revelation applications in the world today. This number is a testament both to Advanced Revelation as a robust, flexible development environment and to the developers who created powerful and lasting mission-critical applications with that environment. The world has changed since Advanced Revelation was first introduced in 1987 Graphical User Interface, new networks and operating systems, and the Internet are just a couple of the innovations that have moved the application development industry in new directions. Changes do not necessarily mean that Advanced Revelation applications must be abandoned. Rather, they can be extended to take advantage of the new technologies and implementations. There are three levels of extension that can be implemented, based on your organization s needs:
Low-level extension if your organization only needs to ensure that your application continues to run on contemporary networks and operating systems, and does not need to take advantage of graphical user interface, the web, or other such innovations, low-level extension is an appropriate choice.
Mid-level extension This level of extension enables you to bring your data to other databases or pieces of your application to the web or to Windows quickly and easily without disrupting the operation of your base system.
High-level extension This level of extension is appropriate for organizations who are looking to completely move their entire application to contemporary technologies.
The applications developed with Advanced Revelation are scalable, robust, mission-critical applications. As a result, organizations are sometimes reluctant to replace these applications the risk of taking a line-of-business application that works off line can be too high to justify the new features/technologies gained by the new application. If this is the case, there is a way to take advantage of new technologies incrementally, without having to change the base Advanced Revelation application by extending the application. Because you can choose the level of extension that is appropriate for your company, you can protect your investment in Advanced Revelation data and applications while, at the same time, ensuring the level of contemporary compatibility required by your organization.
OpenInsight for Workgroups
OpenInsight for Workgroups is generally considered a full-featured application development environment that is used instead of Advanced Revelation to develop Windows applications. OpenInsight is, however, can be used in conjunction with Advanced Revelation. OpenInsight offers a set of tools that extend the Advanced Revelation application development environment and provides a third tier in a client/server environment. These tools enable developers to add such functionality as multi-source data access, event-driven business logic, dynamic HTML publishing, and interactive internet access. OpenInsight provides the services that enable such new functionality to enhance a deployed Advanced Revelation application without requiring the re-engineering of the base Advanced Revelation windows, programs, or other application components.
A Note on Sharing Data Between Advanced Revelation and OpenInsight
It is possible to share data between an Advanced Revelation application and an OpenInsight application. This may, however, require a level of investment in preparing your Advanced Revelation application for concurrent access by the OpenInsight extensions. Note that there is a direct correlation between the level of extension you wish to implement, and the investment required to reach that level. Appendix 1[#A1A] highlights the steps required to prepare your Advanced Revelation application to share data, as well as some of the issues you need to consider when planning your extensions.
LOW-LEVEL EXTENSION
Extend Your Application to Contemporary Environments
Advanced Revelation pre-dates the advent of the Windows operating system. Nevertheless, the majority of Advanced Revelation users would like to continue using their application(s) while also taking advantage of the contemporary Windows environment. The same is true for networking technologies. Revelation Software has developed a series of add-on products that enable Advanced Revelation application to run on contemporary networking and client environments. The Revelation Network Products provide enhanced performance and reduce network errors for applications using the Revelation Linear Hash filing system. These three Network Products are: the Revelation Netware Loadable Module (NLM), the Revelation NT Service and the Network Performance Pack (NPP). In order to ensure the optimum performing environment it is imperative that the proper Network Product is installed. This is based upon network is installed. The rule to use in determining which network product to use is:
Development | Network Environment | Network Product | ||
Advanced Revelation 2.03+ | on a | Novell Network | then use | Revelation NLM |
Advanced Revelation 2.03+ | on a | Microsoft NT Server | then use | Revelation NT Service |
Advanced Revelation 2.03+ | on a | any other network (that supports "byte range locking") | then use | Network Performance Pack |
If you are running Windows 95 or Windows NT workstations, you are required to use the "All Networks" driver or the Revelation NLM . The All Networks driver and the Revelation NLM both resolve problems introduced with Opportunistic Locking and Write-Behind Caching implemented in Win95/WinNT.
The Network Rule must be followed without exception, otherwise you will be running your application in a non-optimal, error-prone configuration. Adhering to the Network Rule will ensure the performance and integrity of your application on the spectrum of Windows clients (3.1, 95, 98 and NT) and on your network (all versions of NT and Novell). Furthermore, because the Revelation Network Products are truly plug-in products, you can make your system instantly contemporary.
What You Need
Advanced Revelation Development no change.
Advanced Revelation Deployment no change.
Revelation Network Product Revelation NLM for Novell network, Revelation NT Service for Microsoft NT Server, or Revelation Network Performance Pack (NPP) for all other networks that support byte range locking.
Other Resources and Information
Choosing the Correct Revelation Network Product for Your Network
Network Product Support Matrix
Revelation NLM for Advanced Revelation Users
Revelation NLM Documentation
Revelation NT Service Documentation
NLM Tech FAQ
NT Service Tech FAQ
NLM Troubleshooting
Revelation NT Service Overview
Revelation NLM Technical Support Checklist for OpenInsight for Workgroups and Advanced Revelation
MID-LEVEL EXTENSIONS
Extend Your Application to the Web
You can extend your Advanced Revelation application to the web by providing access via a browser. Extending your data to the web enables you to provide information to remote users. Extending your application enables remote users to access the application itself and perform updates. For example, you might enable customers to update their contact information. Regional sales representatives could enter orders from customer sites. Remote managers could perform updates. These options are possible by providing a web front-end to portions of the Advanced Revelation application; this can be done without affecting the application itself or the network environment in which the application is running.
OpenInsight for Workgroups provides dynamic web publishing capabilities that can be used to extend your Advanced Revelation application, or portions of it, to the web. It is important to note that you must be at Advanced Revelation version 3.1x for concurrent access to Advanced Revelation. The following outlines the steps to extend Advanced Revelation data to the web via OpenInsight s dynamic web publishing capabilities:
Prepare for publishing your data to the web
Ensure that you are at Advanced Revelation version 3.1x for concurrent access. If you are not, upgrade to this version. See Appendix 3[#A3] for information on upgrading your Advanced Revelation application. If non-concurrent access is sufficient, you just need to make of copy of your data for use by your web extensions.
Acquire a copy of OpenInsight for Workgroups for each developer developing the web publishing capabilities.
Install OpenInsight on a web server that can see the Advanced Revelation tables you wish to extend. See Appendix 5[#A5] for instructions on how to set up OpenInsight as a web server.
In OpenInsight, attach the Advanced Revelation tables you wish to extend. See Appendix 4[#A4] for details on attaching Advanced Revelation tables to OpenInsight.
Create a web page with the OpenInsight Form Designer. You can use OpenInsight s Form Designer to create a static HTML page.
Launch the OpenInsight Form Designer. Create a new form.
Design your form in the usual way, dragging controls onto the form and adjusting their appearance. See Appendix 6[#A6] for information on using controls for HTML publishing.
Create a SUBMIT event for your form. HTML pages do not respond to events in the way that OpenInsight forms and controls do. You can, however, simulate events and event-handler behavior to add dynamic functionality to the HTML page. Internet-specific functionality is added to the OpenInsight form before it is converted to an HTML document. In OpenInsight we refer to this document as an OI Page. The SUBMIT event and its event handler (QuickEvent or custom Internet procedure) provide the mechanism for converting OpenInsight functionality into HTML code and for communicating with OICGI. SeeAppendix 7[#A7] for the controls that the SUBMIT event can be used for, and the QuickEvent options for the SUBMIT event.
Add Internet QuickEvents or custom Internet procedures to the form. In order to provide logic behind the controls on the HTML form, you need to add QuickEvents and/or custom Internet procedures to the form. As of version 3.5, the Internet QuickEvents include: Publish Report, Publish Document, Load HTML Form, Read Into HTML Form, and Write Into HTML Form. See Appendix 8[#A8] for information on Internet QuickEvents. OpenInsight for Workgroups also delivers several pre-defined Internet procedures (i.e. INET_REPOS, INET_RLIST, INET_TRACE). Future releases will include new Internet procedures. OpenInsight also gives you the flexibility to write your own. See Appendix 9[#A9] for information on writing custom Internet procedures.
Deploy your Advanced Revelation web front-end. When you have completed the web-front end of your Advanced Revelation application, you need to install the Web Deployment Pack (WDP) to deploy your application to an unlimited number of web browsers. (Note this does not change the implementation or licensing of your traditional networked users.)
What You Need
Advanced Revelation Development If you are at version 2.12 or below, you will need to upgrade to version 3.1x for concurrent use. If you are at version 3.1x, no change is required.
Advanced Revelation Deployment no change.
OpenInsight for Workgroups Development OpenInsight for Workgroups.
OpenInsight for Workgroups Deployment Web Deployment Pack.
Web server software that supports CGI 1.1. (If you do not have a web server, you can go to http://www.softseek.com/Internet/Web_Publishing_Tools/Servers/index.html and download free web server software so that you can experiment with OpenInsight s web capabilities.)
A browser that supports HTML 3.0.
Other Resources And Information
Getting to the Web with OpenInsight for Workgroups: a Step-by-Step Guide
New Internet Publishing Chapter from the OpenInsight for Workgroups 3.4 Guide to Application Development
Web Publishing: Using controls to pass parameters
Hybrid Applications: The Sensible First Step to Web-Enabling Critical Applications
Server Is Not Available or CGI Has No Access Rights
Licensing Guide to OpenInsight for Workgroups (also available from Revelation Software Customer Service)
Extend Your Data to Other Databases
There are a variety of reasons organizations might want to extend their Advanced Revelation data to other databases. For example, an organization may want to make data more broadly available without deploying the application itself to a larger group of people. An organization may want to use data for reporting or decision making without compromising the security or performance of the production system. Or, an organization may want to use reporting or other data management tools that don t natively access the Advanced Revelation data. Finally, an organization may also want to maintain all data from multiple sources in a single corporate data warehouse. All of these options are possible through Data Warehousing.
OpenInsight for Workgroups provides a data warehousing facility that can be used to extend Advanced Revelation data. It is important to note that you must be at Advanced Revelation version 3.1x for concurrent access to Advanced Revelation. The following outlines the steps to extend Advanced Revelation data to other databases via OpenInsight s Data Warehousing tools:
Prepare for data warehousing
Ensure that you are at Advanced Revelation version 3.1x for concurrent access. If you are not, upgrade to this version. See Appendix 3[#A3] for information on upgrading your Advanced Revelation application. If non-concurrent access is sufficient, you just need to make of copy of your data for use by your warehousing procedures.
Acquire a copy of OpenInsight for Workgroups for each developer who will be developing the data warehousing capabilities.
Install OpenInsight in a location that can see the Advanced Revelation tables you wish to extend.
In OpenInsight, attach the Advanced Revelation tables you wish to extend. See Appendix 4[#A4] for details on attaching Advanced Revelation tables to OpenInsight.
Create a warehouse procedure. The OpenInsight Create Warehouse Procedure wizard creates a warehouse procedure customizable BASIC+ code containing the logic to warehouse a native table, including the ability to: create, clear and drop the necessary warehouse tables; select native table information to add to the warehouse; and perform the actual process of data warehousing.
Start and set up options for a Warehouse Procedure. This step involves selecting the linear hash table to be warehoused. Using the wizard, select options, such as case sensitivity and defaults for LH data types, including the corresponding DataSet data types, SQL data types, etc. This step also enables you to specify the conversion necessary to turn the native table data into a format that the DataSet understands. These options are automatically stored for subsequent use by the wizard.
Create the primary table, which contains the OpenInsight single-value data, and scripts. Standard SQL scripts are then generated; these scripts can be fully customized.
Create the secondary table, containing the OpenInsight multi-value data. If there is more than one group of AMV data, then this part of the wizard process needs to be performed for each group. In this step, define the SQL table(s), and scripts are generated. These scripts can also be customized.
Create the warehouse procedure and DataSets. In this final step, the wizard creates a BASIC+ stored procedure. In addition, a DataSet is created for each warehoused SQL table. The BASIC+ stored procedure and the DataSet are both customizable.
Select the warehouse procedures to be executed. Use the OpenInsight Warehouse Manager wizard to select the warehouse procedures to be executed. At this point, you are given the option of creating new SQL tables, or dropping and recreating existing tables. The warehousing is scheduled and automatically executed at the specified time. When the warehouse procedure is executed, a page is displayed indicating the progress of the processing of the warehouse procedure. Processing can be paused or stopped by clicking the appropriate button. A history log lists the success or failure of the warehousing, and lists any errors that may have occurred.
Deploy your warehousing capabilities. Once you have created and defined your warehouse procedures, you need to install a Development-Ready Server Deployment Pack (SDP) to deploy the new capabilities. Each user executing warehousing procedures requires a properly licensed Development-Ready SDP.
What You Need
Advanced Revelation Development If you are at version 2.12 or below, you will need to upgrade to version 3.1x for concurrent use. If you are at version 3.1x, no change is required.
Advanced Revelation Deployment no change.
OpenInsight for Workgroups Development OpenInsight for Workgroups.
OpenInsight for Workgroups Deployment Develelopment-Ready Server Deployment Pack.
Other database for your data warehouse: SQL Server, Oracle, any ODBC-compliant database. For ODBC, you will also need the appropriate 16-bit ODBC drivers.
Other Resources and Information
Using the Data Warehousing Feature in OpenInsight (versions 3.3 and above)
Data Warehousing: SQL Server Specifics
Licensing Guide to OpenInsight for Workgroups (also available from Revelation Software Customer Service)
Extend Parts of Your Application to Graphical User Interface
The decision to move to a graphical user interface (GUI) does not have to be an all-or-nothing one when it comes to Advanced Revelation applications. Instead, you can easily modularize your application by porting portions of it to Windows, leaving the rest intact, and having all modules continue to work together as a single application. You could also extend the application by creating new modules that take advantage of a GUI, without changing the base application. For example, a company has an inventory tracking system that is used by the warehouse manager and the accounting department. The portion of the application used by the warehouse manager is effective and requires no updates. The accounting department, however, needs to update the user interface and to take advantage of event-orient processing. You can modularize the application by porting only the accounting portion to Windows, using OpenInsight. In this same organization, the marketing department would like to be able to use this application to enable the generation of catalogues. You could add a new module, one for use by the marketing department, using OpenInsight and thus providing new functionality in a contemporary interface. This modularization will not affect the underlying Advanced Revelation application, portions of which are still being used.
Plan for modularizaion
Develop a modularization plan. Determine which portions or modules of your application you want to port, and which elements of the application (dictionary items, programs, stored procedures, etc.) will be affected.
Prepare for modularizaion
Ensure that you are at Advanced Revelation version 3.1x. If you are not, upgrade to this version. See Appendix 3[#A3] for information on upgrading your Advanced Revelation application.
Acquire a copy of OpenInsight for Workgroups for each developer who will be developing the data warehousing capabilities.
Install OpenInsight in a location that can see the Advanced Revelation tables you wish to extend.
In OpenInsight, attach the Advanced Revelation tables you wish to extend. See Appendix 4[#A4] for details on attaching Advanced Revelation tables to OpenInsight.
Prepare for concurrent access. See Appendix 1[#A1] for details.
Create your user interface. OpenInsight has a feature called Quick Form that enables you to quickly build your forms. From there, you can add popular graphic controls, such as radio button, checkboxes, icons and bitmaps with point-and-click simplicity.
Port your business logic.
Porting programs and stored procedures from Advanced Revelation to Opensinght is easy as OpenInsight s scripting language, BASIC+, is 90% compatible with R/Basic. If you developing are a new module, the new business logic will be easy to program because you will already be familiar with the language system.
You can also move your MFS ; all you need to do is remove any stop commands (cannot be used with Windows).
What You Need
Advanced Revelation Development If you are at version 2.12 or below, you will need to upgrade to version 3.1x for concurrent use. If you are at version 3.1x, no change is required.
Advanced Revelation Deployment no change.
OpenInsight for Workgroups Development OpenInsight for Workgroups.
OpenInsight for Workgroups Deployment Server Deployment Packs or Development-Ready Server Deployment Pack.
Other Resources and Information
Converting Advanced Revelation applications to OpenInsight: Perspectives from Developers (also available from Revelation Software Customer Service)
Defining Factors of Deployment (also available from Revelation Software Customer Service)
HIGH-LEVEL EXTENSION
Port Your Entire Application to Windows
While some organizations may only want to port or extend portions of their Advanced Revelation application to a graphical user interface (GUI), others may want to invest in porting their complete application to Windows. The process of porting your entire application is very similar to that of porting portions of your application, except that the application is not modularized. The other difference is that you need not ensure your Advanced Revelation application is at 3.1x because you will not be running the old Advanced Revelation application and the new OpenInsight version concurrently.
Prepare for porting your application
Acquire a copy of OpenInsight for Workgroups for each developer who will be developing the data warehousing capabilities.
Install OpenInsight in a location that can see the Advanced Revelation tables you wish to extend.
In OpenInsight, attach the Advanced Revelation tables you wish to port. See Appendix 4[#A4] for details on attaching Advanced Revelation tables to OpenInsight.
Create your user interface. OpenInsight has a feature called Quick Form that enables you to quickly build your forms. From there, you can add popular graphic controls, such as radio button, checkboxes, icons and bitmaps with point-and-click simplicity.
Port your business logic.
Porting programs and stored procedures from Advanced Revelation to Opensight is easy as OpenInsight s scripting language, BASIC+, is 90% compatible with R/Basic.
You can also move your MFS ; all you need to do is remove any stop commands (cannot be used with Windows).
What You Need
OpenInsight for Workgroups Development OpenInsight for Workgroups.
OpenInsight for Workgroups Deployment appropriate deployment packs for your chosen deployment method: runtime, development-ready, or web.
Other Resources and Information
Converting Advanced Revelation applications to OpenInsight: Perspectives from Developers (also available from Revelation Software Customer Service)
Defining Factors of Deployment (also available from Revelation Software Customer Service)
APPENDIX 1
Sharing Data Between Advanced Revelation and OpenInsight
There are four basic steps to ensuring concurrent Advanced Revelation and OpenInsight access.
1. Ensure that your Advanced Revelation application is at the 3.1x level. For information on upgrading to Advanced Revelation 3.1x, see Appendix 4.
2. Add data types to your dictionary (OpenInsight requires data types).
3. Remove all of your indexes. (You will reapply them within OpenInsight.)
4. Clear out old dictionaries from previous versions of Advanced Revelation that have been installed.
5. If you have any periods in your field names ( field.name ), the periods need to be removed.
We have provided a two programs below, which automate steps 2 - 4 above.
Use a copy of your data
With this option, you simply copy your data, run the preparatory steps, and OpenInsight is ready to work with your data. This option works best when it s not critical that your data be up-to-the-minute; for example, with data warehousing, or if you are publishing data to the web that does not change frequently.
Simulate concurrent access to your data
With this option, you create legal copies of your fields, comment out the indicated lines in the provided program, and run the preparatory steps. Then, in OpenInsight, use only the non-dot fields. This option works best for web publishing and data warehousing extensions.
Modularize your data
If using a copy of the data is not appropriate, the preparation to share data will require a slightly higher time investment. In this case, you will need to identify those portions of your application you wish to extend, and after running the preparatory steps, modify just those windows, programs, etc. that call the required field.names.
Program for Advanced Revelation 2.12 & Below
Declare Subroutine Msg, FSMSG, Unassigned
* This routine will assist in migrating Advanced Revelation files and
* dictionaries so they can be used with OpenInsight. Specifically, this
* program will:
*
* a) Rename the file by converting any periods (".") with an underscore
* b) Rename all dictionary fields by converting periods to underscores
* c) Take off all indexes on the file and creates a record (indexes)
* that lists the indexes that were on the file; so they can be reapplied
* within OpenInsight
* d) Adds data typing to each dictionary field
* e) Cleans out any dictionary field that may have information from older
* versions of Advanced Revelation and/or RevG.
*
* Just as significant is what this program does not do. This program does
* not adjust the formulas of symbolic fields. It does not attempt to
* adjust the formulas, because a period character may have multiple meanings
* For example, if the formula is @ANS = {QTY} * {UNIT.PRICE} - it is
* obvious that {UNIT.PRICE} should be converted to {UNIT_PRICE}. However,
* if the formula was @ANS = {UNIT_PRICE} * .08 - it is obvious that the
* period is a decimal and should remain.
*
* When dealing with the formulas of calculated fields, we recommend that
* you examine each formula to determine the appropriate action. There
* are tools you can use to identify these calculated fields. If you issue
* the command:
*
* SELECT DICT.YOUR_FILE WITH FORMULA CONTAINING '.' then
* DICT YOUR_FILE
*
* The system will provide you a browse list of all symbolic fields that
* have periods in them, you can then modify the formula in the DICT window.
* This technique will save you time in examining your fomulas.
*
* Please run this program only on a backup version of your file until
* you become familiar with the effects this program will have upon your
* files. The most important effect can be on your *existing* Arev
* application. Remember, this routine will change the file and field names,
* therefore, these changes will effect your existing Arev system. (e.g. if
* you have a file that is called MY.FILE and now it is called MY_FILE, your
* Arev application will still look for MY.FILE, and you will get a file not
* found error). You should only run this routine on files that will
* be used only by OpenInsight, or if you plan on making the appropriate
* changes to your Arev application.
*
* Please be aware that this program assumes you are running in Advanced
* Revelation 2.12 or below. If you are running a previous version of
* Advanced Revelation, please run the program 'CONVERT_FROM_3PLUS'
*
* Revelation has provided the source code to this routine to allow you
* to customize the behavior of this program. The most common behavior
* you may want to change is the character that the program will use to
* replace the period ("."). This program converts periods to underscores
* ("_"). To change the character modify the following line:
TransChar = '_'
*
$Insert include,logical
$Insert include,dict.equates
Equ No$ To 0
Equ Yes$ To 1
Equ Null$ To
Equ Token_All$ To 'ALL'
Equ Token_Xref$ To '.XREF'
Indexes =
Msg("Please enter the file name to convert",'RIC',FILE,)
* Make sure the file is available
Open FILE to FileVar Else
FSMSG()
Stop
End
Convertedfile = FILE
* Only perform a rename of the file, if necessary.
if index(FILE,'.',1) then
convert '.' to transChar in convertedfile
sentence = 'renamefile ':FILE:' ':convertedfile
perform sentence
end
* Take off all indexing; store index definitions in the variable indexes
open '!':convertedfile to indexvar then
read indexes from indexvar,'*indexes' else null
end
WORK:
* Let's start working on the dictionary
DictFileName = 'DICT.':ConvertedFile
Open DictFileName To DictHandle Else
FSMSG()
Stop
End
* The dictionary is open, lets analyze each field
Done = No$
List = Null$
Select DictHandle
Loop
Readnext Key Else
Done = Yes$
End
Until Done
NewKey = Key
If Key[ 1, 1 ] # '%' And Key[ 1, 1 ] # '@' Then
Read Record From DictHandle, Key Then
Remove = No$
* First check to see if the field has any indexes
Begin Case
Case Record< D.E.Xref >
List< -1 > = Key
Remove = Yes$
*
Case Record< D.E.INDEX.FLAG >
Remove = Yes$
*
Case Record< D.E.Relational >
Remove = Yes$
*
End Case
* If an index was on null out the index information, SI.MFS will
* take care of the !FILE.
*************************************************************************************
* If you are simulating concurrent access, comment out the next 8 lines of code *
*************************************************************************************
If Remove Then
Msg( 'B119', Null$, Image, Key )
Record< D.E.Index.Flag > = Null$
Record< D.E.Xref > = Null$
Record< D.E.Relational > = Null$
Record< D.E.Related > = Null$
Record< D.E.Protect > = Null$
End
*************************************************************************************
* This section adds data types.
Validation = Record<D.E.PATTERN>
Begin Case
Case index(Record<D.E.CONV>,'$',1)
Datatype = "DOLLARS"
Case Validation = '(D)'
Datatype = "DATE"
Case Validation = '(MT)'
Datatype = "TIME"
Case Validation = '(B)'
Datatype = "BOOLEAN"
Case Validation[1,3] = '(MD'
Datatype = "INTEGER"
Case Validation = '(DT)'
Datatype = "TIMEDATE"
Case 1
Length = Record<D.E.LENGTH>
If Length then
Datatype = "VARCHAR(":Length:")"
End Else
Datatype = "VARCHAR(10)"
End
End Case
Record<D.E.GENERIC.TYPE>=Datatype
Record<D.E.PMD>=Datatype
* This section checks multivalue definitions, if it used the old
* format (e.g. M1.1) it will convert it to the proper 'M'
Record<D.E.SM> = record<D.E.SM>[1,1]
* This section clears out older dictionary information
For I = 31 to 54
Record<I>=
Next I
Convert '.' to Transchar in NewKey
Write Record To DictHandle, NewKey Then
*************************************************************************************
* If you are simulating concurrent access, comment out the next line of code *
*************************************************************************************
If Key NE Newkey Then
*************************************************************************************
Delete DictHandle, Key Else Null
End
Msg( Null$, 'DB', Image, Null$ )
End
End
End
Repeat
ClearSelect
*
* Delete ".Xref" fields.
*
Pos = 1
Loop
Key = List< Pos >
*************************************************************************************
* If you are simulating concurrent access, comment out the next 7 lines of code *
*************************************************************************************
While Len( Key )
Key := Token_Xref$
Delete DictHandle, Key Else
Null
End
Pos += 1
Repeat
*************************************************************************************
* Control Records - DICT.MFS will rebuild %fields and %protect.spec% * The indexes is a record created by this routine that documents the * indexes that were on this file. If Indexes then Write indexes to DictHandle,'indexes' else null End Delete DictHandle,'%FIELDS%' Else Null Delete DictHandle,'%PROTECT.SPEC%' Else Null **Program for Advanced Revelation 3.0 & Above** ** ** Declare Subroutine Msg, FSMSG, Unassigned * This routine will assist in migrating Advanced Revelation files and * dictionaries so they can be used with OpenInsight. Specifically, this * program will: * * a) Rename the file by converting any periods (".") with an underscore * b) Rename all dictionary fields by converting periods to underscores * c) Take off all indexes on the file and creates a record (indexes) * that lists the indexes that were on the file; so they can be reapplied * within OpenInsight * d) Adds data typing to each dictionary field * e) Cleans out any dictionary field that may have information from older * versions of Advanced Revelation and/or RevG. * * Just as significant is what this program does not do. This program does * not adjust the formulas of symbolic fields. It does not attempt to * adjust the formulas, because a period character may have multiple meanings * For example, if the formula is @ANS = {QTY} * {UNIT.PRICE} - it is * obvious that {UNIT.PRICE} should be converted to {UNIT_PRICE}. However, * if the formula was @ANS = {UNIT_PRICE} * .08 - it is obvious that the * period is a decimal and should remain. * * When dealing with the formulas of calculated fields, we recommend that * you examine each formula to determine the appropriate action. There * are tools you can use to identify these calculated fields. If you issue * the command: * * SELECT DICT.YOUR_FILE WITH FORMULA CONTAINING '.' then * DICT YOUR_FILE * * The system will provide you a browse list of all symbolic fields that * have periods in them, you can then modify the formula in the DICT window. * This technique will save you time in examining your fomulas. * * Please run this program only on a backup version of your file until * you become familiar with the effects this program will have upon your * files. The most important effect can be on your *existing* Arev * application. Remember, this routine will change the file and field names, * therefore, these changes will effect your existing Arev system. (e.g. if * you have a file that is called MY.FILE and now it is called MY_FILE, your * Arev application will still look for MY.FILE, and you will get a file not * found error). You should only run this routine on files that will * be used only by OpenInsight, or if you plan on making the appropriate * changes to your Arev application. * * Please be aware that this program assumes you are running in Advanced * Revelation 3.0 or higher. If you are running a previous version of * Advanced Revelation, please run the program 'CONVERT_FROM_PRE3' * * Revelation has provided the source code to this routine to allow you * to customize the behavior of this program. The most common behavior * you may want to change is the character that the program will use to * replace the period ("."). This program converts periods to underscores * ("_"). To change the character modify the following line: TransChar = '_' * $Insert sysinclude,logical $Insert sysinclude,dict.equates Equ Null$ To '' Equ Token_All$ To 'ALL' Equ Token_Xref$ To '.XREF' Msg("Please enter the file name to convert",'RIC',FILE,'') * Make sure the file is available Open FILE to FileVar Else FSMSG() Stop End Convertedfile = FILE * Only perform a rename of the file, if necessary. if index(FILE,'.',1) then convert '.' to transChar in convertedfile sentence = 'renametable ':FILE:' ':convertedfile perform sentence end * Take off all indexing; store index definitions in the variable indexes open '!':convertedfile to indexvar then read indexes from indexvar,'*indexes' else null end WORK: * Let's start working on the dictionary DictFileName = 'DICT.':ConvertedFile Open DictFileName To DictHandle Else FSMSG() Stop End * The dictionary is open, lets analyze each field Done = No$ List = Null$ Select DictHandle Loop Readnext Key Else Done = Yes$ End Until Done NewKey = Key If Key[ 1, 1 ] # '%' And Key[ 1, 1 ] # '@' Then Read Record From DictHandle, Key Then Remove = No$ * First check to see if the field has any indexes Begin Case Case Record< D.E.Xref > List< -1 > = Key Remove = Yes$ * Case Record< D.E.INDEX.FLAG > Remove = Yes$ * Case Record< D.E.Relational > Remove = Yes$ * End Case * If an index was on null out the index information, SI.MFS will * take care of the !FILE. * * If you are simulating concurrent access, comment out the next 8 lines of code * * If Remove Then Msg( 'B119', Null$, Image, Key ) Record< D.E.Index.Flag > = Null$ Record< D.E.Xref > = Null$ Record< D.E.Relational > = Null$ Record< D.E.Related > = Null$ Record< D.E.Protect > = Null$ End * * This section adds data types. Validation = Record<D.E.PATTERN> Begin Case Case index(Record<D.E.CONV>,'$',1) Datatype = "DOLLARS" Case Validation = '(D)' Datatype = "DATE" Case Validation = '(MT)' Datatype = "TIME" Case Validation = '(B)' Datatype = "BOOLEAN" Case Validation[1,3] = '(MD' Datatype = "INTEGER" Case Validation = '(DT)' Datatype = "TIMEDATE" Case 1 Length = Record<D.E.LENGTH> If Length then Datatype = "VARCHAR(":Length:")" End Else Datatype = "VARCHAR(10)" End End Case Record<D.E.GENERIC.TYPE>=Datatype Record<D.E.PMD>=Datatype * This section checks multivalue definitions, if it used the old * format (e.g. M1.1) it will convert it to the proper 'M' Record<D.E.SM> = record<D.E.SM>[1,1] * This section clears out older dictionary information For I = 31 to 54 Record<I>='' Next I Convert '.' to Transchar in NewKey Write Record To DictHandle, NewKey Then If Key NE Newkey Then * * If you are simulating concurrent access, comment out the next line of code * * Delete DictHandle, Key Else Null * End Msg( Null$, 'DB', Image, Null$ ) End End End Repeat ClearSelect * * Delete ".Xref" fields. * Pos = 1 Loop Key = List< Pos > * * If you are simulating concurrent access, comment out the next 7 lines of code * * While Len( Key ) Key := Token_Xref$ Delete DictHandle, Key Else Null End Pos += 1 Repeat * * Control Records - DICT.MFS will rebuild %fields and %protect.spec%
* The indexes is a record created by this routine that documents the
* indexes that were on this file.
If unassigned(Indexes) else
Write indexes to DictHandle,'indexes' else null
End
Delete DictHandle,'%FIELDS%' Else Null
Delete DictHandle,'%PROTECT.SPEC%' Else Null
APPENDIX 2
Network Product Support Matrix
For Advanced Revelation 2.03 and above
In the event that there is more than one option, an asterisk (*) is used to denote the option that offers the optimal configuration and is recommended by Revelation Software.
Network | Client | Revelation Network Product Used | Required Revelation Network Driver |
Novell 3.x or 4.x | Windows 3.x | – | NPP; NLM 1.5* |
Novell 3.x or 4.x | Windows 3.x | NLM 1.5 | IPX/Netware driver 1.5 |
Novell 3.x or 4.x | Windows 95 MS Client | – | NPP; NLM 1.5* |
Novell 3.x or 4.x | Windows 95 MS Client | NLM 1.5 | IPX/Netware driver 1.5 |
Novell 3.x or 4.x | Windows 95 Client 32 | – | NPP; NLM 1.5* |
Novell 3.x or 4.x | Windows 95 Client 32 | NLM 1.5 | IPX/Netware driver 1.5 |
Novell 3.x or 4.x | Windows 98 MS Client | – | NPP; NLM 1.5* |
Novell 3.x or 4.x | Windows 98 MS Client | NLM 1.5 | IPX/Netware driver 1.5 |
Novell 3.x or 4.x | Windows 98 Client 32 | – | NPP; NLM 1.5* |
Novell 3.x or 4.x | Windows 98 Client 32 | NLM 1.5 | IPX/Netware driver 1.5 |
Novell 3.x or 4.x | Windows NT 3.51 MS Client | – | NPP |
Novell 3.x or 4.x | Windows NT 3.51 MS Client | NLM 1.5 | not supported |
Novell 3.x or 4.x | Windows NT 3.51 Client 32 | – | NPP; NLM 1.5* |
Novell 3.x or 4.x | Windows NT 3.51 Client 32 | NLM 1.5 | IPX/Netware driver 1.5 |
Novell 3.x or 4.x | Windows NT 4.0 MS Client | – | NPP |
Novell 3.x or 4.x | Windows NT 4.0 MS Client | NLM 1.5 | not supported |
Novell 3.x or 4.x | Windows NT 4.0 Client 32 | – | NPP; NLM* |
Novell 3.x or 4.x | Windows NT 4.0 Client 32 | NLM 1.5 | IPX/Netware driver 1.5 |
Novell 5.0 | Windows 3.x | – | NPP; NLM 5.0* |
Novell 5.0 | Windows 3.x | NLM 5.0 | IPX/Netware driver 1.5 |
Novell 5.0 | Windows 95 MS Client | – | NPP; NLM 5.0* |
Novell 5.0 | Windows 95 MS Client | NLM 5.0 | IPX/Netware driver 1.5 |
Novell 5.0 | Windows 95 Client 32 | – | NPP; NLM 5.0* |
Novell 5.0 | Windows 95 Client 32 | NLM 5.0 | IPX/Netware driver 1.5 |
Novell 5.0 | Windows 98 MS Client | – | NPP; NLM 5.0* |
Novell 5.0 | Windows 98 MS Client | NLM 5.0 | IPX/Netware driver 1.5 |
Novell 5.0 | Windows 98 Client 32 | – | NPP; NLM 5.0* |
Novell 5.0 | Windows 98 Client 32 | NLM 5.0 | IPX/Netware driver 1.5 |
Novell 5.0 | Windows NT 3.51 MS Client | – | NPP |
Novell 5.0 | Windows NT 3.51 MS Client | NLM 5.0 | not supported |
Novell 5.0 | Windows NT 3.51 Client 32 | – | NPP; NLM 5.0* |
Novell 5.0 | Windows NT 3.51 Client 32 | NLM 5.0 | IPX/Netware driver 1.5 |
Novell 5.0 | Windows NT 4.0 MS Client | – | NPP |
Novell 5.0 | Windows NT 4.0 MS Client | NLM 5.0 | not supported |
Novell 5.0 | Windows NT 4.0 Client 32 | – | NPP; NLM* |
Novell 5.0 | Windows NT 4.0 Client 32 | NLM 5.0 | IPX/Netware driver 1.5 |
NT Server | Windows 3.x | – | NPP; NT Service 1.5* |
NT Server | Windows 3.x | NT Service 1.5 | all networks driver |
NT Server | Windows 95 MS Client | – | NPP; NT Service 1.5* |
NT Server | Windows 95 MS Client | NT Service 1.5 | all networks driver |
NT Server | Windows 95 Client 32 | – | NPP |
NT Server | Windows 95 Client 32 | NT Service 1.5 | not supported |
NT Server | Windows 98 MS Client | – | NPP; NT Service 1.5* |
NT Server | Windows 98 MS Client | NT Service 1.5 | all networks driver |
NT Server | Windows 98 Client 32 | – | NPP |
NT Server | Windows 98 Client 32 | NT Service 1.5 | not supported |
NT Server | Windows NT 3.51 MS Client | – | NPP; NT Service 1.5* |
NT Server | Windows NT 3.51 MS Client | NT Service 1.5 | all networks driver |
NT Server | Windows NT 3.51 Client 32 | – | NPP |
NT Server | Windows NT 3.51 Client 32 | NT Service 1.5 | not supported |
NT Server | Windows NT 4.0 MS Client | – | NPP; NT Service 1.5* |
NT Server | Windows NT 4.0 MS Client | NT Service 1.5 | all networks driver |
NT Server | Windows NT 4.0 Client 32 | – | NPP |
NT Server | Windows NT 4.0 Client 32 | NT Service 1.5 | not supported |
Byte Range Networks | Windows 3.x | – | NPP |
Byte Range Networks | Windows 95 MS Client | – | NPP |
Byte Range Networks | Windows 95 Client 32 | – | NPP |
Byte Range Networks | Windows 98 MS Client | – | NPP |
Byte Range Networks | Windows 98 Client 32 | – | NPP |
Byte Range Networks | Windows NT 3.51 Client 32 | – | NPP |
Byte Range Networks | Windows NT 4.0 MS Client | – | NPP |
Byte Range Networks | Windows NT 4.0 Client 32 | – | NPP |
APPENDIX 3
Upgrading to Advanced Revelation 3.1x
There are two ways to get to Advanced Revelation 3.1x - upgrade and trade-up. An upgrade will convert your existing system and update your aplications. A trade-up instals a new copy of Advanced Revelation 3.1 on your system the end result is two copies of Advanced Revelation on your system: your original which remains unchanged, and a brand new version 3.1 with your old serial number and with the same number of network users as your original copy. This gives you control over how your system is changed to allow it to utilize the feature available in 3.1.
Current Advanced Revelation Version | Upgrade Options | Trade-Up Options |
3.0 | 3.01 to 3.12 upgrade | n/a |
2.1 | 2.1 to 3.12 upgrade | n/a |
2.0 | 2.0 to 2.12 upgrade 2.1 to 3.12 upgrade | 1.x/2.0 to 3.12 trade-up |
1.x | n/a | 1.x/2.0 to 3.12 trade-up |
APPENDIX 4
Attaching Advanced Revelation Tables to OpenInsight
Tables can be attached to more than one database. You may have a need to attach an existing (Advanced Revelation) table to the current (OpenInsight) database application environment. You may also need to attach an existing (Advanced Revelation) table to OpenInsight for use as an application server. The following steps describe the procedure:
1. Launch OpenInsight for Workgroups.
2. From the main Application Manager window, select Database Manager from the Tools menu.
3. Select Add from the Database Manager File menu.
4. Select the appropriate drive and directory location for the table(s) you wish to add. A list of tables is displayed in the Tables list box.
5. Select each table you wish to add and click the add button. To add all of the listed tables, click the all button. The selected tables are displayed in the Add Tables list box.
6. To preview a table s schema, click either the data or schema button.
7. Click the ok button to clise the add tables dialog box.
Note: changes to the database definition are not implemented until you save the database definition.
There may be situations when you want to change the table name. If you rename the table for the current application, however, you may create problems for the Advanced Revelation applications that use the table. In this situation, you can create alias pointers in OpenInsight. The alias you specify points to a specific table residing in a specific location. In the context of your OpenInsight application or service, the table is identified with the name you specify as the alias, but the actual name of the table in the system does not change, so other applications that use the table are not affected. The following steps describe the procedure required to create table alias pointers:
1. Launch OpenInsight for Workgroups.
2. From the main Application Manager window, select Database Manager from the Tools menu.
3. Select Add from the Database Manager File menu.
4. Select the appropriate drive and directory location for the table(s) you want to create an alias for. A list of tables is displayed in the Tables list box.
5. Select the table(s) you wish to alias, and click the alias button to display the Alias Table dialog box.
6. Enter the alias for the table in the New Name text box and click the ok button. OpenInsight either closes the dialog box, or proceeds to the next selected table.
7. Repeat the alias definition for each of the selected tables. When you are finished, click the ok button. You aliases display in the Add Tables list in the Add Tables dialog box.
8. Click the ok button to close the Add Tables dialog box.
Note: changes to the database definition are not implemented until you save the database definition.
APPENDIX 5
Setting Up Openinsight as a Web Server Extension
A web server extension enables a browser to communicate with an executing program. A CGI gateway program accepts OpenInsight requests from the web server. To provide this functionality you must:
1. Copy the executable file OICGI from your OpenInsight for Workgroups directory to a directory on your web server where it can be executed as a CGI module. (Refer to your web server documentation for specifics.) Typically this is the subdirectory \CGI-BIN. Note: some web servers require that the OICGI file be renamed OICGI.EXE.
2. Install your development copy of OpenInsight for Workgroups. Unlike other web server extensions, OpenInsight can be installed on the web server or on a network drive. If OpenInsight is on a network drive, it can simultaneously be used as a web server extension and a development system.
3. Start OpenInsight from the web server. If, in the previous step, you chose to install OpenInsight on a network drive, you will need to map to the appropriate drive in order to launch OpenInsight.
4. Start the Internet Gateway Services (a gateway traffic monitoring service) on this copy of OpenInsight by executing the OpenInsight window executable INET_GATEWAY from the repository outline. To automate this step, you can set INET_GATEWAY as an entry window. (If this copy of OpenInsight is on a network and is accessed by other users, be sure you install a Collaborative Development disk for each user. When determining your user count, don t forget to include the web server as one user.)
OpenInsight is now ready to serve as a web server extension.
APPENDIX 6
OpenInsight Form Controls and HTML
Because of the nature of HTML and the web environment, there are a few things to bear in mind when creating your web page with the OpenInsight Form Designer. The first is that the Form Designer does not offer a true WYSIWYG HTML design interface. In fact, this is true of virtually all web page creation tools. For example, when you place a control in the center of a form, that control will be centered when you run the form. However, when you convert the form to HTML, that control will be flush left when viewed through a browser. This is simply the way HTML works there is no x,y coordinate positioning in HTML. The second thing to keep in mind is that not all of a control s functionality is available via the web. Following is a starter list of the controls that can be used on a web page, and some of their limitations.
Static Text HTML ignores any size, font, and color formatting applied to the text and uses the browser s default
Button
Bitmap the file must be a .GIF or a .JPG
Checkbox all checkboxes are 2-state, even if 3-state is selected
Edit Line
List Box hierarchical list boxes do not work; if this option is selected, the "code" in the text portion of your list box (indicating bitmaps and levels) will be printed as text.
Edit Box
Combo Box
Radio Button
Another thing you might want to include on your form is a hyperlink to another web page. In order to create a hyperlink, you use the static text control, and append a pipe symbol ( | ) followed by the URL of the desired link to the text property. For example, if you wanted to create a link to Revelation s web site, you would place the following into the Text property of the control:
go to our web site|http://www.revelation.com
Alternatively, you could create a link that enables a user to email Revelation s general information mailbox. In that case, you would place the following into the Text property:
click here to email|mailto:info@revelation.com
The phrases "go to our web site" and "click here to email" are automatically underlined when they are converted into hyperlinks.
APPENDIX 7
The SUBMIT Event
HTML pages do not respond to events in the way that OpenInsight forms and controls do. We can, however, simulate events and event-handler behavior to add dynamic functionality to the HTML page. Internet-specific functionality is added to the OpenInsight form before it is converted to an HTML document. In OpenInsight we refer to this document as an OI Page. The SUBMIT event and its event handler (QuickEvent or custom Internet procedure) provide the mechanism for converting OpenInsight functionality into HTML code and for communicating with OICGI.
The SUBMIT event could be used with the following controls:
Static Text is converted to a hyperlink that specifies the required OICGI call .
Button enables you to dynamically publish a report or access a static web page.
Window works in conjunction with the button controls.
The QuickEvent Options for the SUBMIT event for the above controls are:
Publish Report creates a dynamic HTML page using a report layout defined with Report Builder. (Report Builder, a wrapper for RLIST, can be run by shift double-clicking on the OpenInsight form executable ORMAIN.) The parameter REPORT_ID is the name of the report layout created in Report Builder and is defined in the window s SUBMIT event.
Read the Document performs a similar function as the hyperlink (display an HTML page) except that it uses OICGI (it will pass through the OpenInsight Internet Gateway) to access the static web page. The parameter DOC_ID is the name of the HTML document to be accessed and is defined in the window s SUBMIT event. If you want to access an HTML document that was not created with OpenInsight, simply add it to the repository.
APPENDIX 8
Internet QuickEvents
OICGI is a CGI (Common Gateway Interface) a 32-bit Windows executable that enables communication between a browser and OpenInsight. In order implement the functionality of the Internet QuickEvent Options or custom procedures, the OI Page itself must be accessed via OICGI. (If you don t access the OI Page via OICGI, you would have to manually edit the HTML form to specify the path to OICGI.) The form should be accessed via a URL that looks something like this:
http://websitename/cgi-bin/oicgi.exe/INET_REPOS?DOC_ID=FORMNAME
Here is a simple example of how to use the Internet QuickEvents that to dynamically access a report or access a static web page:
1. Create a report with Report Builder called EX_REPORT.
2. Create a form in Form Designer, called EX_FORM with two button controls. Label one Report and the other Other Doc.
3. In the SUBMIT event for the button labeled Report , choose the Publish Report QuickEvent Option.
4. In the SUBMIT event for the button labeled Other Doc, choose the Read the Document QuickEvent Option.
5. In the SUBMIT event for the form, choose the QuickEvent Option Publish Report and in the Parameters group, fill in: REPORT_ID=EX_REPORT, DOC_ID=EX_FORM
6. Save the form and use the HTML Publisher to convert it to an OI Page called EX_HTML.htm.
7. To launch the HTML page, go to the URL:
http://websitename/cgi-bin/oicgi.exe/INET_REPOS?DOC_ID=EX_FORM
APPENDIX 9
Custom Internet Procedures
The current version of OpenInsight for Workgroups delivers several pre-defined Internet procedures (i.e. INET_REPOS, INET_RLIST, INET_TRACE). Future releases will include new Internet procedures. OpenInsight also gives you the flexibility to write your own. For example, you can create a procedure that reads a specified number of rows in a table and displays them in a browser.
The first step in creating a custom Internet procedure is understanding the requirements. A BASIC+ stored procedure is an Internet procedure when all of the following are true:
The name of the stored procedure begins with INET_.
The only required parameter of the stored procedure (which must be first) is an HTTP-Request. The user does not pass anything into this parameter explicitly, but other Internet procedures use this parameter to pass things between each other.
The stored procedure is declared as a function and has as its return value HTML code. (If you looked at the variable returned, it would look like the source code of an HTML page.)
Other parameters are passed as the QUERY_STRING$ field of an HTTP-Request and have to be parsed using the Inet_QueryParam function.
The following example uses a custom Internet procedure that opens up the system table SYSREPOSTYPES, reads the first 15 records, and outputs them to the browser. While this may be a simple example, it is designed to show how the process works.
1. Go to the System Editor. Type the code included in Appendix 10. (Or go to the Knowledge Base on our web site to cut and paste the code.) Then hit F9 to compile. Save as INET_READEXAMPLE.
2. In Form Designer, open the EX_FORM form from the example in Step Four.
3. Add a new button control labeled Ad Hoc Report. In the SUBMIT event for this button, choose the QuickEvent Option Execute a Procedure.
4. In the Send Message To combobox, select the Procedure INET_READEXAMPLE. The Message combobox should contain EXECUTE, and delete any information in the Parameters combobox.
5. Save the form and use the HTML Publisher to convert the modified form into HTML. From your browser, access the OI Page with a URL that should look something like this:
http://websitename/cgi-bin/oicgi.exe/INET_REPOS?DOC_ID=EX_FORM
There will be a new button on the page labeled Ad Hoc. When this button is clicked, the custom Internet procedure will be processed, and the first 15 records of the SYSREPOSTYPES table will be dynamically published to the browser.
APPENDIX 10
Sample Code for a Custom Internet Procedure
This is code for the example in Appendix 9.
function Inet_ReadExample(request)
declare function Inet_Msg
EOF = 0
count = 0
/* CGI requires a header that tells the web server what type of document this request will be returning to the browser. In this case, the document will be text. In addition, this header must be followed by a carriage return or a line feed, or both. The next line provides this information. */
varhtml = 'Content-type: text/plain':\0A0A\
varhtml←1> = 'A Partial Listing of the Table SYSREPOSTYPES'
varhtml←1> = '(the first 15 entries)':@FM:@FM
* Open the table, read the row, and format the varhtml variable
open 'SYSREPOSTYPES' to hCur else
return Inet_Msg(request, 'An error occurred while trying to open.')
end
select hCur
loop
readnext KeyVal then
count += 1
read Row from hCur, KeyVal then
html←1> = KeyVal:" ": Row<1>:@FM: " ":Row<2>
end
if count = 15 then
EOF = 1
end
end else
EOF = 1
end
until EOF
repeat
/* Change the @FM characters to a linefeed/carriage return. This formats the output data. Note that the beginning of the varhtml variable contains the Content-type info. This must be there for this line implement the linefeed */
convert @FM to \0A\ in varhtml
return varhtml