24 nov 2010

Eccone uno che ha proprio ragione !!!

Let's face it: the majority of XPage developers will never write their own controls. Their employer subscribes to the "do more with less" philosophy, so they're behind schedule on ten different projects because they're the only Domino developer at their company who hasn't already been laid off. They want components that already work that they can just drag onto a page, set a couple properties, and have the page do what the component descriptions imply they'll do.

19 nov 2010

Ci sono riuscito, ma perche' complicare le cose semplici?

Le Xpages saranno belle, potenti, ti permettono di fare un mucchio di cose ecc. ecc.
Sarà anche vero, pero' ti fanno pure incazzare !
Premessa : costruendo una view in Notes (senza le X) esisteva l'opportunita' di avere una colonna con delle icone . Bastavano 2 click e una formulina per scegliere l'icona da inserire ed il gioco era fatto.

Ora costruendo una Xpage con dentro un viewcontrol ho avuto bisogno di fare lo stesso ... e mi sono incazzato.
Perche invece dei 2 click ho dovuto scrivere del codice....

A causa dello spostamento del blog l'articolo completo si trova ora qui :
http://www.fabiodipaola.it/2010/11/19/ci-sono-riuscito-ma-perche-complicare-le-cose-semplici/

4 nov 2010

Webservices

beh, devo dire che fino ad ora e' andata piu' liscia di quanto pensassi : costruire un webservice (provider) in Notes e' stato quasi banale .
A parte qualche dettaglio e' come scrivere un agent (ovvio, non ho usato Java!!) , tutta la parte Soap me la inserisce Domino senza che io faccia niente...adesso giro i dettagli a chi gestisce l'applicazione che dovra' farmi da consumer , vediamo la risposta.
Due consigli:
leggetevi questi articoli
http://www.ibm.com/developerworks/lotus/library/web-services2/
http://www.ibm.com/developerworks/lotus/library/nd7-webservices/
e poi scaricatevi la versione free di SoapUI per testare il tutto http://www.soapui.org/

P.S. poi vi spiego perche Java mi e' antipatico, nulla di personale ma mi e' antipatico proprio

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...

23 set 2010

Questa mi e' piaciuta

What is Lotus Notes? what is Lotus iNotes?

Soprattutto le varie risposte e specialmente questa che riporto di seguito :

I just wanted to echo some earlier sentiments in my own words:

"Lotus Notes is the ultimate enterprise-scale custom application development platform. Oh... almost forgot: it also includes integrated messaging and scheduling capabilities."

If Notes is an email system that, oh, by the way, also allows for creation of custom apps, its market share and feature set will forever be compared to Exchange, GMail, and any other platforms of that ilk that have yet to emerge.

If, on the other hand, Notes is a custom application development platform that, oh, by the way, also just happens to include a very competent messaging and scheduling framework that integrates seamlessly into the custom application framework because those features are developed using the same languages and underlying architecture that run your custom applications... then it's a whole other ballgame. Notes is then measured in terms of market share and feature set in comparison to PHP, ASP, Ruby on Rails, and a whole host of other languages and application development frameworks. Notes is a leader if customers can more rapidly deploy and more easily maintain custom applications that are more secure, more reliable, and more intuitive than what they would have had to settle for had they developed it using competing technologies.

If application development is the focus and email is an afterthought - as it has already become for an entire generation now on the brink of entering the workforce - then Notes offers a host of capabilities that dramatically distinguish it from most, if not all, alternatives. If email is the focus and application development is the afterthought... then IBM will forever be attempting to distinguish it from other messaging systems, limited to the scope of what any messaging system can do: for example, Notes makes it slightly easier to follow a "reply to all with history" thread, or its archiving options are slightly more robust, etc. The differences between these types of features are, by their very nature, infinitesimal... but the chasm between what Notes allows developers to create - and at what pace - and what the same number of developers can produce in other platforms in the same timeframe is astronomical.

So go for the easy win: if a potential (or existing) customer insists on discussing messaging, reassure them that Notes can handle their messaging needs because, well, everyone does messaging; messaging is easy. But then, as rapidly as possible, steer the conversation back to what Notes does that NOTHING ELSE CAN. :)

21 set 2010

Un pezzetto di codice (LotusScript)

Magari a qualcuno puo' servire : lanciato da una view esporta tutti i doc. della view stessa , e' generico e quindi non c'e' bisogno di parametrizzarlo per view diverse.
Non l'ho ottimizzato, potrebbero esserci ancora delle Dim non piu' necessarie, comunque funziona.

Sub Initialize
Dim x,y As Integer
Dim conta, salto,lunga As Integer
Dim strLen As Integer
Dim ses As NotesUIworkspace
Dim vw As NotesUIView
Dim view As NotesView
Dim doc As NotesDocument
Dim it As Variant
Dim viewcollec As notesviewentrycollection
Dim viewentry As notesviewentry
Dim strDesc As String
Dim strTrack As String
Dim session As New NotesSession
Dim db As NotesDatabase
Set db = session.CurrentDatabase
Set ses = New NotesUIWorkspace
Set vw = ses.currentview
Set View = vw.View

'Set up the Excel application
Dim xlApp As Variant
Dim xlSheet As Variant

Set xlApp = CreateObject("Excel.application")
xlApp.Workbooks.Add

Set xlSheet = xlApp.Workbooks(1).Worksheets(1)
xlApp.Visible = True

'- Set the print to landscape
'Values you can use:
'1 = Portrait
'2 = Landscape
xlSheet.PageSetup.Orientation = 2

'Titoli delle colonne
x=0
Forall c In view.Columns
x=x+1
xlSheet.Columns(x).Columnwidth = c.Width
xlSheet.Columns(x).VerticalAlignment = 1 'The vertical alignment defaults to bottom in excel, and this makes the data look a LOT cleaner
xlSheet.Cells(1, x).Value = c.Title
End Forall

Set viewcollec=view.allentries
Set ViewEntry = viewcollec.GetFirstEntry( )

x=1
Do While Not viewentry Is Nothing
x=x+1
y=0
Forall v In viewentry.ColumnValues
y=y+1
xlSheet.Cells(x, y).Value = v
End Forall
Set ViewEntry = viewcollec.GetNextEntry( viewentry )
Loop

Msgbox "Il foglio Excel e' pronto, ricordati di salvarlo!", 64, "Excel Export"

End Sub

20 set 2010

Sentirsi un dinosauro

Sentirsi un dinosauro puo' derivare dal fatto di lavorare su una piattaforma che, almeno a volte, ricorda i dinosauri. Parlo ovviamente del "mio amato" Lotus Notes. Ho cominciato a lavorare con Notes nei primi anni 90' la versione era (credo) la 2.qualcosa...tempi giurassici!
Per l'epoca Notes era realmente innovativo ed unico, ma queste caratteristiche non sono state mantenute.
Intendiamoci, Notes non e' un client di posta come molti lo considerano; stiamo parlando di un application server che per molti versi e' parecchio evoluto ma che ha anche alcuni talloni d'Achille abbastanza pronunciati.
Uno e' proprio IBM che da anni non sembra spingerlo, non si vedono nuove installazioni e spesso ho l'impressioni che gli sforzi di IBM siano tesi solo al mantenimento dell'installato.
Anche la comunicazione mi sembra latitare, visto che tanta gente ancora oggi assimila Notes alla posta elettronica.
Altro punto dolente e' il client, anche lui ormai pesante come un brontosauro e senza significative novita, nell'interfaccia utente da tempo.
Qui fermo il mio brontolio ma su alcuni dei temi accennati sopra voglio tornare in futuro.