Autor Thema: GetDocumentbyKey findet Datensätze nicht  (Gelesen 1539 mal)

Offline Roam

  • Frischling
  • *
  • Beiträge: 5
GetDocumentbyKey findet Datensätze nicht
« am: 19.10.06 - 08:22:44 »
Guten Morgen,

ich habe mal wieder ein Problem und zwar kopiere ich von einer Datenbank Datensätze die älter sind als 2 Monate in eine Archiv Datenbank. Nach dem kopieren will ich direkt überprüfen ob sie angekommen sind bevor ich sie lösche. Allerdings findet er in den meisten fällen das Dokument in der anderen Datenbank nicht obwohl es angekommen ist.

Hier ist der Code:

   Dim archivdb As New notesdatabase("TV71MD01", "archivDB.nsf")
   Dim doc As NotesDocument
   Dim doc2 As notesdocument
   Dim pruefdoc As NotesDocument
   Dim db As NotesDatabase
   Dim s As New notessession

   Set vw_pruefen = archivdb.GetView("posvwDocid")   
   Set db = s.CurrentDatabase
   Set vw = db.GetView("posvwAblagenummer")
   Set doc = vw.GetFirstDocument

   Do While Not (doc Is Nothing)
               Call doc.CopyToDatabase(archivdb)
               '#.. Prüfen ob es angekommen ist
               Set pruefdoc = vw_pruefen.GetDocumentByKey(doc.docid(0))
               '#...Wenn angekommen dann löschen               
               If Not pruefdoc Is Nothing Then
                  Set doc2 = doc
                  Set doc = vw.GetNextDocument(doc)
                                    '#..Variable sagt das hier schon nächstes dokument geholt wurde                  
                  nächstes = True
                  doc2.Remove(True)
               End If
      If nächstes = False Then
         Set doc = vw.GetNextDocument(doc)
      Else
         nächstes = False         
      End If
Loop


Danke im Vorraus.

Robin

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: GetDocumentbyKey findet Datensätze nicht
« Antwort #1 am: 19.10.06 - 08:33:09 »
Nicht so hurtig mit den jungen Pferden.
Wenn du ein Dokument kopierst, heisst das nicht implizit, dass es direkt im nächsten Schritt vollständig in die Datenbank übertragen ist und der index vollkommen aktualisiert ist.
Wären verteilte Systeme wie Lotus Domino so aufgebaut, würden sie sehr inperformant sein.
In den 90ern wurde von völlig transparenten Netzwerken gesäuselt. Das kann es aber mit unserem Stand der Technik nicht geben.
D.h. Es ist schon ein Unterschied, ob du auf ein lokales oder ein entferntes Dokument zugreifst.

In der Praxis:
Mach einfach ein
vw_pruefen.refresh
vor dem
Set pruefdoc = vw_pruefen.GetDocumentByKey(doc.docid(0))
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline ZaLudtske

  • Senior Mitglied
  • ****
  • Beiträge: 319
  • Geschlecht: Männlich
  • carpe diem
Re: GetDocumentbyKey findet Datensätze nicht
« Antwort #2 am: 19.10.06 - 08:34:36 »
Hallo,

die Überprüfung benötigst du normaler weise nicht, wenn du eine vernünftige Fehlerbehandlung einbaust. Für dein Problem gibt es 2 Lösungen:

1. Du mußt ein Refresh des View-Index (Methode refresh) durchführen. Das kann unter Umständen sehr lange dauern und ist ein Performance killer bei großen Views.

2. Die Methode CopyToDatabase liefert den Bezug auf das neue Dokument zurück. Hier könntest du die DocumentUniqueId auslesen und dann das neue Dokument, das du eh im Zugriff hast mit notesdatabase.getdocumentbyunid erneut lesen.

Ich bin aber der Meinung, dass du das alles nicht brauchst, wenn kein Fehler auftritt oder die Methode CopyToDatabase nicht den Wert Nothing liefert

Rainer
Rainer Zaske

MCSD - C#

Glombi

  • Gast
Re: GetDocumentbyKey findet Datensätze nicht
« Antwort #3 am: 19.10.06 - 08:56:22 »
Warum nicht einfach so:

set pruefdoc = doc.CopyToDatabase(archivdb)
               If Not pruefdoc Is Nothing Then
....

Damit ersparst Du Dir das Prüfen, ob das Dokument da ist.

Andreas

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz