Release 10.1A: OpenEdge Application Server:
Developing WebSpeed Applications

> ## A CGI Wrapper example

> The following shows an extract of the `process-web-reques`t procedure in the example CGI Wrapper Web object, `w-forcst.w`.:

> w-forcst.w
>     PROCEDURE process-web-request :

>       RUN output-header.

>       {&OUT}
>         "<HTML>":U SKIP
>         "<HEAD>":U SKIP
>         "<TITLE> Sports Customer List </TITLE>":U SKIP
>         "</HEAD>":U SKIP
>         "<BODY BGCOLOR=~"#FFFFFF~">" :U SKIP
>         .

>       /* Output your custom HTML to WEBSTREAM here (using {&OUT}).      */

>       {&OUT}
>         "<H1>Customer List</H1>":U SKIP
>         "<TABLE BORDER>":U SKIP
>         "<TR>":U SKIP
>         "   <TH>Customer ID</TH>":U SKIP
>         "   <TH>Customer Name</TH>":U SKIP
>         "   <TH>Phone Number</TH>":U SKIP
>         "</TR>":U SKIP
>         .

>       FOR EACH Customer:
>         {&OUT} "<TR>":U SKIP
>                "    <TD ALIGN=LEFT>":U CustNum "</TD>":U SKIP
>                "    <TD ALIGN=LEFT>":U Name "</TD>":U SKIP
>                "    <TD ALIGN=LEFT>":U Phone "</TD>":U SKIP
>                "</TR>"
>                .
>       END.

>       {&OUT}
>         "</TABLE>":U SKIP
>         "</BODY>":U SKIP
>         "</HTML>":U SKIP
>         .

>     END PROCEDURE.

> This Web object is equivalent to `w-sstcst.html`, but instead of HTML it is written entirely in SpeedScript. The example shows a single procedure from `w-forcst.w` (omitting some comments) called `process-web-request`. (A procedure is a block of SpeedScript code that you execute by name using a `RUN` statement. Its capabilities are like those of procedures in Pascal or of subroutines in other languages.)

> The `process-web-request` procedure is executed in every SpeedScript Web object that responds to a Web request and contains the main-line code for satisfying the request. Thus, `process-web-request` also functions as a method of the Web object. WebSpeed provides two different templates for `process-web-request`, one for CGI Wrapper Web objects and one for HTML-mapping Web objects.

> Note: A method performs a generic action associated with an object, and is available to perform that action for all instances of the object. In WebSpeed, many procedures function like methods and are therefore known as method procedures.

> Aside from being coded entirely in SpeedScript, the main functional difference between `w-forcst.w`. and `w-sstcst.html` is the `process-web-request` method procedure. This procedure allows a Web object to make itself state aware and thus manage state-persistent WebSpeed transactions. For more information on WebSpeed transactions and Web object states, see Chapter 7, " Controlling WebSpeed Transactions."

> In this case, `process-web-request` generates the entire Web page to satisfy the request, including all HTML and associated data. First, it runs the `output-header` procedure to generate the HTTP header for the page. It then reads the Customer table of the sample Sports2000 database (using the `FOR EACH` statement). It builds an HTML table listing the ID number, name, and phone number for each Customer record in the database table.

> The end result is a tabulated list displayed as a page on the Web browser. It is identical to the output from `w-sstcst.html` that is shown in Figure 2–1.

> To create a CGI Wrapper Web object in the AppBuilder, you select CGI Wrapper in the File New dialog box. A template comes up in the AppBuilder Section Editor. The code in bold text in `w-forcst.w`. shows all the code that you enter to create it. The code between quotation marks is plain HTML entered as SpeedScript character strings.

> The `{&OUT}` symbol is WebSpeed syntax that initiates output to a Web page using a preprocessor variable. You can find the actual SpeedScript definition for `OUT` (the preprocessor name) in the `install-path``/src/web/method/cgidefs.i` file installed with WebSpeed. This is an include file (source code file) shared by all Web objects. For more information about `{&OUT}`, see the OpenEdge Development: Progress 4GL Reference .

> A SpeedScript statement is always terminated by a period (.) or colon (:); so a period terminates each chunk of HTML started with the `{&OUT}` reference. The `:U` is a flag that tells the translation tool, Translation Manager, not to select this particular string for translation. The `SKIP` option begins a new line in the Web page. Notice the use of the tilde (`~)`, the SpeedScript escape character, in the `BGCOLOR` attribute statement. The interior quotation marks are preceded by the escape character so they will not be misinterpreted as end quotes.

Copyright © 2005 Progress Software Corporation www.progress.com Voice: (781) 280-4000 Fax: (781) 280-4095