Page 1 sur 1

Web : compter les documents, catégories...

MessagePublié: 22 Nov 2005 à 11:07
par thierry.ceretto
Dans une appli web, j'avais besoin de connaître le nombre de lignes totales (documents + catégories) de la vue (HTML) courante et l'id des premier et dernier docs :

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