Hallo @All,
also, mein Problem (Festlegung, ob eine Datenbank ein Dokument mit bekannte ID enthält) habe ich versucht mit dem ErrorHandler zu lösen.
Allerdings habe ich damit Schwierigkeiten: kann nicht das ErrHandle und das AfterError in dem Programm richtig platzieren, obwohl ich
Best Practices: Error Handling in Lotus Script: Einleitung
http://atnotes.de/index.php?topic=11980.0und andere Beiträge fleissig studiert habe. Ich habe das in meiner Funktion Update() aber es scheint falsch zu sein, oder das war falsche Platz in der Funktion.
Herzlichen Dank im Voraus, wenn jemand mir dabei helfen würde.
Hier ist der Code mit Kommentaren
'%INCLUDE "lsxbeerr.lss" 'Für den Test wird numerischer Code verwendet
Dim s As NotesSession
'Archiv PYM
Dim db As NotesDatabase
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument
Dim view As NotesView
Dim VEC As NotesViewEntryCollection
Dim ve As NotesViewEntry
Dim rti As NotesRichTextItem
Dim rtnav As NotesRichTextNavigator
Dim rtlink As NotesRichTextDocLink
'MailCopyDB
Dim dbMailCopy As NotesDatabase
Dim vMailCopy As NotesView
Dim IDdbMailCopy As String
Dim IDvMailCopy As String
Dim IDrtlink As String
Dim docMC As NotesDocument
'Archiv MailCopyDB
Dim AdbMC As NotesDatabase
Dim AvMC As NotesView
Dim tmpAvMC As NotesView
Dim IDAdbMC As String
Dim IDAvMC As String
Dim AdocMC As NotesDocument
Dim IDAdocMC As String
Dim item As NotesItem
Sub Initialize
Set s = New NotesSession
'MailCopyDB
Set dbMailCopy = s.GetDatabase( "", "test\mailcopy.nsf" )
IDdbMailCopy = dbMailCopy.ReplicaID
Set vMailCopy = dbMailCopy.GetView( "($All)" )
IDvMailCopy = vMailCopy.UniversalID
'ArchivMailCopyDB
Set AdbMC = s.GetDatabase( "", "test\archivMC.nsf" )
IDAdbMC = AdbMC.ReplicaID
Set AvMC = AdbMC.GetView( "($All)" )
IDAvMC = AvMC.UniversalID
Set tmpAvMC = AdbMC.GetView( "tmpArchiv" ) 'temporary Anscht wird erhalten das Link-Dokument mit dem Flag = "archiv"
'Archiv PYM
Set db = s.CurrentDatabase
Set view =db.getview("UpdateLink")
Set VEC = view.AllEntries
Set ve = VEC.GetFirstEntry()
While Not (ve Is Nothing)
Set doc = ve.Document 'PYM-Dokument mit den Links
'Das PYM-Dokument kann das Feld "DateiHyperlink" oder
'das Feld "DateiHyperlink" oder die beide Felder
'mit den Links enthalten
If doc.HasItem("DateiHyperlink") Then
Set rti = doc.GetFirstItem("DateiHyperlink")
Call Update()
End If
If doc.HasItem("DateiHyperlink_1") Then
Set rti = doc.GetFirstItem("DateiHyperlink_1")
Call Update()
End If
Set ve = VEC.getNextEntry(ve)
Wend
End Sub
Function Update()
On Error 4091 Goto ErrHandle 'lsERR_NOTES_BAD_UNID (=4091)
Set rtnav = rti.CreateNavigator
If rtnav.FindFirstElement(RTELEM_TYPE_DOCLINK) Then
'Wenn wenigstens ein Link in dem Dokument vorhandes ist
Do
Set rtlink = rtnav.GetElement
IDrtlink = rtlink.DocUnID
Set docMC = dbMailCopy.GetDocumentByUNID(IDrtlink)
'Link-Dokument in der MailCopyDB
If docMC.IsValid = True Then
'Wenn das Link-Dokument in der MailCopyDB vorhanden ist und nicht gelöscht
docMC.Categories = "archiv" 'Setzen Flag = "archiv"
Call docMC.Save( True, True )
Call docMC.CopyToDatabase( AdbMC )
'Das Link-Dokument aus der MailCopyDB in der ArchivMailCopyDB kopieren
Call tmpAvMC.Refresh
'Das kopierte Link-Dokument mit dem Flag = "archiv" erscheint in der Ansicht "tmpArchiv" in der ArchivMailCopyDB
Set AdocMC = tmpAvMC.GetFirstDocument
IDAdocMC = AdocMC.UniversalID
Call docMC.Save( True, True )
'Temporary für testen wird das Link-Dokument in der MailCopyDB mit dem Flag "archiv" gespeichert
'In der Produktion muss dieses Dokument gelöscht werden
'Call docMC.Remove(True)
'Der Link in dem PYM-Dokument bekommt neuen IDs zu dem Link-Dokument in der ArchivMailCopyDB
rtlink.DbReplicaID = IDAdbMC
rtlink.ViewUNID = IDAvMC
rtlink.DocUnID = IDAdocMC
'PYM-Dokument wird mit dem aktualisierten Link gespeichert
Call doc.Save( True, True )
AdocMC.Categories = ""
'Flag "archiv" in dem Link-Dokument in der Archiv MailCopyDB wird auf "" gesetzt
Call AdocMC.Save( True, True )
'Das Dokument verschwindet aus dem Ansicht "tmpArchiv"
Call tmpAvMC.Refresh
End If
Loop While rtnav.FindNextElement(RTELEM_TYPE_DOCLINK)
doc.UpdateLink = "1"
’Setzt Flag UpdateLink in dem PYM-Dokument auf „1“, d.h. UpdateLink für dises Dokument wurde durchgeführt und Link-Dokument wurde in der Datenbank MailCopy gefunden
Call doc.Save( True, True )
AfterError:
doc.UpdateLink = "2"
’Setzt Flag UpdateLink in dem PYM-Dokument auf „2“, d.h. UpdateLink für dises Dokument wurde durchgeführt und die Datenbank MailCopy enthält kein Dokument mit ID = Link-ID
Call doc.Save( True, True )
End If
ErrHandle:
'Messagebox "Error" & Str(Err) & ": " & Error$
Resume AfterError
End Function
Ein glücklikes, gesundes neues JahrIch wünsche ich allen !
Sofia