Prüfen von DocLinks per Agent

  • Hallo zusammen!


    Wir haben bei uns eine Datenbank mit Arbeitsanweisungen. In einen RichText-Feld werden die Anweisungen dokumentiert und darin auch Links auf andere Dokumente reinkopiert. Wenn diese Dokumente in eine andere DB archiviert werden, funktioniert der Link natürlich nicht mehr.
    Ich überlege, ob man per Agent regelmäßig in den Dokumenten diese Links überprüfen kann.
    Geht sowas und wenn ja, wie?


    Danke schonmal


    Tino

  • Hallo!
    Ich muss zu dem Thema doch nochmal nachfragen. Der folgende Script funktioniert bei den meisten Docs in der Ansicht, aber bei manchen bringt er den Fehler "invalid universal id", wenn ich mir das beim Link hinterlegte Doc ("... set docLink ... ) öffnen will:


    Sub Initialize
    Dim session As NotesSession
    Dim dirLink As NotesDbDirectory
    Dim db As NotesDatabase
    Dim dc As NotesDocumentCollection
    Dim doc As NotesDocument
    Dim MailDoc As NotesDocument
    Dim rti As NotesRichTextItem
    Dim rtnav As NotesRichTextNavigator
    Dim rtlink As NotesRichTextDocLink
    Dim x As Variant
    Dim odosview As NotesView

    Set session = New NotesSession
    Set db = session.CurrentDatabase
    Set odosview = db.GetView( "1A" )
    Set doc = odosview.GetFirstDocument

    Do While Not(doc Is Nothing)

    'ROUTINE

    Set rti = doc.GetFirstItem("GROB_ABLAUF")
    Set rtnav = rti.CreateNavigator

    On Error Goto NächstesDokument

    If Not rtnav.FindFirstElement(RTELEM_TYPE_DOCLINK) Then
    Resume NächstesDokument
    End If

    Do
    LDoc$ =""
    View$=""
    server$ =""

    On Error Goto ErrHandler

    Set rtlink = rtnav.GetElement

    server$="Servername"

    End If

    DbRep$ = rtlink.DbReplicaID
    Dim dbLink As New NotesDatabase( "", "" )

    On Error Goto InvalidUNID
    If Not dbLink.OpenByReplicaID(server$, DbRep$ ) Then
    Messagebox "No local replica",, "Cannot find database"
    Exit Sub
    End If
    'd = dbLink.OpenByReplicaID( server$, DbRep$ )

    If rtlink.ViewUNID <> String$(32, "0") Then
    Meldung$ = rtlink.DisplayComment
    View$ = rtlink.ViewUNID
    End If

    If rtlink.DocUNID <> String$(32, "0") Then
    LDoc$ = rtlink.DocUNID
    Dim docLink As NotesDocument
    Set doclink=Nothing

    On Error Goto ErrHandler

    Set docLink = dbLink.GetDocumentByUNID( rtlink.DocUNID )
    Messagebox docLink.NrUndGliederungGesamt(0),, "Subject of document"
    End If

    Loop While rtnav.FindNextElement


    NächstesDokument:

    Set doc = odosview.GetNextDocument(doc)

    Loop

    Exit Sub

    ErrHandler:

    Messagebox "Cannot locate document",, "No document"

    Resume NächstesDokument

    InvalidUNID:
    Messagebox "Cannot locate document",, "No document"
    Resume NächstesDokument

    End Sub


    Kann mir bitte jemand sagen, welchen Grund das haben kann?
    Oder auch, wie ich den Fehler umgehen kann, denn das "On Error Goto ErrHandler" funktioniert hier irgendwie nicht.


    Danke


    Tino

  • Danke


    Hab ich probiert ... ist nur das Problem, dass ich den Link tatsächlich öffnen kann, wenn ich im Hauptdokument stehe ...


    Die UNID liest er sich doch aus dem Link aus?!



    Und warum funktioniert das "on Error" nicht?

  • Ich habe die UNID (LDoc$) im Debugger ausgeben lassen und dann verglichen mit der Angabe des Links über die Dokumenteigenschaften, als ich den Link öffnete.



    Und außerdem wollte ich ja genau die Link herausfiltern, bei denen das verknüpfte Dokument nicht mehr existiert. das geht dann wohl nicht? Oder denke ich jetzt falsch?

  • Das ist dann wirklich seltsam.


    Gibt es eventuell die Möglichkeit, daß du mir da eine Test DB zur Verfügung stellst um es selbst zu reproduzieren.


    Vielleicht kann ich dir dann noch einen Tip geben

  • Sorry. das kann ich leider nicht :(


    Darf ich trotzdem nochmal nachfragen:


    Und außerdem wollte ich ja genau die Link herausfiltern, bei denen das verknüpfte Dokument nicht mehr existiert. das geht dann wohl nicht? Oder denke ich jetzt falsch?

  • Liegen tut es an der schon, deswegen ja auch die Frage wegen ner Kopie mit einem defekten Dokument um da vielleicht mal mehr herauszufinden.


    Wenn es nur darum geht wegen Firmeninternas könntest du ja die Werte unkenntlich machen