2017-05-26 3 views
1

J'essaie de trouver le nombre d'entrées dans une base de données Domino en utilisant un script Lotus basé sur une certaine colonne. J'ai créé ci-dessous le script suivant qui fonctionne bien mais le total de la boîte de message est inférieur de quelques centaines au total dans le dialogue présenté à la fin du script. Je suppose que l'on inclut toutes les catégories parentes, etc. Comment compter le nombre d'enregistrements dans la vue en fonction de la colonne "Date de création"?Nombre de documents par colonne

J'ai inclus une image de la colonne pour laquelle je veux un total dans la vue.

enter image description here

Sub Initialize 
    Dim db As NotesDatabase 
    Dim view As NotesView 
    Dim s As NotesSession 
    Dim NotesDocColl As NotesDocumentCollection 
    Dim requestDoc As NotesDocument 
    Dim lngDocCount As Long 

    Set s = New NotesSession 
    Set db = s.CurrentDatabase 
    Set view = db.GetView("By Category") 
    Set requestDoc = view.Getfirstdocument() 
    lngDocCount = 0 
    Do Until requestDoc Is Nothing 
     lngDocCount = lngDocCount + 1 
     Set requestDoc = view.GetNextDocument(requestDoc) 
    Loop 
    MessageBox "Number of documents = " & lngDocCount 
End Sub 
+0

Est-ce que chaque document apparaît dans une et une seule catégorie ?? Je suppose que ce n'est pas le cas. –

+0

Qu'est-ce que vous essayez de savoir? Combien de documents sont sélectionnés dans la vue ou combien de documents dans la vue ont une date spécifique créée ou quoi? Êtes-vous incapable de créer une autre vue en fonction de la date de création que vous pouvez traverser? – Newbs

+0

@RichardSchwartz Je m'excuse pour les commentaires tardifs, mais c'était un jour férié hier ici en Ecosse. Aucun document créé n'est unique. Merci – AJF

Répondre

0

Le code suivant vous obtiendrez le "nombre total de documents créés pour tous les 98 catégories dans la vue":

Dim db As NotesDatabase 
Dim view As NotesView 
Dim s As NotesSession 
Dim NotesDocColl As NotesDocumentCollection 

Set s = New NotesSession 
Set db = s.CurrentDatabase 

Set view = db.GetView("By Category") 
Set NotesDocColl = db.Search(view.Selectionformula, Nothing, 0) 
MessageBox "Number of documents = " & NotesDocColl.Count 

Pour obtenir le nombre de documents pour chaque catégorie, J'ajoute une colonne à la vue qui calcule à 1, et est totalisée (en bas de l'onglet de tri dans le concepteur) avec "Masquer les lignes de détail" sélectionné. La plupart du temps, c'est la première colonne de la vue.

Pour l'obtenir par programmation j'utilise un NotesViewNavigator et itérer dans les catégories de premier niveau.

+0

J'ai ajouté un commentaire pour vous ci-dessus – AJF

2

Ce que vous voulez est un objet NotesViewNavigator. Cet outil puissant vous permet de tirer parti du travail effectué par votre vue pour générer des totaux, des comptages, des valeurs de colonnes calculées, etc., sans devoir recourir à l'instanciation de chaque objet document. Pour votre exemple, essayez cet extrait:

Sub Initialize 
    Dim session As New NotesSession 
    Dim db As NotesDatabase 
    Dim view As NotesView 
    Dim nv As NotesViewNavigator 
    Dim e As NotesViewEntry 
    Dim dc As NotesDocumentCollection 
    Set db = session.Currentdatabase 
    Set view = db.getview("Categories") 
    Set nv = view.Createviewnav() 
    Set e = nv.Getfirst() 

    Dim categcount, totalcount 
    While Not e Is Nothing 
     If e.Indentlevel=3 Then 
      categcount = e.Childcount '<-do something with this value 
      totalcount = totalcount+categcount 
     End If 
     Set e = nv.Getnext(e) 
    Wend 
End Sub 

Vérifiez toutes les propriétés d'une classe NoteviewEntry. Vous pouvez trouver d'autres choses utiles comme .Siblings