Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Roam 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
-
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))
-
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
-
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