Autor Thema: DocumentCollection  (Gelesen 1795 mal)

Offline f.r@notesforum.de

  • Frischling
  • *
  • Beiträge: 47
  • Geschlecht: Männlich
DocumentCollection
« am: 22.01.03 - 09:44:11 »
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

Offline Meff

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.095
  • Geschlecht: Männlich
  • Das Denken der Zukunft muß Kriege unmöglich machen
    • apparet id etiam caeco
Re:DocumentCollection
« Antwort #1 am: 22.01.03 - 09:46:02 »
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 !?
« Letzte Änderung: 22.01.03 - 09:46:35 von Meff »
"Zwei Dinge sind zu unserer Arbeit nötig: Unermüdliche Ausdauer und die Bereitschaft, etwas, in das man viel Zeit und Arbeit gesteckt hat, wieder wegzuwerfen."
Albert Einstein

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re:DocumentCollection
« Antwort #2 am: 22.01.03 - 10:13:04 »
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

Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline f.r@notesforum.de

  • Frischling
  • *
  • Beiträge: 47
  • Geschlecht: Männlich
Re:DocumentCollection
« Antwort #3 am: 22.01.03 - 10:45:47 »
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?

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re:DocumentCollection
« Antwort #4 am: 22.01.03 - 12:45:40 »
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

Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline f.r@notesforum.de

  • Frischling
  • *
  • Beiträge: 47
  • Geschlecht: Männlich
Re:DocumentCollection
« Antwort #5 am: 22.01.03 - 13:43:08 »
Thanks very much
Einen von beiden Fehlern war auch mir schon aufgefallen. Danke für den anderen

Robert

Offline wflamme

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 690
  • Geschlecht: Männlich
  • Irgendwie geht das schon...
    • wflamme
Re:DocumentCollection
« Antwort #6 am: 22.01.03 - 15:50:16 »
Nochwas:
...
Dim docA, docB as Notesdocument
...

Damit ist docA vom Typ Variant deklariert, wie in VB auch.

Folge: miese Performance. Solltest Du ändern.
Grüße,
Wolfgang

"I love deadlines. I love the whooshing sound they make as they pass by..."
DOUGLAS ADAMS

wflamme@mainz-online.de
http://www.sns1.de/partner/flamme/wflamme.nsf

Offline f.r@notesforum.de

  • Frischling
  • *
  • Beiträge: 47
  • Geschlecht: Männlich
Re:DocumentCollection
« Antwort #7 am: 22.01.03 - 16:07:53 »
Hi Wolfgang,

dank dir für den guten Tipp.
Hab aber schon wieder ein neues Problem, hängt auch mit Performance zusammen, werd ich aber diesmal ins EntwicklerForum schreiben, würd mich freuen, wenn du darüber auch Bescheid weist.
Also nochmals danke

Robert

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz