Domino 9 und frühere Versionen > Entwicklung
DocumentCollection
f.r@notesforum.de:
Hi Leute,
habe 26000 Datensätze in meiner Datenbank. Da ich nur mit einem Teil dieser arbeiten möchte, nämlich nur mit Datensätzen aus der Maske "Kontakt", suche ich nun eine Möglichkeit die DocumentCollection von Anfang an auf die Menge der Kontaktdatensätze setzen zu können, soll heißen statt
Set documentcollection = database.AllDocuments
irgendetwas Maskenbezogenes. Die Laufzeit meines Agenten ist nämlich atemberaubend lang.
Bin für jeden Tipp dankbar,
Robert
Meff:
Hi Robert,
wenn Du eine Ansicht hast, in welcher sich nur die Dokumente mit der entsprechenden Maske befinden, dann kannst Du mit einer ViewEntryCollection arbeiten.
Meff ;)
P.S.: Das Ding gehört doch eher ins Entwicklungsforum !?
Axel:
Hi,
andere Alternative wäre die Collection mit der Methode Search aus der NotesDatabase-Klasse zu füllen.
Dim strSearch as String
Dim db As NotesDatabase
...
strSearch = |Form = "Name der Kontaktmaske"|
Set collection = db.Search(strSearch, Nothing, 0)
...
Axel
f.r@notesforum.de:
Hi Leute,
erstmal danke an alle die mir geschrieben haben, habe aber noch ein Problem, welches die erfahreneren Programmierer sicherlich eher lösen als ich es kann.
Mein Agent besteht aus folgendem Quellcode:
Dim Session As New NotesSession
Dim database As NotesDatabase
Dim notesdocument, branchendocument As NotesDocument
Dim BranchenID As String
Dim strSearch As String
Dim firmencollection As NotesDocumentCollection
Dim formitem, fielditem, fielditem2 As NotesItem
Dim boxType As Long
Dim documentcount, firmencount, branchencount, help1, help2, help3, help4, help5, help6, answer, answer2 As Integer
Set database = session.CurrentDatabase
strSearch = |Form = "Kontakt"|
Set firmencollection = database.Search(strSearch, Nothing, 0)
documentcount = firmencollection.Count
help1 = 1
help2 = 1
help3 = documentcount / 20
help4 = help3
help5 = 5
help6 = help5
Do While help1 < documentcount
Set notesdocument = firmencollection.GetNthDocument(help2)
Set formitem = notesdocument.GetFirstItem("BranchenID")
BranchenID = formitem.values(0)
If BranchenID <> " " Then
Set branchendocument = branche.GetDocumentByKey(BranchenID, True)
Set fielditem = branchendocument.GetItemValue("BRHBR")
Set fielditem2 = branchendocument.GetItemValue("BRUBR")
Call fielditem.CopyItemToDocument(Kontakt, "HBranche")
Call fielditem2.CopyItemToDocument(Kontakt, "NBranche")
End If
If help3 < help1 Then
boxType& = MB_YESNO + MB_ICONQUESTION
answer = Messagebox("Weiterlaufen lassen? Bisher abgearbeitet " + help5 + "%.", boxType&, "Continue?")
If answer = 7 Then
Exit Do
End If
help3 = help3 + help4
help5 = help5 + help6
End If
help1 = help1 + 1
help2 = help2 + 1
Loop
Der Debugger bringt eine Fehlermeldung in Zeile:
"Set branchendocument = branche.GetDocumentByKey(BranchenID, True)".
Die Fehlermeldung lautet:
"Variant does not contain an object"
Könnt ihr mir das bitte mal erklären?
Axel:
Hi,
branche ist weder deklariert nocxh initialisiert.
füge folgende, fettgedruckte Zeilen ein:
Dim Session As New NotesSession
Dim database As NotesDatabase
Dim notesdocument, branchendocument As NotesDocument
Dim branche As NotesView
Dim BranchenID As String
Dim strSearch As String
Dim firmencollection As NotesDocumentCollection
Dim formitem, fielditem, fielditem2 As NotesItem
Dim boxType As Long
Dim documentcount, firmencount, branchencount, help1, help2, help3, help4, help5, help6, answer, answer2 As Integer
Set database = session.CurrentDatabase
Set branche = database.GetView("Name der Ansicht")
strSearch = |Form = "Kontakt"|
Set firmencollection = database.Search(strSearch, Nothing, 0)
documentcount = firmencollection.Count
help1 = 1
help2 = 1
help3 = documentcount / 20
help4 = help3
help5 = 5
help6 = help5
Do While help1 < documentcount
Set notesdocument = firmencollection.GetNthDocument(help2)
Set formitem = notesdocument.GetFirstItem("BranchenID")
BranchenID = formitem.values(0)
If BranchenID <> " " Then
Set branchendocument = branche.GetDocumentByKey(BranchenID, True)
Set fielditem = branchendocument.GetItemValue("BRHBR")
Set fielditem2 = branchendocument.GetItemValue("BRUBR")
Call fielditem.CopyItemToDocument(Kontakt, "HBranche")
Call fielditem2.CopyItemToDocument(Kontakt, "NBranche")
End If
If help3 < help1 Then
boxType& = MB_YESNO + MB_ICONQUESTION
answer = Messagebox("Weiterlaufen lassen? Bisher abgearbeitet " + help5 + "%.", boxType&, "Continue?")
If answer = 7 Then
Exit Do
End If
help3 = help3 + help4
help5 = help5 + help6
End If
help1 = help1 + 1
help2 = help2 + 1
Loop
Axel
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln