J'ai fait un agent qui est déclenché par le WebQueryOpen du masque $$ViewTemplateDefault et qui met à jour des champs de ce masque :
- Champs requis dans le masque $$ViewTemplateDefault :
AliasVue = Texte, calculé à l'affichage, formule = @Subset(@ViewTitle;-1)
NombreDoc = nombre, modifiable , défaut = NombreDoc
NombreLignes = nombre, modifiable , défaut = NombreLignes
NombreCategories = nombre, modifiable , défaut = NombreCategories
IDPremierDocVue = texte, modifiable, defaut = IDPremierDocVue
IDDernierDocVue = texte, modifiable, defaut = IDDernierDocVue
- Code Agent
-<Options>
Use "LotusScriptCommun"
...
- Code : Tout sélectionner
Sub Initialize
On Error Goto Erreur
%REM
Agent déclenché par WebQueryOpen
De la vue en cours, retourne :
- le nombre de catégories
- le nombre de documents,
- l'ID du premier document,
- l'ID du dernier document.
%ENDREM
Dim session As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim webDoc As NotesDocument
Dim doc As NotesDocument
Dim tousDocs As NotesViewEntryCollection
Dim nav As NotesViewNavigator
Dim AliasVue As String
Dim UNID As String
Dim Nbdoc As Long
Dim NbdeLignes As Long
Dim NbCategories As Long
Set db = session.CurrentDatabase
Set webDoc = session.DocumentContext
'Alias de la vue issu du champ AliasVue du masque
AliasVue$ = webdoc.AliasVue(0)
'Instancie la vue
Set view = db.getview(AliasVue$)
'Rafraîchit la vue
Call view.Refresh
'Instancie un navigateur de vue
Set nav = view.CreateViewNav()
'Instancie une collection : toutes les entrées (documents)
Set tousDocs = view.AllEntries
'Récupère le nombre de documents
Nbdoc = tousDocs.count
'Si il y a des documents
If Nbdoc > 0 Then
'Récupère le nombre de lignes da la vue (Catégories + documents)
NbdeLignes = nav.count
'Calcule le nombre de catégories
NbCategories = NbdeLignes-Nbdoc
'Instancie le premier document
Set doc = view.GetFirstDocument
'Récupère L'ID du premier doc
UNID$ =Lcase(doc.UniversalID)
'Affecte au champ IDPremierDocVue
webdoc.IDPremierDocVue = UNID$
'Instancie le dernier Document
Set doc = View.GetLastDocument
'Récupère L'ID du dernier doc
UNID$ =Lcase(doc.UniversalID)
'Affecte au champ IDPremierDocVue
webdoc.IDDernierDocVue = UNID$
Else ''Si zéro document
'Met à 0
NbdeLignes = 0
'Met à 0
NbCategories = 0
'Met à rien
webdoc.IDPremierDocVue = ""
'Met à rien
webdoc.IDDernierDocVue = ""
End If
'Affecte au champ NombreDoc
webDoc.NombreDoc = Nbdoc
'Affecte au champ NombreLignes
webDoc.NombreLignes = NbdeLignes
'Affecte au champ NombreCategories
webDoc.NombreCategories = NbCategories
'Réinitialise les variables
Set doc = Nothing
UNID$ = ""
Exit Sub
Erreur :
Call EcrireErreurDansLogServeur
Exit Sub
End Sub
- La petite routine, placée dans la bibliothèque de script, qui écrit dans la log du serveur : base baselog.nsf :
Sub EcrireErreurDansLogServeur
Dim session As New NotesSession
Dim db As notesDatabase
Dim agent As NotesAgent
Set db = session.CurrentDatabase
Set agent = session.CurrentAgent
Msgbox agent.Name+" - "+db.title+ " - Erreur : "+Cstr(Err)+" - "+Error
End Sub