If you remember CGIDEV being clunky and cumbersome, you need to look at it now!
When IBM first released CGIDEV, I thought, "Hey, it's cool that
I can build a Web page in RPG, but its so awkward to code!" I had difficulty
imagining most RPG programmers embracing such complicated coding to build every
single page they wanted to display. Like a lot of other iSeries programmers, I
moved on to other products--such as Net.Data, Java, and WebFacing--to build
browser-based interfaces to the iSeries. But the good folks at IBM did not give
up on CGIDEV. Instead, they hid all that cool but complicated code inside
service programs! IBM calls this new version CGIDEV2, and it's the perfect
example of using the power of ILE to deliver a great tool to other programmers.
So if, like me, you remember CGIDEV and shudder, or if you have yet to try CGI
programming with RPG, take a look at CGIDEV2 now.
What Is a CGI Program?
Common Gateway Interface (CGI) has been around since
the inception of the Web. Essentially, it's a program that can be called by the
HTTP server when a remote user performs an action on a Web page, such as filling
out a form and clicking a button. The program that is called reads the input
fields from the form, performs any necessary calculations or file updates, and
then transmits a new Web page back to the remote user.
Why Use RPG?
Many languages support CGI programming, so why use
RPG? Most importantly, RPG is the premier programming language for the iSeries
server. (For COBOL enthusiasts, I believe there's a COBOL-friendly version of
CGIDEV2.) It also supports ILE, allowing for the use of service programs and
subprocedures, which is critical to the design of CGIDEV2.
Where Do I Get CGIDEV2?
IBM provides CGIDEV2 as freeware. You can download the
latest copy here. The
download includes clear instructions for installing the product on your iSeries
server. Once it's installed, you may wish to review the demo pages provided by
IBM, or you may be eager to begin developing your own pages.
Where Do I Start?
Your first step is to build a simple Web page that
will launch your first application. This page will simply include a link to the
CGI program. The same link could be included in other Web pages that you might
already have, such as a corporate home page.
Figure 1 shows the code for
a sample Web page to launch your test application. It is HTML code stored in
member GETCUS of file DEMOHTML in library CGIDEV2. You can use SEU and PDM (or
any other editor, such as LPEX) to edit this file.
Figure 1: Here's the HTML code for CGIDEV2/DEMOHTML
MBR(GETCUS).
Point your Web browser at this Web page using the
following link: http://ip-addr/cgidev2o/getcus.htm.
The HTTP
server will redirect that browser to the HTML code stores in the file you just
created and then display the page shown in Figure 2.
Figure 2: Here's your first Web page.
When the user clicks on
the Show Customers button, the HTTP server on the iSeries will launch the
program GETCUS from CGIDEV2. The action attribute of the HTML form determines
the program called
(action="/cgidev2p/getcus.pgm"). Of
course, before you can call that program, you have to write that program!
How Do I Write the RPG Code?
Use any editor to enter the RPGLE source code for the
member GETCUS of QRPGLESRC in CGIDEV2. The code for GETCUS is shown in Figure 3.
It includes a number of copy statements that pull in necessary code. These will
be included in all CGI programs.
H DFTACTGRP(*NO) ACTGRP(*NEW) /copy CGIDEV2/qrpglesrc,hspecs FCUST IF E K DISK *========================================== * Includes to be used in CGIs *========================================== /copy CGIDEV2/qrpglesrc,prototypeb /copy CGIDEV2/qrpglesrc,usec /copy CGIDEV2/qrpglesrc,variables3 *=============================== * Main line *=============================== /copy CGIDEV2/qrpglesrc,prolog3 /FREE callp gethtml('DEMOHTML': 'CGIDEV2':'GETCUS2'); callp wrtsection('top'); DoU %Eof(CUST); Read CUST; If Not %Eof(CUST); callp updhtmlvar('cname':%trim(CName)); callp wrtsection('tabrow'); EndIf; EndDo; callp wrtsection('bottom'); callp wrtsection('*fini'); /End-Free C MOVE *ON *INLR |
|
C Return
Figure 3: Here's the RPGLE code for CGIDEV2/QRPGLESRC
MBR(GETCUS).
The program uses a series of subprocedures to build the
next page to display for the user. The call to gethtml reads all of the HTML
needed to build the second Web page. This code is stored in member GETCUS2 of
DEMOHTML in CGIDEV2 and is shown in Figure 4. The call to wrtsection('top')
writes the HTML code for the top of the page into a buffer waiting to transmit
to the remote user. As each record is read in the DOU loop, the program calls
updhtmlvar to load the data in CName into the variable cname on the Web page.
Then, the call to wrtsection('tabrow') writes the data for that customer into
the buffer. After all records have been processed, the call to
wrtsection('bottom') loads the HTML code for the bottom of the page into the
buffer, and the call to wrtsection('*fini') transmits the buffer to the remote
user.
/$top Content-type: text/html Expires: 0 Get Customer Name
LIST CUSTOMER NAMES
/$tabrow | /%cname%/ |
/$bottom |
|
Figure 4: Here's the HTML code for CGIDEV2/DEMOHTML MBR(GETCUS2).
The markers /$top, /$tabrow, and /$bottom are not HTML tags, but
markers for the CGIDEV2 tool to use to identify sections of the HTML code. The
variable /%cname%/ is also not HTML; it's only a marker that the CGI program
replaces with real data. The CGI program mixes the HTML code and the live data
from the database into a text string in a buffer that is then sent to the remote
user. In this case, it builds the Web page displayed in Figure 5.
Figure 5: Here's your second Web page.
This is just the
simplest of examples, showing you how to code your own CGI programs using RPGLE
and CGIDEV2. IBM provides plenty of examples to help you expand into
increasingly sophisticated Web pages.
That Was Then, and This Is Now
No RPG programmer has any excuse for not developing
effective and exciting browser-based applications. Best of all, you can easily
adapt existing program logic from your current applications to work with
Web-based applications.
Just as an added bonus, CGIDEV2 shows off the
real power of ILE programming by delivering this great and complex tool all
neatly bundled inside ILE service programs. I may have disliked the clunky
interface of the original CGIDEV product, but that was then, and this is now! I
love the slick new interface provided by CGIDEV2.
Kevin Forsythe is the author of the new
book SQL for eServer
i5 and iSeries. He has over 18 years of experience
working with the iSeries platform and its predecessors. He has been a member of
the DMC team for the past nine years. Kevin's primary responsibility is
providing iSeries education, but he also provides customers with project
management, system design, analysis, and technical construction. In addition to
his technical skills (RPG IV, CL, OS/400, SQL, FTP, Query, VB, Net.Data), Kevin
possesses the ability to communicate new and complex concepts to his students.
He has been the primary instructor for DMC's iSeries-based AS/Credentials
training courses since 1997 and has authored courses such as Advanced ILE, SQL,
Embedded SQL, Operations Navigator, and Intro to WebSphere Studio. An
award-winning speaker, he has spoken at every COMMON Conference since the spring
of 2000.
|