Verwaiste Dokumente löschen, wenn Parent gelöscht wird.

  • Mein Problem war, dass nach dem Löschen eines Hauptdokumentes die Antwort-Dokumente immer noch, unzugeordnet & verwaist, zu sehen war.


    Auf www.lotus.comhabe ich den folgenden Code dazu gefunden, der versprach genau das zu tun, was ich wollte:



    Copy & paste in das Datenbank Skript, unter QueryDeleteDocument, ausprobiert & funktioniert. An anderen Sachen weitergebastelt und Stunden später mal wieder ausprobiert: geht nicht mehr. :-/


    Nach endlosen Tests scheint es so zu sein, als würde es manchmal funktionieren und manchmal nicht! Ich konnte allerdings kein Schema feststellen.


    Vielleicht hat von Euch noch jemand zu so später Stunde eine Idee

    • Offizieller Beitrag

    Eventuell hilft dieser Code weiter.


    ' doc ... Dokument welches gelöscht werden soll
    Dim dc_res As NotesDocumentCollection


    While not doc is Nothing
    Set dc_res = doc.Responses ' Sucht alle Antworten
    Call dc_res.RemoveAll(True) ' Löscht alle Antworten
    Call doc.Remove(True) ' Löscht das Eltern-Dokument
    Wend



    Gruß
    Dirk

    Rein logisches Denken verschafft uns keine Erkenntnis über die wirkliche Welt.
    Alle Erkenntnis der Wirklichkeit beginnt mit der Erfahrung und endet mit ihr.
    Alle Aussagen, zu denen man auf rein logischen Wegen kommt, sind, was die Realität angeht, vollkommen leer.
    Albert Einstein

    • Offizieller Beitrag

    Sorry da hatte ich wohl überlesen, dass die Eltern-Dokumente schon gelöscht sind. Aber für diesn Fall habe ich auch einen Code-Schnipsel.


    ' doc_res ... irgend ein Kind-Dokument
    dim item as NotesItem


    set item = doc_res.GetFirstItem("$REF") ' in $REF steht die UID des Eltern-Dokuments


    if Not item is Nothing then ' falls es doch kein Kind-Dokument ist wir hier abgebrochen


    set doc = db.GetDocumentByUNID(item.Values(0)) ' suche nach dem Eltern-Dokument


    If doc is Nothing then ' falls es nicht vorhanden ist ...
    call doc_res.Remove(True) ' ... Kind-Dokument löschen
    end if


    end if



    Gruß
    Dirk

    Rein logisches Denken verschafft uns keine Erkenntnis über die wirkliche Welt.
    Alle Erkenntnis der Wirklichkeit beginnt mit der Erfahrung und endet mit ihr.
    Alle Aussagen, zu denen man auf rein logischen Wegen kommt, sind, was die Realität angeht, vollkommen leer.
    Albert Einstein

  • Hi,


    Dein Code hat ein Problem, wenn es Antworten auf Antworten gibt, da doc.responses meiner Meinung nach nur auf die erste Antwortebene verweist. Man müßte das irgendwie rekursiv lösen, etwa so in der Art (Achtung - nicht getestet)



    Mit ein wenig Fleiß kann man dann noch etwas Errorhandling einbauen und als Rückgabewert ein TRUE oder FALSE auswerfen, je nachdem, ob das Löschen funktioniert hat oder nicht ...

    Für jedes Problem gibt es eine einfache Lösung, die es noch schlimmer macht.

  • Oder wenn das Kind schon in den Brunnen gefallen ist - bzw. zur Sicherheit nach folgendem Schema:


    1. hole alle Dokumente aus der (db.alldocuments)
    2. für jedes doc
    falls Antwortdocument dann hole Parent
    falls parent is nothing dann deletedoc


    Das Ganze als zeitgesteuerter Agent bereinigt die DB periodisch im Hintergrund

    Für jedes Problem gibt es eine einfache Lösung, die es noch schlimmer macht.