HCL Domino Leap è senz’altro uno strumento dalle potenzialità interessanti che espande le potenzialità di Notes e Domino ma perchè non integrarlo con funzionalità aggiuntive usando ad esempio del codice LotusScript ?
Ho fatto questa considerazione sviluppando un’applicazione dove sarebbe stato molto meglio avere un agent che mi manipolava un documento per raggiungere il risultato voluto. Controllando la documentazione ho visto che effettivamente fra le opzioni dei servizi esiste quella di eseguire un agent all’interno del database e quindi ho seguito questa strada.
Primo punto da considerare: posso lanciare un agent che esegua un’elaborazione senza passargli nessun parametro oppure, come ben sappiamo, si può lanciare un agent passandogli come parametro il NoteID di un documento specifico e questo può essere molto utile.
Però qui c’è un po’ di confusione:
In Notes abbiamo 2 modi diversi per fare riferimento a un documento:
- l’ID universale (UNID) che è una combinazione di 32 caratteri di cifre esadecimali
- il NoteId che è una combinazione di 8 caratteri di lettere e numeri
Domino Leap ha aggiunto un nuovo elemento, l’UID, il cui formato è ancora diverso dall’UNID.
Ora se leggi la documentazione di Domino Leap trovi che
Se si imposta l’input “ID universale”, questo verrà passato alla proprietà ParameterDocID dell’agente.
Ma in Lotusscript la proprietà ParameterDocID in NotesAgent vuole il NoteID di un documento passato all’agente .
Ciò significa che per chiamare un agente che fa riferimento a un documento specifico dobbiamo passare il NoteID come parametro. Non l’UNID o l’UID. Ed il NoteID non viene referenziato all’interno di Domino Leap e quindi non lo abbiamo.
Però a tutto c’è una soluzione e di seguito vi descrivo quella che ho trovato io.
- nella mia form in HCL Leap inserisco un campo F_NoteId (che nascondo in quanto all’utente non interessa) e lo lascio vuoto
- poi da Domino Designer creo una vista di servizio che contiene solo i documenti che NON hanno questo questo campo valorizzato
- infine scrivo un agent in LotusScript che lavora su questa vista, si scorre i documenti presenti e per ognuno scrive nel campo F_NoteID il NoteId del documento in questo modo:
Set vec = view.AllEntries Set entry = vec.GetFirstEntry() Do While Not entry Is Nothing Set doc = entry.Document doc.F_NoteID = doc.NoteID Call doc.save(1,0) Set entry = vec.Getnextentry(entry) Loop
Ora nel workflow di HCL Leap inserisco un’attività all’nserimento di un nuovo record che lanci questo agent dopo il salvataggio (l’equivalent del PostSave) : in questo modo ogni volta che viene inserito un nuovo documento in Leap l’agente andrà ad aggiornare il documento con il NoteID
A questo punto ho in Leap l’informazione che mi mancava e cioè il NoteID del documento. Di conseguenza nei passi successivi, per esempio all’approvazione di un workflow, posso lanciare un altro agent in LotusScript a cui passo come parametro il NoteID contentuto nel campo F_NoteID.
Ovviamente l’agent finale in LotusScript dovrà contenere all’inizio questa parte di codice:
Set agent = s.CurrentAgent documentID = agent.ParameterDocID Set doc = voltdb.GetDocumentByID( documentID)
0 commenti