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

RPG IV system i IBM – codici operativi di calcolo

MOVE – MOVEL – MOVEA

RPG ha tre codici operativi di MOVE

  • MOVE copia i dati dal fattore 2 al risultato allineandoli a destra
  • MOVEL copia i dati dal fattore 2 aI risultato allineandoli a
  • La lunghezza del campo piu’ piccolo determina la quantita’ di dati effettivamente trasferita e quindi gli eventuali troncamenti
  • RPG non inizializza il campo del risultato prima di iniziare l’ operazione di MOVE. Di conseguenza i dati trasferiti nel risultato si sovrappongono a quelli gia’ presenti.
  • Puo’ essere utilizzata un’estensione del codice operativo MOVE (P) per ripulire il contenuto del campo risultato prima di eseguire la MOVE.
  • MOVEA esegue operazioni di copia tra schiere o tra campi e schiere. Verrà esaminato quando si tratteranno le schiere.

 codici operativi di calcolo

immagine21

L’istruzione MOVE esegue automaticamente tutte le conversioni dati necessarie.
E’ possibile anche muovere un campo carattere in uno numerico. Viene in realta’ trasferita solo la porzione digit di ogni byte (il semibyte che contiene la rappresentazione della cifra in un numero zoned) dal campo carattere nella corrispondente porzione del campo numerico. L’ultimo semibyte di destra del campo carattere viene usato per impostare il segno nel campo numerico di destinazione. Se l’ultimo semibyte di destra del campo carattere contiene B o D, il campo numerico diventa negativo.

 immagine31

L’ unica differenza tra MOVEL e MOVE e’ che la copia inizia da sinistra Tutte le conversioni richieste sono eseguite automaticamente.

  • MOVE dipende dalla lunghezza del campo piu’ piccolo
  • La conversione dati e’ automatica
  • §Il campo risultato e’ inizializzato con (P)
  • §Non tiene conto del punto decimale

Leggi anche

RPG IV system i IBM – codici operativi aritmetici

RPG ILE vs Java (7), Accesso al Data Base

ibm-use

In ILE-CGI l’ accesso è nativo e completo. Si può “navigare” sulle vie d’ accesso tramite posizionamenti per chiave e letture dei record successivi e/o precedenti (i codici operativi RPG sono SETLL, SETGT, READ, READE, READP, REDPE),  o accesso random per chiave o numero relativo di record. E’ anche possibile utilizzare SQL e Open Query File (OPNQRYF), ma generalmente tali strumenti sono usati per filtrare e ridurre  la massa dei record da elaborare poi con le funzioni di accesso sopra menzionate.

In JAVA l’ accesso avviene tipicamente tramite JDBC. Questo significa che l’ accesso ad Data Base avviene tramite richiesta SQL e ricezione di un insieme di record (ovviamente come caso particolare l’ insieme può ridursi ad un solo record). Si tratta quindi di un’ elaborazione a “blocchi” che non permette “navigazione” sulle vie di accesso. Ad esempio se si deve stampare la fattura relativa ad un ordine cliente lo statment SQL richiede tutti i record dell’ archivio righe d’ ordine relative al numero d’ ordine del cliente; il programma dovrà memorizzare i dati dei record ritornati in opportune schiere e poi elaborare le schiere in sequenza, elemento per elemento. In ILE-CGI un caso del genere sarebbe gestito con SETLL e loop di READE nel quale per ogni ciclo viene elaborata una riga d’ ordine. 

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 (5) Usabilità delle funzioni del sistema operativo i5/OS

Le funzioni del sistema operativo i5/OS sono ovviamente pienamente disponibili in ambiente ILE-CGI. (immagine di repertorio non pertinente)

Viceversa JAVA “puro”, nell’ ottica della portabilità, prescinde da qualsiasi sistema operativo e di conseguenza non può far uso delle funzioni dell’ i5/OS. E’ però possibile utilizzare il Toolbox for Java che rende disponibili alcune funzioni AS/400, ma non tutte e questo soprattutto perché le funzioni richiamate vengono eseguite in un JOB separato; quindi comandi a livello di JOB come RTVJOBA, CHGJOB o che hanno validità nell’ ambito del JOB come l’ uso della libreria QTEMP, i comandi OVRXXX, ADDLIBLE ecc. non ha senso che siano utilizzati.

Lo stesso discorso vale se si utilizza il nodulo “run”

E’ da sottolineare come l’ uso del Toolbox for Java o del modulo “run” renda l’ applicazione Java non più portabile.

 

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 »