Entra in Web con il tuo RPG/400! | ||||
dr. G.B. Perotti, iSeries (AS/400), IBM Italia gb_perotti@it.ibm.com | ||||
| ||||
| ||||
L'RPG è da ormai trent'anni il linguaggio più
popolare per lo sviluppo applicativo nei sistemi intermedi.
Con il Systema/3, il Systema/32, il Sistema/34, il Sistema/38,
il Sistema/36 e l'iSeries (AS/400) abbiamo dato all'informatica
una intera generazione di programmatori RPG. Non c'è quindi da meravigliarsi (come scrive Jim Utsler, associate editor della rivista NEWS/400 U.S., nel suo articolo Il futuro dell'RPG) se, mentre Java e Websphere fanno notizia, è l'RPG a far lavorare le aziende. A quanto pare, lo sviluppo in RPG si manterrà costante nel tempo, anche se lo sviluppo in Java tende ad aumentare. Il vero problema invece è che pochi programmatori RPG sanno quanto sia facile entrare nella zona e-business sfruttando le proprie conoscenze. A questo vuole provvedere in nostro articolo. Common Gateway Interface (CGI)iSeries (AS/400), come qualunque prodotto che voglia partecipare alla gara Internet, deve sottostare a dei precisi standard. Uno di questi standard, Common Gateway Interface (CGI), stabilisce il modo in cui un programma deve essere invocato da un browser remoto (navigatore Internet) ed è pienamente supportato dall'iSeries (AS/400). Questo standard consente ai programmatori iSeries (AS/400) di costruire pagine dinamiche Web utilizzando uno dei linguaggi di elezione: C++, ILE C, ILE COBOL e naturalmente ILE RPG.La mia esperienza CGI con l'RPGdata dalla primavera del 1997.Disperatamente alla ricerca di un modo per programmare pagine Web con l'AS/400, dopo ore di ricerche sotto Internet, atterrai in un sito IBM del PID (oggi PWD) di Rochester dove un certo Melvin (Mel) Rothman rendeva disponibile un suo "service program" che facilitava la scrittura di programmi CGI in RPG. Scoprii che era a dir poco geniale. Facile da usare ed estremamente flessibile. In poco tempo fui in grado di realizzare un numero incredibile di pagine Web dinamiche. Il mio entusiasmo fu così contagioso che mi fu affidato un sito Web per spargere la notizia. Questo sito Da questo sito si scaricano e si installano gratuitamente sul proprio iSeries (AS/400) dimostrazioni Web, esempi di programmi, strumenti didattici (metedologia di sviluppo CGI con RPG, HTML, JavaScript), i quali consentono un'avvio immediato alla programmazione Web. Non esistono prerequisiti, nè di hardware nè di software. Il livello di OS/400 minimo è la V3R2. La conoscenza dell'RPGIII consente di accedere immediatamente alle funzioni RPG ILE necessarie. Inoltre, per qualunque problema in merito è possibile mettersi in contatto con me (gb_perotti@it.ibm.com) ed ottenere un aiuto remoto ma gratuito, a patto di essersi registrati al mio sito. Nel resto di questo articolo vorrei introdurre la tematica CGI, così da rendere ancora più facili le cose a chi intendesse servirsene nel prossimo futuro. | ||||
Il ciclo CGIUn programma CGI ha un ciclo diverso da quello interattivo cui ci ha abituato la programmazione per workstation. Il programma CGI deve essere un programma transazionale, del tipo CICS: riceve una richiesta, effettua un lavoro, formula una risposta e se ne va: finisce, chiude, in RPG accende (se vuole) LR e ritorna.In ogni caso il programma CGI, o perchè esce con LR in "on", o perchè pur rimanendo in memoria deve azzerare le sue variabili alla chiamata successiva, in quanto essa in genere perviene da un altro utente, non mantiene memoria dello stato precedente: si dice che "non è persistente". Questo fatto pone problemi architetturali apparentemente non di poco conto. Dato che la memoria del programma ad ogni conversazione va persa, come è possibile mantenere un dialogo (interattivo) con l'utente remoto? Il problema è di facile soluzione, adottando la tecnica dello smemorato. Si tratta di nascondere dei bigliettini promemoria (campi nascosti) nella risposta HTML che il programma manda all'utente remoto. Dato che tale HTML sarà utilizzato dall'utente per formulare la prossima richiesta, l' utente, senza saperlo, trasmetterà, oltre alla nuova richiesta, le informazioni necessarie al programma per sapere che cosa gli era stato richiesto in precedenza. Sembra complicato, ma non lo è più degli hidden field delle DDS cui i programmatori RPG sono abituati da una vita. Devo aggiungere per completezza che, su iSeries (AS/400), da V4R2 è disponibile la possibilità di creare programmi CGI persistenti. In questo caso il programma ritorna al chiamante (il servente http) senza necessariamente chiudere tutto, file, path, variabili, e resta in attesa di una eventuale successiva chiamata dallo stesso utente remoto. Questo si traduce in migliori prestazioni, consente approcci di tipo Commit, ecc.. Questa tecnica, che richiede alcuni accorgimenti, è naturalmente spiegata in tutti i dettagli nel mio sito, anche se io invito a ricorrervi solo dopo una certa esperienza. Spiegato questo, veniamo al ciclo vero e proprio del programma, che può essere riassunto nei passi seguenti. Si noti che le operazioni di I/O da/a l'utente remoto (o meglio il suo browser html, Netscape, Internet Explorer, o che sia) non sono risolte da istruzioni RPG, bensì da chiamate alle API dell'http.
| ||||
Il metodo RothmanIl service program di Mel Rothman è un fantastico strumento che consente di scrivere programmi RPG per Internet (programmi CGI) in modo facilitato e con alta flessibilità di manutenzione.Tutto questo deriva da due fatti sostanziali. Usando questo service program, i programmi RPG
Impadronirsene e farne uso produttivo è questione di una giornata. Questo è il motivo per cui, chi sceglie di utilizzare questo metodo, non ha bisogno di seguire alcun corso di programmazione CGI. I risultati in termini di velocità e affidabilità di creazione sono impressionanti e la cosa è dimostrata dalla montagna di source code CGI che è possibile scaricare dal mio sito. Per dare un esempio, nell'Ottobre del 1997 mi fu chiesto di creare un sito per un convegno IBM (1998 IBM EuropeMiddleEastAfrica Server Masters) che si tenne ad Istanbul nel Gennaio 1998. Io sviluppai tutta la parte dinamica (programmi CGI), un altro mio collega tutta la parte statica. Furono realizzati quattro fronti:
Fu un successo organizzativo enorme. Non un fax, non una telefonata, solo Web. Le nostre controparti organizzative IBM non volevano credere che tutto fosse stato fatto con un AS/400! L'aver saltato con il web tutte le barriere burocratico-amministrative ebbe il non trascurabile risultato di far portare gli iscritti dal numero iniziale previsto di 1500 a praticamente il doppio. Ebbene, questa applicazione è stata recentemente da me generalizzata, ed è diventata Websiter/400 ( http://www.easy400.net/websiter ), un generatore multilinguale di siti web per eventi, ed è disponibile per scarico gratuito, corredata di tutti i simbolici, dal mio sito. | ||||
Un esempio di CGIA titolo puramente esemplificativo della tecnica CGI con il metodo Rothman, propongo il seguente programma che viene citato nella mia parte didattica. Si tratta di un programma che consente di verificare se sull'iSeries (AS/400) ci sono tutte le PTF necessarie per far funzionare ammodo l'http.Un html di bootstrap ( http://www.easy400.net/cgidevo/hello.mbr ) presenta la seguente pagina: | ||||
| ||||
Nell'html di questa pagina, c'e un form che serve per immettere i dati e chiamare il programma CGI che li elaborerà: | ||||
| ||||
In pratica, sarà invocato il programma hello1 il quale nella sua stringa di input troverà | ||||
firstname=Ermanno&lastname=Rossi | ||||
secondo il protocollo CGI. Prima di scrivere il programma hello1, come buon uso presso tutti i programmatori iSeries (AS/400), si scrivono le specifiche del device file esterno, in questo caso non le DDS di un file display, ma il membro sorgente di html che sarà gestito con il metodo Rothman: | ||||
| ||||
In questo membro sorgente di HTML esiste
un tracciato record di nome All
il quale contiene due variabili di output
FIRSTNAME e LASTNAME. Ecco ora il programma RPG ILE hello1: | ||||
| ||||
Ed ecco infine la risposta del programma, come compare all'utente remoto,
dopo che il browser Netscape o Internet Explorer (o altro) ha interpretato
l'html speditogli:
Per capire questo esempio occorre:
| ||||
Conclusioni
|