MokaByte Numero  44  - Settembre 2000
 
Lotus Domino
e Java
I parte: le form
di 
Matteo Baccan
Viaggio nel mondo di Lotus Notes e 
dell'interfacciamento con Java

Lotus Domino è sicuramente uno degli strumenti migliori per la raccolta di documenti aziendali di tipo eterogeneo. Vediamo ora com’è possibile utilizzare Internet come fonte di acquisizione dati, analizzando il funzionamento delle form di Lotus Domino, quando vengono utilizzate all’interno di un browser

Lotus Notes o più propriamente Domino, è uno strumento molto flessibile, che permette la memorizzazione di documenti all’interno di database dalla struttura variabile e dal contenuto eterogeneo. Su tali database è possibile costruire delle viste, sulle quali fare delle ricerche flessibili e potenti. Tutto questo corredato dalla possibilità di usare un linguaggio proprietario come Lotus Script e più recentemente, dalla versione 4.6, Java, per la scrittura di procedure e funzioni di controllo.
All’interno di Notes, l’elemento che permette il maggior numero di manipolazioni, è sicuramente la form. Tramite una form è possibile, ad esempio, presentare dei dati video, inserirli all’interno di un database o creare delle informazioni dinamiche.
Un errore che si commette spesso, quando si inizia ad utilizzare Notes, è quello di unificare il concetto di record, con quello di form, dato che Notes tende a legare i record, creati al suo interno, con maschera con la quale sono stati creati o modificati per l’ultima volta.
In realtà questo legame non è assoluto e può essere variato in qualsiasi momento. Un record può essere visualizzato con form diverse, in momenti diversi, in base, ad esempio, al fatto che sia visualizzato all’interno di un client Lotus Notes o all’interno di un browser. 
Inoltre è possibile condizionare dinamicamente delle parti di una form, sia in base all’utente che la sta utilizzando, che in base ad una particolare vista, o semplicemente in base al tipo di dati che sono stati inseriti.
Vediamo ora come iniziare ad utilizzare le form come fonte di inserimento dati e come poter presentare a video delle informazioni contestuali ai dati inseriti.
 
 
Figura 1 - L’elenco delle form del database

 
 
Figura 2 - L’ambiente di disegno

Creazione di una form
La creazione di una form è un’operazione molto semplice, che cambia leggermente in base al fatto di utilizzare una versione 4.x o 5.x di Lotus Notes.
Le versioni precedenti alla 5 hanno infatti un unico ambiente di gestione dei dati, che è rappresentato dal client Lotus Notes. Con la versione 5 invece sono stati scomposti gli ambienti di amministrazione e disegno in parti ben distinte. 
Vi è sempre un client Lotus Notes, ma ora è anche presente un ambiente di amministrazione Lotus Domino Administrator e un ambiente di disegno Lotus Domino Designer.
Questo significa che, se dobbiamo operare nella versione 4.x, andremo ad utilizzare il client Lotus Notes, invece nella versione 5.x utilizzeremo Lotus Domino Designer.
In entrambi gli ambienti è però presente un menu file, ed una voce database. All’interno di tale voce, la voce new, permette la creazione di un nuovo database.
Per fare esercizio andremo ad utilizzare tale voce, creando il database iform.nsf.
Attenzione però ad un particolare. Domino gestisce diversamente, da piattaforma a piattaforma, i nomi dei propri oggetti. Creare una form o un database col nome “pippo” e farne poi riferimento col suo nome maiuscolo “PIPPO”, in piattaforme Win32, cioè Windows 9x, NT, 2000 o ME, è indifferente. All’interno di piattaforme Unix, come SUN, AIX o Linux, l’oggetto non verrebbe riconosciuto. Per tale ragione si tende ad utilizzare il minuscolo nella creazione di nomi di oggetti, che siano utilizzabili lato web server, quindi i database, le form, le viste, i menu e così via.
In questo modo, se dovessimo migrare il database da una piattaforma ad un'altra, magari maggiormente scalabile, non avremo problemi di porting.
Dopo aver creato questo nuovo database possiamo finalmente creare delle form ed immettere dei nuovi dati, che non andranno a compromettere i dati presenti all’interno di altri database Notes.
 
 
Figura 3 - Le proprietà di un campo

La creazione di una nuova form avviene tramite un’apposita voce di menu. Tale voce è Create, sotto la quale esiste la voce design/form.
Tale voce rimanda direttamente all’ambiente di disegno di Notes. All’interno di tale ambiente potremo inserire, uno alla volta, tutti gli elementi tipici di una maschera di inserimento dati.
 
 
 

Creazione dei campi
Per prima cosa, posizioniamoci sullo sfondo della maschera che abbiamo appena inserito. Premendo il tasto destro del mouse, sul menu a tendina che appare, è presente la voce Create field che permette l’inserimento di un campo.
Confermando tale voce, Domino assegna un valore di comodo al nome campo, cioè untitled, che può essere variato, in qualsiasi momento, all’interno della form.
Sempre passando dal click destro ed utilizzando la voce field properties, vedremo ora apparire una maschera multipagina, che permette la modifica di tutte le proprietà di un campo.
 
 
Figura 4 - La form dal browser

La prima pagina di tale maschera, contiene le informazioni più importanti del campo, cioè il nome, il tipo ed il modo col quale deve essere presentato a video. Modifichiamo quindi il nome in cValore ed il tipo in editable.
Ora, tramite il tasto CLTR+S, salviamo la maschera all’interno del database, nominandola submit e proviamo a verificare la sua visibilità lato web server. 
Se Lotus Domino è stato configurato nel modo corretto, cioè se è stato attivato il task http, andando su un qualsiasi browser e digitando l’indirizzo IP del server, il nome del database e il nome della form dovreste riuscire a vedere la maschera che abbiamo appena creato.
Un esempio di link valido potrebbe essere:

http:://127.0.0.1/iform.nsf/submit

dove 127.0.0.1 è l’indirizzo della macchina corrente, iform.nsf è il nome del database Domino e submit è il nome della form che è stata appena creata.
Anche in questo caso occorre una doverosa precisazione. In ambienti Win32 è possibile usare anche una sintassi leggermente diversa, che permette la sostituzione delle barre ‘/’ con le barre ‘\’. Questa pratica va a compromettere la compatibilità fra piattaforme Notes diverse. Per tale ragione è consigliato usare sempre le barre stile UNIX, cioè ‘/’, che sono comunque correttamente interpretate anche in ambienti Windows.
Se tutto è andato nel verso giusto dovrebbe apparire la maschera che abbiamo appena inserito a livello di design. Se ciò è accaduto, proviamo ad andare a controllare il codice che è stato scaricato a livello di HTML. Noteremo che Domino ha convertito la rappresentazione del campo in qualcosa di molto simile a:

<FONT FACE="Arial"><INPUT NAME="cValore" VALUE=""></FONT>

come si può notare sono stati riutilizzati i valori inseriti all’interno di Domino.
Fino a questo punto l’inserimento di un campo è una pratica molto simile fra la versione 4 e 5 di Domino. La cosa nuova che però ha apportato la versione 5 è data dalla pagina di proprietà HTML aggiuntive, presenti all’interno della finestra field properties. Tale pagina contiene infatti solamente proprietà utilizzabili lato web server, in questo modo è possibile andare ad inserire tutti quei tag che non sono utilizzati all’interno di Notes.
Proviamo ora ad inserire un altro tipo di campo, sempre editable, ma di tipo checkbox. La definizione in questo caso è esattamente uguale a quella di un campo di tipo text appena inserito. Quello che cambia è invece il modo col quale si debbono inserire i valori. Andando infatti nella seconda pagina delle properties si nota una parte denominata choices. Tale parte è utilizzata per specificare sia il modo col quale alimentare il campo, sia gli eventuali valori o la formula che vedremo valorizzata. Nel nostro caso utilizzeremo il costrutto più semplice, che è quello di indicare Enter choice (one for line) come origine dei dati, e nella lista di valori metteremo, manualmente, una lista di valori validi.
 
 
Figura 5 - L’inserimento di un pulsante

Se ora proviamo a salvare e a guardare il form lato browser, noteremo subito una cosa interessante, ma alquanto fastidiosa. Domino ha usato, sia per i valori che per i prompt del campi checkbox gli stessi valori. Questo vuol dire che, in automatico, non è possibile differenziare la rappresentazione visuale, da quella che verrà contenuta all’interno del documento Notes. È pero possibile superare questo limite con un piccolo trucco di programmazione.
Lotus Domino converte le maschere che vengono inserire all’interno del design in codice HTML, le manda al browser, che si occuperà di prendere i dati di ritorno e restituirli in modalità submit.
Da questo si capisce che Domino non è un interprete di codice HTML, ma sono un convertitore. Per tale ragione è possibile commentare il codice che Domino crea, tramite i tag HTML <!-- e -->, sostituendoli con un nuovo codice HTML, che saremo noi a scrivere, senza nessun limite interno ed esterno.
In questo modo è possibile, ad esempio, superare il problema dei checkbox e differenziare il loro prompt dal dato contenuto. Il codice che andremo a scrivere sarà abbastanza simile a questo:

[<!— [ [] cRighe ] -->]
[<INPUT TYPE=checkbox NAME="cRighe2" VALUE="valore 1">]Primo
[<INPUT TYPE=checkbox NAME="cRighe2" VALUE="valore 2">]Secondo
[<INPUT TYPE=checkbox NAME="cRighe2" VALUE="valore 3">]Terzo

Il particolare da notare è quello che, quando mettiamo dei valori all’interno di una maschera Notes, se tali valori sono all’interno di due parentesi quadre, Domino riporta esattamente quello che è stato scritto, a livello di pagina HTML. 
Quello che otterremo a livello di browser sarà così di avere il codice Lotus Domino contenuto all’interno di un commento HTML, e pertanto ignorato, ed il codice sostitutivo, nel quale è differenziato il dato dal suo prompt, utilizzato al posto di quello standard.
Questa tecnica è molto interessante e si basa sul fatto che, il submit di una pagina WEB viene passato dal browser al server allo stesso modo indipendentemente da come sono presentati i dati a video, siano loro rappresentati da un edit o da un gruppo di checkbox o radio button. Tale tecnica è inoltre utilizzabile in ogni versione di Lotus Notes.
 
 
 
Figura 6 - La conferma di una form

 

Submit
A questo punto non resta che analizzare il modo col quale poter fare l’effettivo submit di una maschera.
Sempre passando dal menu create, inseriamo ora un hotspot button. Tale control permette di specificare delle azioni che poi, ove possibile, sono riportate anche a livello di browser. Nel nostro caso andremo ad inserire una formula di salvataggio e chiusura della form. Tale formula è:

@Command([FileSave]);
@Command([FileCloseWindow])

Questa formula comprende due comandi. Il primo serve effettivamente a salvare i dati, il secondo per chiudere la form che è stata presentata. Questo evita che, alla pressione del pulsante di submit, venga ripresentata la stessa maschera a video.
Se provate ora ad accedere alla maschera lato browser noterete che, alla pressione del tasto submit, i dati che avete inserito saranno correttamente aggiunti all’interno del database Notes. Esiste però un piccolo particolare fastidioso. Notes, di default, presenta una maschera di conferma d’inserimento dati, che riporta la scritta “Form Processed”.
Chiaramente questo tipo di maschera è abbastanza fastidiosa, inoltre potrebbe non rappresentare il messaggio che si vuole dare alla conferma dell’inserimento dati.
Per ovviare a questo specifico problema è possibile utilizzare uno dei campi speciali che sono stati messi a disposizione da Domino. Tali campi sono utilizzati per aggiungere dei particolari eventi alle form.
Il campo che useremo è “$$Return”, che deve essere di tipo text, ma soprattutto computer. In questo modo, all’avvenuto submit, in modo completamente automatico, Lotus Domino andrà a valutare il campo e ne prenderà il contenuto utilizzandolo come pagina da visualizzare lato web server.
In questo modo possiamo inserire, sia dei messaggi di avvenuto inserimento dei dati, come:

“<h2>Dati inseriti</h2>”

che dei messaggi contestuali. Ad esempio il valore di un campo.
In questo caso viene controllato il valore del campo cRighe2 e se contiene il valore “valore 1” viene presentato un messaggio contestuale:

@If(cRighe2="valore 1"; "<h2>Hai risposto 1</h2>"; "<h2>NON hai risposto 1</h2>")

È inoltre possibile inserire un rimando ad un determinato sito o ad una determinata pagina. In questo caso è sufficiente fare in modo che il value della formula sia una stringa, nella quale è inserito l’indirizzo di destinazione all’interno di due parentesi quadre, come in questo caso:

"[http://www.mokabyte.it]"

Sarà poi Lotus Domino a mandare al browser il corretto comando di redirect verso un particolare sito, in risposta all’operazione di submit.
 
 
 

Conclusioni
In questa prima puntata sono stati spiegati i principi fondamentali che regolano le form in ambiente Lotus Domino. In questo modo è ora possibile produrre autonomamente delle maschere di immissione dati, lato web server, sfruttando le caratteristiche basilari date da questo prodotto.
Nelle prossime puntate vedremo com’è possibile aggiungere dei controlli sui singoli dati che sono stati inseriti, com’è possibile aggiungere dei controlli globali prima e dopo la presentazione di una maschera e com’è possibile usare del codice javascript e java, sia per controllare i campi, che per aggiungere delle caratteristiche speciali alle maschere.
 
 
 

Bibliografia
[1] http://www.lotus.com sito Internet di riferimento per i prodotti Lotus
[2] http://www.notes.net sito ufficiale di Lotus Domino. Da questo sito è possibile scaricare tutti gli aggiornamenti di Domino, dalla versione 4.0 all’ultimissima versione disponibile.
[3] http://www.infomedia.it/artic/Baccan, sito contenente alcuni articoli di approfondimento degli argomenti trattati.
 

Esempio
Per chi volesse provare direttamente il database di esempio presentato nell'articolo lo può trovare qui

Matteo Baccan è uno specialista di progettazione e sviluppo in C++, Java e Lotus Notes, nonché coautore di dBsee 4, dBsee++ ed autore di dBsee400. Attualmente si occupa dello studio di tecniche avanzate di programmazione in ambito Internet/Intranet tramite Lotus Notes e Java, presso ISA Italian Software Agency. Si possono consultare alcune sue pubblicazioni presso http://www.infomedia.it/artic/Baccan. Può essere contattato tramite e-mail all'indirizzo baccan@infomedia.it

Chi volesse mettersi in contatto con la redazione può farlo scrivendo a mokainfo@mokabyte.it