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
|