MokaByte 48 - Gennaio 2001
Foto dell'autore
di
Matteo Baccan
Lotus Domino e Java
IV Parte - Le viste
Nelle prime puntate del corso abbiamo visto come si compone una form di inserimento dati, come sia possibile salvarla all’interno di un database Notes, come sia possibile controllare i dati inseriti e quelli salvati e magari come sia possibile mandare un messaggio di posta elettronica di conferma dati.
In questa puntata vedremo come, partendo da queste informazioni, sia possibile creare delle viste, cioè degli elenchi di dati, da presentare a video all'interno di una form o da utilizzare per valorizzare gli elementi di un combobox. Vedremo inoltre come, da un agente Java, è possibile, tramite l’utilizzo delle classi Notes, cercare un elemento in una vista.

Creiamo una vista
La prima cosa da fare, per poter analizzare le caratteristiche di una vista, è quella di crearla all’interno dell’ambiente di disegno di Notes. Per effettuare quest’operazione basterà posizionarsi all’interno del database al quale vogliamo aggiungere la vista, tramite Domino Designer.
In questo ambiente, nella lista degli oggetti che possiamo inserire, troveremo la voce “Views”.
Dopo aver selezionato tale voce noteremo che, sopra la lista delle viste disponibili, vi è un pulsante dal nome “New View”. Tale pulsante, una volta premuto, ci permetterà di inserire una nuova vista all’interno del database Notes.
Come si può notare, la tipologia di viste possibili, è più di una. Ognuna di queste tipologie ha però un significato ben preciso che è importante conoscere:
 
  • Shared views: sono delle viste disponibili per ogni utente, con almeno i privilegi di reader. Per tale ragione sono il tipo di viste da utilizzare in ambito Internet. 
  • Private views: sono viste non pubbliche, normalmente utilizzare dal solo utente che le crea e non disponibili in ambito Internet. Per tale ragione non sono utilizzabili in applicazioni web-based


A questo punto è chiaro quale tipo di vista andremo a definire: una vista shared. Anche all’interno di viste shared esistono però delle differenziazioni. Per non complicare troppo l’analisi delle viste non mi addentrerò nella spiegazione delle particolarità delle singole tipologie di viste shared.
 
 
 

Figura 1

 
 

Gestione della vista
Una volta creata la vista, entriamo nel suo ambiente di disegno. Tale ambiente e diviso in due parti ben distinte. Nell’alto della maschera è presente una simulazione della vista che stiamo creando. In questo modo possiamo simulare, senza necessariamente salvare il nostro lavoro nel database, le modifiche che stiamo apportando.
Nella parte sottostante la simulazione vi sono invece due quadri variabili: un primo, a sinistra, che contiene tutte le caratteristiche degli oggetti presenti nella vista, un secondo, a destra, è invece un editor dinamico che varia in base al dato selezionato sulla parte destra.
Nel nostro caso, l’obiettivo che vogliamo raggiungere, è quello di presentare a video, una lista di tutti i documenti inseriti con la maschera submit.
Per poter effettuare quest’operazione, la prima cosa da fare, è quella di assegnare un corretto filtro ai dati che vengono presentati a video. Per fare questo occorre selezionare l’oggetto vista, o tramite un click sulla finestra di simulazione, o tramite la scelta del giusto oggetto sulla parte inferiore sinistra dell’ambiente di disegno.
Dopo aver selezionato la vista andremo a selezionare la proprietà “View Selection” di tale oggetto ed andremo a scrivere l’espressione di filtro, o tramite il comodo wizard della modalità easy, o tramite la scrittura manuale della stringa di selezione, sfruttando la modalità Formula.
Sicuramente la modalità easy è la più facile da utilizzare, se stiamo imparando a lavorare con Notes, sforziamoci però di utilizzare la modalità Formula, in quanto maggiormente flessibile e potente rispetto a quella easy.
Nel nostro caso, dato che il filtro deve essere creato sulla form di tipo submit, andremo ad utilizzare il modo Formula scrivendo la seguente espressione:

SELECT form="submit"

Ora, quando Notes andrà a creare la vista, considererà solamente i documenti salvati con la maschera submit. 
Se vogliamo iniziare a simulare il comportamento di tale vista, basterà quindi premere, con il pulsante del mouse, l’angolo superiore sinistro della finestra di simulazione. In questo modo Notes calcolerà la vista in base alle informazioni che abbiamo appena variato e aggiornerà la finestra di simulazione.
A questo punto, per finire la personalizzazione della vista, basterà definire le varie colonne che la compongono, decidendo quali campi o quali espressioni andranno inseriti.
Per semplificare la cosa andremo a definire un paio di colonne. La prima che conterrà il campo cValore e la seconda che conterrà il campo cRighe.
L’unica accortezza nell’inserimento di tali colonne deve essere fatta su quella che contiene cValore. Dato che utilizzeremo tale vista anche come strumento di ricerca, dovremo ricordarci di dare un ordinamento a tale colonna, altrimenti Notes non sarà in grado di utilizzare le informazioni in essa contenuta nei suoi metodi di search.
 
 
 
 

Figura 2

 

A questo punto non ci resta che salvare la vista ed assegnargli un nome parlante e un alias, in modo da rendere il suo utilizzo più comodo possibile lato Internet.
Per accedere a queste informazioni occorre attivare il pannello delle properties che si può rendere visibile tramite la pressione del tasto destro del mouse sulla finestra di preview. Su tale pannello la prima pagina di proprietà contiene appunto il nome della vista e il suo alias, che fisseremo a vAllSubmit.
Dopo aver salvato la vista con CTRL+S basterà lanciare il nostro browser preferito e digitare:

http://server/database/vAllSubmit

dove server è il nome del server sul quale è installato Notes e database è il nome del file nsf che andremo a referenziare, per visualizzare lato Internet i dati della vista. Utilizzando ad esempio un server locale, ed il database di test allegato a questa puntata del corso, l’indirizzo sarà così composto:

http://127.0.0.1/iform.nsf/vAllSubmit
 

Personalizziamo la vista
Implementare in questo modo una vista ha però una serie di piccoli problemi, più che altro legati all’inestetismo delle pagine che vengono create, in quanto presentano una struttura di default decisamente spartana.
Per migliorare l’aspetto visivo si può però utilizzare un metodo abbastanza semplice, che è quello di implementare una form nella quale contenere gli elementi della vista.
L’unico vincolo al quale siamo sottoposti, nella costruzione di tale form, è dato dall’utilizzare una particolare nomenclatura nella costruzione del nome da assegnare a tale form. In testa al nome della form siamo costretti ad aggiungere il prefisso “$$ViewTemplate for” più il nome della vista che vogliamo gestire.
Ad esempio, nel nostro caso, andremo a creare una form dal nome: 

$$ViewTemplate for vAllSubmit

All’interno di tale form dovremo poi aggiungere la vista stessa. Per effettuare quest’operazione abbiamo due possibilità. La prima è quella di usare un campo speciale, dal nome $$ViewBody, la seconda è quella di usare un Embedded View.
Nelle prime implementazioni di Notes si poteva utilizzare solamente il campo $$ViewBody. Per tale ragione gli sviluppatori di Notes 4.x utilizzano questa tecnica per personalizzare le viste. Dalla versione 5 invece è preferibile utilizzare un’Embedded View, dato che vi sono alcune caratteristiche in più su questo tipo di control, come ad esempio la possibilità di visualizzare i valori sia in formato HTML che tramite un applet Java.
 
 
 
 
 
 

Figura 3

 
 

Esiste però una sottile differenza di comportamento nelle due soluzioni. Mentre nel caso di HTML occorre implementare manualmente tutti i meccanismi di scorrimento, cancellazione, passaggio alla pagina successiva, etc, utilizzando l’applet la cosa viene risolta in maniera decisamente più semplice. In quanto tutti questi meccanismi sono gestiti dall’applet stessa, e non obbligano il programmatore Notes a scrivere ulteriore codice.
Un’ultima nota è data dal modo col quale dalla vista si accede al documento che viene referenziato.
Se lasciamo la vista in HTML, di default, la prima colonna disponibile è quella che contiene il link alla pagina contenente i dati, se invece utilizziamo l’applet, un doppio click in un qualsiasi punto della riga, che referenzia un documento, ci manderà alla form che lo ha inserito.
Potrebbe però non essere questo il fine del programma. È possibile che una certa vista debba solamente permettere la consultazione di documenti, senza permetterne la modifica da parte dell’utente finale.
In questo caso è possibile utilizzare un'altra proprietà della vista che è data dal campo form formula.
Tale campo può contenere una formula che identifica la form che verrà invocata per visualizzare il documento prescelto. Ovviamente, se non viene messo nessun valore in questo campo, Notes si limiterà a cercare il campo form del documento selezionato e a richiamare la form il cui nome è qui presente. Se però proviamo a forzare un valore diverso noteremo che è possibile, ad esempio, utilizzare una form diversa, che non necessariamente contiene tutti i campi del documento da visualizzare, e che si rivelerà un particolare fondamentale in tutti quei casi in cui si vuole restringere lo spettro di dati visibili lato client, ma soprattutto si vogliono togliere tutte le funzionalità di modifica dei dati che altrimenti si erediterebbero dalla form che ha permesso l’inserimento del dato stesso.
 
 
 

Figura 4

 
 

Viste e form
Abbiamo visto com’è possibile creare una vista, com’è possibile personalizzarla e com’è possibile cambiare il comportamento di default, in modo che, il documento che viene utilizzato, non usi la stessa form dell’inserimento, ma una differente.
Vediamo ora di capire come utilizzare queste viste all’interno di una form per alimentare, ad esempio, un combobox, ed in secondo luogo come referenziare una vista da un agente Java per cercare dei valori.
Per poter realizzare la prima funzionalità andremo a creare una nuova form, nella quale aggiungeremo un campo dal nome cCombo e dal tipo Combobox. Fatto questo andremo a specificare l’utilizzo di una formula per definire le scelte che debbono essere presenti all’interno del combobox.
Tale formula sarà creata utilizzando la funzione @dbcolumn di Notes, e andrà a specificare la vista vAllSubmit, come fonte di dati.

@DbColumn( "":"NoCache" ;  "":"" ; "vAllSubmit" ; 1 )

In questo modo otterremo il risultato di veder valorizzato il combo con tutti i valori presenti nella prima colonna della vista vAllSubmit, come indicato dall’ultimo parametro di @dbcolumn.
 
 
 
 

Figura 5

 
 

Utilizziamo Java
Vediamo ora come poter utilizzare le viste all’interno di agenti Java. Per poter far questo ipotizziamo di dover costruire una maschera in grado di effettuare delle semplici ricerche sullo stile di quelle fatte da un normale sistema di ricerca come Altavista, Virgilio o Google.
Andremo quindi a creare una form contenente il campo cRicerca che andremo ad utilizzare come chiave di ricerca della vista.
Per fare questo utilizzeremo un SaveAgent. In questo agente, dopo aver inizializzato la sessione corrente e l’AgentContext, tramite:

Session session = getSession();
AgentContext agentContext = session.getAgentContext();

andremo a valorizzare una variabile locale con l’oggetto rappresentante il database corrente:

// Database corrente
Database cur = agentContext.getCurrentDatabase();

a questo punto, interrogando il metodo getView della classe Database, abbiamo la possibilità di avere l’oggetto rappresentate la vista vAllSubmit:

// Vista di riferimento
View view = cur.getView("vAllSubmit");

Disponendo della vista possiamo prendere il valore del campo cRicerca, dalla form corrente, e costruire il Vector contenente i valori da cercare, nel seguente modo:

// Valore da cercare
Document doc = agentContext.getDocumentContext();
String cValue = doc.getItemValueString("cRicerca").trim();

// Ricerca nella vista
java.util.Vector v = new java.util.Vector();
v.addElement( cValue );

Ora non ci resta che chiedere alla vista di restituirci una lista di documenti che soddisfano la chiave di ricerca, tramite il metodo getallDocumentsByKey:

DocumentCollection docs = view.getAllDocumentsByKey( v, false );

e una volta che abbiamo la lista scorrerla con un ciclo while:

Document oCurDoc = docs.getFirstDocument();
while( oCurDoc!=null ) {
   String oRef = "vAllSumit/"+oCurDoc.getUniversalID();
   getAgentOutput().println("<br><a href=" +oRef +">Trovato</a>");
   oCurDoc = docs.getNextDocument();
}

Per aggiungere un ulteriore particolare di riflessione ho aggiunto un link ad ogni voce trovata nella vista, in modo da permettere la modifica del documento associato.
Per aggiungere questa funzionalità è bastato prendere la chiave univoca che ogni documento Notes possiede, data dall’Universal ID e comporre un link in grado i referenziarlo in modo univoco.
 
 
 
 

Figura 5

 
 

Per fare questo ho usato la coppia di valori <alias_della_vista>/<universal_id>. In questo modo il link creato risulta così composto:

vAllSummit/12a12a12bbaf23fa12af23fa21fdenfddd46f5
 
 

Conclusioni
Le viste sono sicuramente una grossa potenzialità di Notes e, se ben costruite, possono essere un valido strumento per la presentazione di dati a video. Sono facilmente configurabili e abbastanza efficienti per realizzare moltissime implementazioni.
In applicazioni che ho realizzato in passato ho trovato molto comodo l’utilizzo delle viste per la presentazione a video di documenti provenienti da liste di discussione, per presentare dettagli di ordini costruiti lato Internet o semplicemente come fonte di dati per combobox presenti in normali form.
Spero che queste indicazioni possano aiutarvi a trovare nuove occasioni per utilizzare questo potente strumento messo a disposizione da Notes.
 
 
 

Figura 6

 

Bibliografia e riferimenti
[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.
Il database di esempio puòessere trovato qui

Matteo Baccan è uno specialista di progettazione e sviluppo in C++, Java e Lotus Notes. Attualmente si occupa dello studio di tecniche avanzate di programmazione in ambito Internet/Intranet tramite Lotus Notes e Java, presso Integra Italia. Si possono consultare alcune sue pubblicazioni presso http://www.infomedia.it/artic/Baccan. Può essere contattato tramite e-mail all'indirizzo mbaccan@mokabyte.it
 

Vai alla Home Page di MokaByte
Vai alla prima pagina di questo mese


MokaByte®  è un marchio registrato da MokaByte s.r.l.
Java® è un marchio registrato da Sun Microsystems; tutti i diritti riservati
E' vietata la riproduzione anche parziale
Per comunicazioni inviare una mail a
mokainfo@mokabyte.it