29 ott 2010

Lotusscript verso Db2 - parte seconda

Una volta connessi al nostro Db2 (vedi post precedente della serie) passiamo a scrivere e leggere i dati , che e' quello che realmente ci serve.
Il primo esempio e' ovviamente quello piu' semplice: costruiamo uan query in SQL , la passiamo al Db2 e poi gestiamo i risultati.


Nelle dim inserisco una dichiarazione
Dim fldLst As New LCFieldList

Cosa significa ? LCFieldList rappresenta un results set che puo contenere uno o piu' record coi relativi campi ed e' il "contenitore" dove vanno a finire i risultati della query .
Poi vediamo come utilizzarla

Primo passo : in una variabile inserisco la query SQL
interroga="select * from schema.tabella where nome='Pippo' order by cognome"
(occhio alle virgolette/apici)
e poi la faccio eseguire , magari controllando che mi ritorni effettivamente dei dati:
If (connect.Execute (interroga, fldLst) = 0) Then
Print "Spiacente, non ci sono documenti che corrispondono alla query "
Exit Sub
End If
Da notare la la parte connect.Execute (interroga, fldLst) dove in pratica chiedo di eseguire la query SQL tramite la LCConnection che ho dichiarato (vedi post precedente) e di inserire il risultato in fldLst.
Nel caso la execute mi ritorni uno zero significa che non ci sono record corrispondenti e quindi avverto ed esco.

Se invece i risultati ci sono lo script prosegue e comincia a ciclarli con un while cosi' strutturato:
While (connect.Fetch (fldLst) > 0)
.....
Wend

ed al cui interno inserisco quello che mi serve: banalmente faccio una print dei dati estratti
Print fldlst.nome(0)
Print fldlst.cognome(0)
dove nome e cognome sono i campi Db2 ritornati dalla query
In pratica l'elemento chiave qui (ed in altri casi simili) e' la classe LCFieldlist , una volta capito il suo scopo e funzionamento si va' via spediti .
Ah, dimenticavo: LCFieldlist contiene ovvimanete degli oggetti di tipo LCField che sono i campi veri e propri della tabella, poi parliamo anche di questi

28 ott 2010

Sorry to say...

I was checking the stats for this blog and I discovered several readers from outside Italy. All the previous posts are in Italian, so I feel this was not useful and/or understandable for an International audience.
Sorry to say but it was intended for an Italian audience and , honestly, I didn't imagine it could be accessed from outside Italy. It's also a matter of time: writing in Italian is quicker and, you know, time is never enough ...

27 ott 2010

Complexity kills

Cerchiamo di ricordarcelo piu' spesso, ogni volta che installiamo o scriviamo software:

Complexity kills. Complexity sucks the life out of users, developers and IT. Complexity makes products difficult to plan, build, test and use. Complexity introduces security challenges. Complexity causes administrator frustration.
Ray Ozzie

http://ozzie.net/docs/dawn-of-a-new-day/

25 ott 2010

Post-corso sulle xPages

Dopo 2 giorni di full immersion a Segrate sulle xPages sono ancora perplesso: le idee sono un po' più chiare ma il metterle in pratica ancora nebuloso.
Almeno adesso so da dove cominciare , il rpoblema e' dove andrò a finire.

19 ott 2010

Lotusscript verso Db2

Ritorniamo indietro al mio progetto per la gestione di documenti in Db2 . Ora che la connessione fra Domino e Db2 e' instaurata si puo' cominciare a scrivere codice per usarla.
Partiamo da un agent che va a scrivere in Db2 cosi' vediamo cosa possiamo fare .
Prima cosa : nelle options piazziamo una bella riga Uselsx "*lsxlc" che vuol dire caricare le LotusScript Extension for Lotus Domino Connectors (LSX LC). Questo ci mette a diposizioni metodi e classi non solo per Db2 ma anche per il file system, Oracle e Sybase. La relativa documentazione la trovate qui .
Partiamo con le prime due Dim necessarie:
Dim lcs As New LCSession
Dim connessione As New LCConnection  ("db2")
La classe LCSession permatte di accedere all'ambiente in cui gira il connettore (in modo simile alla session di Notes) . Possiamo acceder ad una serie di metodi e testare lo stato della connessione stessa. Non elenco qui il tutto (li trovate nel link alla documentazione qui sopra) ma ho trovato particolarmente utile usare LCSession.ConnectionPooling .

La seconda riga e' quella che fisicamente crea la connessione al database Db2 (o Oracle o altro supportato, basta cambiare il parametro di LCConnection)
Nota : per sapere quali sono i connettori disponibili potete usare LCSession.ListConnector

Dim connessione As New LCConnection ("db2")
connessione.Database = "nomedatabase"
connessione.UserID = "nomeutenza"
connessione.Password = "passwordutenza"
connessione.Connect
Queste righe si spiegano da sole , passate alla LCConnection il nome del database (meglio usare la forma schema.nomedb ) , il nome utente che abbia le necessarie grant e la sua password , dopodiche' effettuate la Connect al database.
Potete anche scriverla in questo modo per intercettare eventuali problemi di connessione:
On error go to Trap
connessione.Connect
Print "Connesso a DB2"
Anche per la classe LCConnection esistono una serie di proprietà e metodi per cui rimando alla documentazione . Significative sono le possibilità di gestire Commit e Rollback del Db2 .
Ultima cosa di questa puntata: ricordatevi, al termine dello script, di chiudere la connessione con un bel connessione.Disconnect

13 ott 2010

Settimana prossima a Segrate

per cercare di capire a cosa mi servono le xPages e come usarle , c'e' un Technical Workshop  a Segrate.
Giusto perche' ho un piccolissimo dubbio : cosa posso fare con le xPages che ad oggi non posso fare con Notes/Domino ???

12 ott 2010

Notes <-> Db2

Bene, torniamo alla gestione documentale ed al dialogo fra Notes e Db2. Il primo passo e' stato capire come funziona e cosa serve.

Come ho gia' scritto l'idea di base e' un server Domino che dialoga con un Db2. Ma cosa ci va in mezzo? La risposta iniziale e' stata "Db2 Connect" un sw Ibm che mi permette di instaurare le connessioni con i relativi driver Odbc (che non uso) e CLI (che sono quelli che servono) piu' tutta una serie di utility per il Db2.

In breve tempo, pero', da Db2 Connect sono passato ad un altro prodotto chiamato "Ibm data server client" che ha caratteristiche molto simili ma soprattutto non ha costi di licenza. La cosa fondamentale e' che offra la connessione CLI con le relative librerie che vengono utilizzate dalle estensioni di Domino.
Per maggiori info sulla parte CLI (che non significa Client come pensavo all'inizio ma bensì Call Level Interface) vi rimando a questo link. ed aggiungo una citazione:
It is a 'C' and 'C++' application programming interface for relational database access that uses function calls to pass dynamic SQL statements as function arguments. It is an alternative to embedded dynamic SQL, but unlike embedded SQL, DB2 CLI does not require host variables or a precompiler.
Ok , quindi il primo passo e' quello di installare Domino avendo cura di scegliere l'opzione Installa DECS ! Questo non significa che andrete ad usare le funzionalità di Decs, io non carico nemmeno la task relativa ma e' necessario per avere le librerie Domino necessarie poi per LotusScript .
Per verificare di avere tutto installato correttamente date un'occhiata alla directory dei programmi di Domino e cercate dei file con estensione .dcx , in particolare per Db2 serve ndb2.dcx (ce ne sono altri per Oracle, Sybase ecc.)

Ora il passo successivo è quello di installare Db2 Connect o IBM Data Server Client. Una volta fatto questo lanciate l'Assistente di configurazione e configurate la vostra connessione a un server e un database Db2. Fatto? Bbene !

8 ott 2010

E via con una nuova avventura

I webservices di Domino !!
Voi mi direte "ma e' da tanto che ci sono" ... e' vero, ma fino ad oggi non mi sono mai serviti e quindi non ci homa sbattuto il naso.
Adesso e' arrivato il momento, poi magari scopro che sono piu' semplici di quello che penso.
Intanto mi leggo questo http://www.ibm.com/developerworks/lotus/library/web-services2/

4 ott 2010

Inizio di un progetto

Domanda:
"vorremmo passare allo scanner tutto l'archivio cartaceo aziendale in modo da archiviare i documenti in formato elettronico e poterli poi cercare ed estrarre. Puoi farlo con Notes? Si tratta di qualche centinaio di migliaia di documenti(forse si supera il milione)."

Ahia, penso io, una cosa del genere mica la puoi gestire con i file di immagine inseriti come attachment in un .nsf.
E poi anche per le ricerche Notes potrebbe non essere la soluzione piu' performante. Ci vuole un motore di database sotto e poi si puo' far girare il tutto con Notes.
MySql potrebbe essere una soluzione, anche per abbattere i costi, ma in azienda i software open non sono ben visti.
E poi, mi dico, c'e' Db2 che dovrebbe essere molto piu' interessante, visto la possibilita' di integrazione con notes.
dunque diciamo che si potrebbe mettere insieme un sistema con Notes coma Application server che mi gestisce logiche e interfaccia utente e Db2 che si occupa del database.
Certo, ci sono un po' di aspetti da approfondire , capire bene come si usano le estensioni di Notes per Db2  (Uselsx "*lsxlc"), decidere come gestire le ricerche e visualizzare i dati , insomma non e' una cosa immediata , pero' la risposta e' :
"si, si puo fare"
Tutto questo e' in realta' successo mesi fa', il sistema e' ormai in produzione e gira in modo soddsfacente. Ma non e' stata cosi' liscia...