Lost Bob Blog (TG&OS)

giugno 16, 2007

System I : L’ importanza delle Api

Filed under: Programmazione,System I — lostbob @ 7:48 pm

Spesso non si è neanche a conoscenza dell’ esistenza delle Api su System I e altrettanto spesso sembra troppo difficile utilizzarle.

Il primo approccio può sembrare ostico , ma superato il primo scoglio il loro utilizzo diventa facile. Andando sull’ Information Center dell’ Ibm sotto la voce Programming si trovano tutte le api divise per categoria.

Per ogni api si trova una descrizione , i parametri di input e come viene ritornato l’output (in alcuni casi l’Api richiede uno user space). Il problema principale nel caso si usi Rpg come linguaggio è trovare il giusto tipo di dati , infatti un campo 4b dell’api non significa un campo 4b 0 in Rpg, ma un campo numerico lungo 4 byte , convertibile in Rpg come 10 i 0 ossia un campo intero di 10 cifre.

In questo redbook ci sono esempi di accesso alle api e se scaricate le varie utility e service program da tools400.de (ne ho parlato qui) troverete ottimi esempi e anche aiuti per l’utilizzo delle api.

Perche sbattersi tanto?

Facciamo un paio di esempi pratici.

Primo esempio : accesso alle informazioni dei lavori

Qualche tempo fa mi fu chiesto di creare una procedura che monitorasse i lavori batch in stato Msgw e Lckw e mandasse una mail con i dati del lavoro.

La mia prima proposta era di assumere una stagista giovane che monitorasse i lavori, stranamente la soluzione fu immediatamente cestinata.

Come “analisi” mi fu detto : fai una stampa dei lavori attivi, la metti su un file te lo leggi e poi nel caso mandi la mail.

La cosa mi provocò un brivido lungo tutta la spina dorsale. Sapevo che c’era una soluzione migliore e più elegante e l’ho trovata nell’api QUSLJOB . L’utilizzo dell’api prevede l’output su di uno userpace , per fortuna il srvpgm Qbasics1 (sempre tools400.de) contiene dei wrapper per le api dello user space.

Il flusso logico diventava quindi:

  1. Creazione dello user space
  2. Chiamata dell’Api QUSLJOB
  3. Lettura dello user space per i lavori
  4. Invio della mail in caso di lavori nello stato LCKW o MSGW
  5. Goto 1 ;-)

I vantaggi rispetto al metodo del file di spool , ed in genere per l’utilizzo delle Api:

  • Maggiore velocità
  • Maggiore flessibilità
  • Stabilità dei parametri rispetto all’ouput del comando

Sull’ ultimo punto è importante riflettere , facilmente l’output del comando WRKACTJOB può cambiare , mentre per le Api c’è una maggiore attenzione alla retro compatibilità ed eventuali parametri aggiuntivi saranno aggiunti alla fine oppure in altri formati. Sicuramente QUSLJOB non è l’api giusta per cominciare.

Il tempo che ho risparmiato nello scrivere il programma attraverso questo metodo l’ho utilizzato per migliorarlo , ad esempio per evitare di mandare un alert più volte per lo stesso lavoro.

Secondo esempio : reperire lo stato del controllo di sincronia.

Mi sono trovato ad inserire in un trigger la chiamata ad una procedura esterna che doveva aggiornare un file. Il problema principale era quello dello stato del commit , la procedura esterna doveva essere coerente nell’ambito in cui veniva chiamata , ossia se il controllo di sincronia era attivo doveva effettuare gli aggiornamenti sotto commit altrimenti doveva farli senza.

Il trigger tra i parametri in ingresso ha già l’informazione dello stato del controllo di sincronia , ma non volevo dipendere da un parametro passato.

Mi fu detto che reperire queste informazione era impossibile , ma invece ecco venire in aiuto QTNRCMTI.

Quest’api torna le informazioni sullo stato del controllo di sincronia ossia se è a livello di activation group oppure di lavoro , il lock del commit (*Chg *All ecc.) e altre informazioni.

Con poche specifiche ho risolto il problema elegantemente rendendo la procedura indipendente dal controllo di sincronia.

Semplifichiamo la vita ai programmatori : il wrapping

Quando si prende dimestichezza con le Api , il loro uso sarà sempre più frequente, le difficoltà iniziali sono state superate , ma nel caso delle Api è meglio semplificare la vita a chi dovrà utilizzarle.

Per esempio nel caso del reperimento del controllo di sincronia , l’informazione che interessa maggiormente è se questo è attivo oppure no , allora perchè non creare una semplice procedura esterna che torni un valore booleano come true o false ? Sicuramente il proliferare di chiamate a QTNRCMTI nei programmi non ha molto senso e rende i sorgenti più complessi , molto meglio una chiamata ad una procedura wrapper tipo IsCommitActive() , le cose semplici sono quelle più utilizzate.

Se per esempio ci fosse bisogno di utilizzare QUSLJOB in molti programmi sarebbe meglio creare una procedura che crei la lista sullo user space in base ai parametri passati ed una che iteri attraverso lo user space ad esempio così:

JobListInit(par1:par2:…);

dow JobListGetNext(out:..);

enddo;

Molto semplice ed eviterà che sviluppatori troppi pigri utilizzino l’obbrobriosa tecnica dell’output su spool , il suo trasferimento su file ecc… ecc…

Note:

Mi scuso in anticipo nel caso di errori o mancanze , non ho un System I a casa. Nel caso foste abbonati a System I News , potete trovare ottimi articoli sulle api.

Sottofondo musicale : ZZ Top – Fandango!

giugno 6, 2007

System I : Siti utili : www.scottklement.com

Filed under: System I,System I - Open Source — lostbob @ 7:11 pm

Scott Klement nel mondo System I rappresenta uno dei guru.

Ho conosciuto il suo sito , quando ho dovuto sviluppare un interfaccia di comunicazione con un software residente su pc.

La scelta progettuale di base fu , purtroppo , lo scambio di file di testo via ftp. La modalità in cui avrei dovuto gestire l’ftp tramite i programmi era la cosidetta modalità batch , ossia creazione di file In in Qtemp con le istruzioni , poi di seguito il parsing del file out sempre in qtemp per vedere i risultati. Visto i tipi di controlli che dovevano essere fatti , la cosa mi sembrò folle. Sapevo che era possibile utilizzare la programmazione socket , ma ovviamente non c’era tempo di studiarla ed implementare una soluzione migliore.

Il tempo stava per scadere e mi vedevo già affogare in un mare di file in e out , con tutte le conseguenze del caso. Ricercando su midrange.com mi imbattei nelle Ftp Api , una serie di procedure per sviluppare un client ftp e senza quei maledetti file.

Scarico il savf speranzoso , installo il tutto e subito sorrido : Ci sono i sorgenti! Per una giornata circa spulcio tutto il sorgente , per chi conosceva il protocollo ftp la cosa sembrava ottima e semplice. Inizio a provare le procedure e tutto sembra funzionare bene.

Addio file in e out , ora ogni volta che devo utilizzare ftp in un programma mi appoggio a questa fantastica utility, che copre dal trasferimento file di pochi kilobyte a svariate centinaia di megabyte. Purtroppo lo scambio di informazioni tra sistemi , avviene ancora (sigh!) attraverso file txt (doppio sigh!).

Sul sito di Scott oltre a varie utility si trovano ottime guide , ho trovato utilissima nel mio cosa la guida all’ IFS.

Ottimo lavoro Scott! Anche perchè hai scelto di rilasciare i tuoi lavori come open source.

giugno 5, 2007

System I – Un sito utile : www.tools400.de

Filed under: System I,System I - Open Source — lostbob @ 7:25 pm

Su System I , aka As400 , non esiste molto software open source. Le motivazioni sono varie , ma il fatto principale è che pochissimi hanno a casa una di queste macchine a causa del loro costo sia di acquisto che di mantenimento , senza considerare il fatto che specialmente i modelli più vecchi reperibili a prezzi abbordabili sono spesso di dimensioni enormi , tant’è che alcuni li usano come portafiori.

Girovagando su internet ho scoperto molto tempo fa questo sito : www.tools400.de .

Il sito è gestito da Thomas Raddatz a cui ovviamene vanno tutti i miei complimenti e ringraziamenti.

Si possono trovare una serie di utility e freeware , rilasciate sotto licenza GPL, ottima cosa considerando che i programmi sono scritti molto bene e della mia preferenza per il software open.

Ecco una breve carrellata del software che si può trovare.

Peek400

Un editor di file veramente flessibile e potente . Permette di effettuare query sql di selezione sul file e supporta il commit. Potete tranquillamente cestinare il Dfu.

Utilities

Tra le varie io ho trovato veramente utili:

  • Expjrne : Esporta le voci di giornale per un file in maniera formattata rispettando i campi del file di origine a cui vengono aggiunti i dati del giornale. Fondamentale per consultare i giornali in maniera chiara e veloce.
  • Strdbg : Aggiunge molte opzioni al comando originale, permette di impostare il debug ad 80 o 132 senza bisogna di utilizzare direttamente il comando wrkenvvar.

Service Program

  • Basics1 : Una raccolta di utilissime procedure che permettono di gestire i messaggi , gestire gli errori delle api , manipolare stringhe , gestire oggetti , di reperire il programma chiamante , di utilizzare vari tipi di encoding come Md5 e di gestire in modo semplice gli user space.
  • Ifs : Utility per accedere all’ Ifs , utile quando bisogna manipolare oggetti in questo file system
  • Log4Rpg : è il porting del famoso Log4j di Java. Permette la gestione intelligente del logging nelle applicazioni , utilissimo sia per il debug sia per eliminare stampe od email di avvertimento. Permette l’output in vari formati tra cui Xml (utilizzabile anche da ChainShaw ) ed html.

Note:

Per l’installazione della maggior parte delle utility è necessario XmlPreview , nel caso ci siano problemi nella compilazione è necessario cambiare il CCsid del file oppure modificare nel sorgenti rpg che non si compilano i caratteri # con altro stando attenti a mantenere la coerenza nei sorgenti.

Tema: Rubric. Blog su WordPress.com.

Iscriviti

Get every new post delivered to your Inbox.