02
Sat, Nov
2 New Articles

TechTip: Build Web Pages with RPG and CGIDEV2

RPG
Typography
  • Smaller Small Medium Big Bigger
  • Default Helvetica Segoe Georgia Times

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.

                                                 
Get Customer Name                  
                                                 
                                                 
      
  
                                              
  

GET CUSTOMER NAME

                            

  
                                                  

  
                                                  

  
  
                                                 

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.

http://www.mcpressonline.com/articles/images/2002/My%20First%20Web%20Page%20with%20RPG%20and%20CGIDEV2--V4--07010500.png

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.

                      

/$bottom                                         
  
/$top                                                   
Content-type: text/html                        
Expires: 0                  
                         
                               
Get Customer Name                   
                                                  

  
                               
  

LIST CUSTOMER NAMES

                    

          

/$tabrow                                        
  
/%cname%/
                                        
 

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.

http://www.mcpressonline.com/articles/images/2002/My%20First%20Web%20Page%20with%20RPG%20and%20CGIDEV2--V4--07010501.png

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.

BLOG COMMENTS POWERED BY DISQUS

LATEST COMMENTS

Support MC Press Online

$

Book Reviews

Resource Center

  • SB Profound WC 5536 Have you been wondering about Node.js? Our free Node.js Webinar Series takes you from total beginner to creating a fully-functional IBM i Node.js business application. You can find Part 1 here. In Part 2 of our free Node.js Webinar Series, Brian May teaches you the different tooling options available for writing code, debugging, and using Git for version control. Brian will briefly discuss the different tools available, and demonstrate his preferred setup for Node development on IBM i or any platform. Attend this webinar to learn:

  • SB Profound WP 5539More than ever, there is a demand for IT to deliver innovation. Your IBM i has been an essential part of your business operations for years. However, your organization may struggle to maintain the current system and implement new projects. The thousands of customers we've worked with and surveyed state that expectations regarding the digital footprint and vision of the company are not aligned with the current IT environment.

  • SB HelpSystems ROBOT Generic IBM announced the E1080 servers using the latest Power10 processor in September 2021. The most powerful processor from IBM to date, Power10 is designed to handle the demands of doing business in today’s high-tech atmosphere, including running cloud applications, supporting big data, and managing AI workloads. But what does Power10 mean for your data center? In this recorded webinar, IBMers Dan Sundt and Dylan Boday join IBM Power Champion Tom Huntington for a discussion on why Power10 technology is the right strategic investment if you run IBM i, AIX, or Linux. In this action-packed hour, Tom will share trends from the IBM i and AIX user communities while Dan and Dylan dive into the tech specs for key hardware, including:

  • Magic MarkTRY the one package that solves all your document design and printing challenges on all your platforms. Produce bar code labels, electronic forms, ad hoc reports, and RFID tags – without programming! MarkMagic is the only document design and print solution that combines report writing, WYSIWYG label and forms design, and conditional printing in one integrated product. Make sure your data survives when catastrophe hits. Request your trial now!  Request Now.

  • SB HelpSystems ROBOT GenericForms of ransomware has been around for over 30 years, and with more and more organizations suffering attacks each year, it continues to endure. What has made ransomware such a durable threat and what is the best way to combat it? In order to prevent ransomware, organizations must first understand how it works.

  • SB HelpSystems ROBOT GenericIT security is a top priority for businesses around the world, but most IBM i pros don’t know where to begin—and most cybersecurity experts don’t know IBM i. In this session, Robin Tatam explores the business impact of lax IBM i security, the top vulnerabilities putting IBM i at risk, and the steps you can take to protect your organization. If you’re looking to avoid unexpected downtime or corrupted data, you don’t want to miss this session.

  • SB HelpSystems ROBOT GenericCan you trust all of your users all of the time? A typical end user receives 16 malicious emails each month, but only 17 percent of these phishing campaigns are reported to IT. Once an attack is underway, most organizations won’t discover the breach until six months later. A staggering amount of damage can occur in that time. Despite these risks, 93 percent of organizations are leaving their IBM i systems vulnerable to cybercrime. In this on-demand webinar, IBM i security experts Robin Tatam and Sandi Moore will reveal:

  • FORTRA Disaster protection is vital to every business. Yet, it often consists of patched together procedures that are prone to error. From automatic backups to data encryption to media management, Robot automates the routine (yet often complex) tasks of iSeries backup and recovery, saving you time and money and making the process safer and more reliable. Automate your backups with the Robot Backup and Recovery Solution. Key features include:

  • FORTRAManaging messages on your IBM i can be more than a full-time job if you have to do it manually. Messages need a response and resources must be monitored—often over multiple systems and across platforms. How can you be sure you won’t miss important system events? Automate your message center with the Robot Message Management Solution. Key features include:

  • FORTRAThe thought of printing, distributing, and storing iSeries reports manually may reduce you to tears. Paper and labor costs associated with report generation can spiral out of control. Mountains of paper threaten to swamp your files. Robot automates report bursting, distribution, bundling, and archiving, and offers secure, selective online report viewing. Manage your reports with the Robot Report Management Solution. Key features include:

  • FORTRAFor over 30 years, Robot has been a leader in systems management for IBM i. With batch job creation and scheduling at its core, the Robot Job Scheduling Solution reduces the opportunity for human error and helps you maintain service levels, automating even the biggest, most complex runbooks. Manage your job schedule with the Robot Job Scheduling Solution. Key features include:

  • LANSA Business users want new applications now. Market and regulatory pressures require faster application updates and delivery into production. Your IBM i developers may be approaching retirement, and you see no sure way to fill their positions with experienced developers. In addition, you may be caught between maintaining your existing applications and the uncertainty of moving to something new.

  • LANSAWhen it comes to creating your business applications, there are hundreds of coding platforms and programming languages to choose from. These options range from very complex traditional programming languages to Low-Code platforms where sometimes no traditional coding experience is needed. Download our whitepaper, The Power of Writing Code in a Low-Code Solution, and:

  • LANSASupply Chain is becoming increasingly complex and unpredictable. From raw materials for manufacturing to food supply chains, the journey from source to production to delivery to consumers is marred with inefficiencies, manual processes, shortages, recalls, counterfeits, and scandals. In this webinar, we discuss how:

  • The MC Resource Centers bring you the widest selection of white papers, trial software, and on-demand webcasts for you to choose from. >> Review the list of White Papers, Trial Software or On-Demand Webcast at the MC Press Resource Center. >> Add the items to yru Cart and complet he checkout process and submit

  • Profound Logic Have you been wondering about Node.js? Our free Node.js Webinar Series takes you from total beginner to creating a fully-functional IBM i Node.js business application.

  • SB Profound WC 5536Join us for this hour-long webcast that will explore:

  • Fortra IT managers hoping to find new IBM i talent are discovering that the pool of experienced RPG programmers and operators or administrators with intimate knowledge of the operating system and the applications that run on it is small. This begs the question: How will you manage the platform that supports such a big part of your business? This guide offers strategies and software suggestions to help you plan IT staffing and resources and smooth the transition after your AS/400 talent retires. Read on to learn: