RPG IV system i IBM – codici operativi aritmetici

  • ADD
  • SUB
  • MULT
  • DIV
  • MVR
  • XFOOT
  • SQRT
  • Z-ADD
  • Z-SUB

Questi codici operativi sono validi solo se eseguiti su campi numerici. I calcoli tengono conto del segno che viene determinato secondo le regole algebriche

esempi

immagine4

Nei calcoli aritmetici l’attenzione deve essere focalizzata sulla definizione dei campi risultato che devono essere grandi a sufficienza per ricevere il valore calcolato ed i suoi decimali

ADD – SUB

immagine5

Nell’ esempio sopra riportato se il contenuto di PayReg deve essere sommato al contenuto di YTDPay l’operazione di ADD puo’ essere semplificata usando solo fattore 2 e risultato La figura mostra le due sintassi a confronto. Sono, dal punto di vista dell’RPG perfettamente equivalenti

MVR

immagine61

MVR muove il resto dell’operazione D immediatamente precedente nel campo del risultato Non devono essere usati Fattore i e Fattore 2

immagine7

  • SQRT calcola la radice quadrata di un numero (fattore 2)
  • Z-ADD azzera il campo risultato e vi aggiunge il fattore 2. Puo’ essere usato per azzerare un campo
  • Z-SUB azzera il campo risultato e vi sottrae il fattore 2 Puo’ essere usato per cambiare il segno di un numero

Problemi / Soluzioni RPG IV, System i IBM

Se dovessimo scrivere un programma che stampa un prospetto con l’indicazione del numero totale di impiegati e, per ciascuno di essi il nome, il codice, il dipartimento ed il tipo di lavoro che svolge, potremmo partire da una pseudocodifica simile a quella sotto riportata:

  • Stampa l’intestazione
  • Legge un record dell’impiegato
  • Ripeti mentre esistono altri record
    – Conta ogni record impiegato letto
    – Leggi un record dell’impiegato
  • Fine ripeti
  • Stampa il numero totale di impiegati
    Termina il programma

Terminologia
CAMPO – e’ una variabile di programma, corrisponde alla locazione di memoria in cui possono essere memorizzati i dati. I campi devono avere un nome lungo fino a 10 caratteri, la cui iniziale deve essere alfabetica (Da A a Z, $, §, @, _ (underscore)) mentre il resto puo’ essere alfabetico (Da A a Z,$. §, @) o numerico (da 0 a 9). Gli spazi non sono consentiti. Al campo deve essere assegnata una lunghezza ed un tipo dati. E’ possibile anche definire un campo a lunghezza variabile. In tal caso va definita la sua lunghezza massima.
La logica elaborativa puo’ essere definita dal compilatore o dal programmatore. Se si lascia gestire la logica di programma dal compilatore il programma RPG utilizza il CICLO. Il ciclo RPG consiste in una serie di passi predefiniti ed eseguiti automaticamente
• Scrittura d righe di testata e di dettaglio
• Lettura del record di input
• Esecuzione dei calcoli di totale
• Scrittura delle righe di totale
• Controllo dell’indicatore di LR (ultimo record)
• Assegnazione dei dati letti nelle variabili di programma
• Esecuzione dei calcoli di dettaglio

Il programmatore gestisce solo le operazioni eseguite in ciascuno di questi passi.
Quando la logica applicativa e’ controllata dal programmatore si parla di elaborazione procedurale. In questo caso il programma non esegue nulla in automatico, i file definiti nel programma sono dichiarati come “fuli procedural” e l’input o l’output su di essi e’ controllato con espliciti codici operativi (READ, CHAIN, WRITE, UPDATE …).

Specifiche RPG IV System i IBM

Tipologie di specifiche

  • Sette tipi di Specifiche
    – (H) Specifiche di controllo
    – (F) Specifiche di descrizione file
    – (D) Specifiche di definizione
    – (I) Specifiche di Input
    – (C) Specifiche di calcolo
    – (O) Specifiche di output
    – (P) Specifiche di procedure
  • Funzioni predeterminate
  • Opzionali
  • Posizionati/formato libero

Il programma RPG IV è composto da differenti tipi di specifiche. In particolare ne esistoneo sette. Ogni programma usa una combinazione di queste specifiche ma non necessariamente tutte. La maggior parte dei programmi richiedono solo le specifiche F di definizione dei file, le specifiche D di definizione dei dati e le specifiche C di calcolo. Le altre possono essere utilizzate per particolari funzioni
Le specifiche devono essere inserite in un preciso ordine H,F,D,I,C,O e P
(H) La specifica di controllo fornisce al compilatore informazioni circa la creazione e l’esecuzione del programma. Ad esempio il nome del programma o il formato di default della data.
(F) Le specifiche di descrizione dei file definiscono i file usati nel programma. Tali file sono ulteriormente definiti quando il programma viene compilato usando la descrizione esterna dei file. Se il file non e’ descritto esternamente sono invece richieste le specifiche I e O per descriverne il tracciato record rispetticanebte in input ed in output.
(D) Le specifiche di definizione dei dati descrivono campi, strutture dati e costanti con nome.

(I) Le specifiche di input definiscono i campi dei file di database. Sono necessarie solo per utilizzare file non descritti esternamente o per rinominare icampi di file descritti esternamente.
(C) Le specifiche di calcolo determinano la logica di programma e descrivono i calcoli eseguiti sui dati.
(O) Le specifiche di output descrivono i records di output. Anche queste specifiche in genere non sono necessarie per file descritti esternamente.
(P) Le specifiche di procedure descrivono l’interfaccia associata ad una procedura. Le procedure sono simili come concetto alle subroutine in quanto sono pezzi di codice che puo’ essere richiamato in esecuzione dalla logica principale del programma.
(D) Le specifiche di definizione possono essere usate all’ interno di gruppi di specifiche P per definire le variabili usate da una sottoprocedura.
(C) Le specifiche di calcolo possono essere usate all’ interno di gruppi di specifiche P per indicare le operazioni di calcolo eseguite nella procedura.

Programmazione RPG CGI

Cosa cambia nella programmazione se si vuole andare in WEB con il linguaggio RPG?
Concettualmente un programma RPG per il WEB deve solo sostituire l’ I/O per il device WORKSTN con l’ I/O verso il browser.
Quindi invece di emettere e ricevere in input formati di un display file deve emettere e ricevere pagine HTML.
Tutto il resto, accesso al data base, logica di calcolo, utilizzo delle funzioni di sistema operativo (autorizzazioni, comit, lock di record, override, lista di librerie, spool ecc.) rimane invariato, a differenza di quanto avviene con altre tecniche

C’ è una discreta analogia tra la gestione dell’ I/O di pagine HTML e quella di un display file gestito internamente. Infatti:

DSPF

  • Lettura record READ + Specif. di input
  • Scrittura record EXCEPT + Specif. di output

HTML

  • Lettura record campo = zhbgetvar(‘campo’)
  • Scrittura callp updhtmlvar(‘campo’:campo) + callp wrtsection(‘formato ‘)

 

Anche la gestione delle varie pagine HTML è del tutto analoga a quella dei DSPF.
Infatti:

  • Anche le pagine HTML sono definite esternamente ai programmi
  • Sono organizzate in “sezioni” del tutto analoghe ai formati dei display file

Ci sono però alcune differenze nella realizzazione di alcune funzioni o effetti come:

  • Subfile – non tanto nella visualizzazione quanto per le tecniche legate ai codici operativi READC, CHAIN e UPDATE
  • Sovrapposizione di formati e finestre
  • Attributi condizionati da indicatori

Un’ altra differenza importante sta nel flusso elaborativo del programma
Infatti per poter emettere una pagina il programma deve andare a fine lavoro (RETURN con LR spento) e successivamente per leggerla riparte dalla prima istruzione di calcolo.
Occorre quindi “veicolare” opportunamente la sequenza elaborativa del programma, per esempio con un tipo record che individui il formato appena letto ed instradi opportunamente la sequenza elaborativa del programma.

Rispetto ad un DSPF la pagina HTML ha funzionalità e gradi di libertà molto maggiori
Un tradizionale campo (di input, output o input-output) ha anche attributi relativi al font, allo stile, alla dimensione del carattere, al colore, alla dimensione e colore del bordo, al colore dello sfondo.
Oltre ai campi nella pagina possono essere presenti altri elementi del tutto nuovi rispetto ai DSPF come link, immagini, filmati, suoni, menu a tendina, check box, effetti grafici ecc..

 Quello che è importante è il fatto che il programma RPG ha il pieno controllo di tutte queste nuove funzionalità, nel senso che può attivarle o no od impostarne l’ opportuna modalità di rappresentazione al verificarsi o meno di certe condizioni applicative.
Questo è di fondamentale importanza. Questo vuol dire avere un programma WEB.
Sul mercato ci sono dei software che intercettano le stringhe 5250 emesse dal programma e le trasformano in html, dando l’ impressione di avere un programma WEB. In realtà non è così perché il programma continua a vedere i formati 5250 e non può pilotare funzionalità che il 5250 non ha. E’ come vedere un film in bianco e nero e, mettendosi lenti colorate, illudersi che il film sia a colori.

RPG ILE vs Java (6), Utilizzo descrizione esterna dei file

ap_ibm_071112_ms

L’ utilizzo della descrizione esterna dei file è ovviamente completo nel caso ILE-CGI.

Nel caso JAVA (in tutti i casi) occorre distinguere se l’ accesso al data base avviene direttamente o (più frequentemente) tramite driver JDBC. Nel primo caso l’ utilizzo della descrizione esterna dei file è nulla. Questo significa che nel caso di cambiamento del tracciato record dei file data base il tutto va riportato manualmente, in molti casi anche tre volte: a livello di pagina HTML, di programma, e di interfaccia XML. Se viceversa si utilizza il driver JDBC l’ effetto della mancanza di descrizione esterna crea problemi solo nel caso di cambiamento di tipologia di campo (numerico, alfanumerico ecc.) per il quale occorre intervenire manualmente sul programma.

 

Creare programma RPG AS/400

immagine1

 Il codice sorgente del programma RPG può essere inserito nel sistema utilizzando l’editor Source Entry Utility (SEU) o il prodotto WebSphere Development Studio Client (editor sul PC). Il membro sorgente cosi’ ottenuto puo’ essere tradotto in linguaggio macchina tramite la compilazione. Se non sono incontrati errori di sintassi, il programma viene compiiato e puo’ essere testato. Si puo’ verificare in questa fase qualche errore di logica. In altre parole il programma potrebbe essere sintatticamente corretto, ma potrebbe comportarsi in madiera diversa da quella voluta. In questo caso bisogna correggere il sorgente utilizzando sempre l’editor e ricompilare il programma.

  • Il sorgente di un quaIsiasi oggetto AS/400 compilabile deve essere inserito in un file sorgente.

 

  • Un file sorgente e’ un tipo particolare di file di database, caratterizzato da un tracciato record specifico per l’uso da parte dei compiiatori e da uno spazio dati suddiviso in membri, uno per ciascun sorgente. Il tracciato record dei file sorgente e’ composto da tre campi: numero di specifica, data di immissione o modifica della singola specifica e dati sorgente. Quest’ultimo campo può avere una lunghezza definibile dall’ utente, mentre i primi due hanno ciascuno una lunghezza di 6 caratteri.

 

  • Il comando CL CRTSRCPF crea un file sorgente nella libreria desiderata. Per esempio
    CRTSRCPF FILE(LIBA/QRPGLESRC) RCDLEN(112)
    crea un file sorgente per RPG IV nella libreria LIBA. La lunghezza complessiva del record è di 112 e quindi il campo dati è lungo 100 caratteri

immagine2

  • La creazione di un programma RPG consta concettualmente di due fasi:
    – La creazione di un oggetto di tipo modulo
    – La creazione, partendo dal modulo, del programma eseguibile

 

  • CRTBNDRPG crea in un unico passo un programma eseguibtle

 

  • Il modulo e’ un nuovo oggetto AS/400 introdotto con i compilatori ILE.

 

  • L’oggetto MODULE creato da comando CRTBNDRPG e’ automaticamente cancellato dopo che l’oggetto *PGM e’ stato creato

 

  • Il comando CRTBNDRPG viene direttamente richiamato dall opzione 14 del PDM su membri sorgente d tipo RPGLE.

 

  • Un programma può contenere più moduli ciascuno dei quali corrisponde ad un membro sorgente. Nel caso ne contenga uno solo può essere utilizzato il comando CRTBNDRPG. In questo corso considereremo solo il caso di programmi con un solo modulo.

immagine3

ILE CGI vs Java (4) – Separazione della logica di presentazione dalla logica di elaborazione

Su questo punto è nato un grosso equivoco.

Chi propaganda JAVA fa notare ad ogni occasione che la programmazione CGI per il WEB ha all’ interno del programma la costruzione della pagina HTML da visualizzare, con la conseguenza che ogni volta che si debba modificare l’ aspetto grafico occorra metter mano al programma. La logica di presentazione sarebbe quindi all’ interno della logica elaborativi.

Ma questo è vero solo per il generico CGI che dialoga con l’ HTTP Server senza particolari accorgimenti, un po’ come farebbe un RPG 5250 che pilotasse direttamente il video senza usare le DDS. Viceversa il caso che stiamo confrontando con JAVA è quello di CGI arricchito dall’ apposito Open Source fornito dalla stessa IBM. Con l’ utilizzo di tale Open Source la definizione della pagina HTML è esterna al programma in modo del tutto analogo a quanto avviene con l’ uso delle DDS 5250. La logica di presentazione…

 

Leggi il seguito di questo post »