Domino 9 und frühere Versionen > ND8: Entwicklung
Prüfung auf "Dokument verwaist" und dessen Umwandlung in Hauptdokument
koehlerbv:
Eigentlich müsstest Du in der Zeile
Set Parent = db.GetDocumentByUNID(DocUNID)
immer dann auf einen Fehler laufen ( lsERR_NOTES_BAD_UNID (4091)), wenn das $Ref auf ein nicht mehr vorhandenes Dokument verweist. Diesen Fehler musst Du in einem speziellen ErrorHandler abfangen und dort reagieren.
Es gibt hierzu ebenfalls in der DesignerHelp ein Code-Beispiel.
Bernhard
dnotes:
Auf einen Fehler wirst Du wahrscheinlich nicht immer laufen. Korrigiere mich falls das nicht stimmt.
Das Problem könnte sein, dass Du bei set Parent auch gelöschtre Dokumente angezeigt bekommst; allerdings ohne nennenswerten Inhalt.
Hängt m.E. mit den deletionsstub zusammen.
Du musst also noch überprüfen, ob das Dok ein Deletionstub ist oder nicht.
Vielleicht als erster Ansatz überprüfen, ob das parent.Authors(0) = "" ist.
Das dürfte nur bei einem solchen deletionstub der Fall sein.
Peter Klett:
Nach parent.Authors zu suchen, ist nicht zu empfehlen. In einer zufällig ausgewählten Mail in meiner Maildatenbank existiert dieses Feld nicht. Besser ist m.E. zu prüfen, ob Items vorhanden sind
If Not Isarray (Parent.Items) Then
'Dokument ist gelöscht
End If
In Deinem Script wirst Du auf einen Fehler laufen, wenn Du tatsächlich ein Dokument änderst. Deine Ansicht ist gefiltert nach Vorhandensein des Items $REF. Änderst Du das aktuelle Dokument, hat dieses nicht mehr das Item und bei
Set Doc = Ansicht.GetNextDocument(doc)
bekommst Du den Hinweis, dass das Dokument doc nicht in der Ansicht enthalten ist. Eine Collection ist da mein persönlicher Favorit, alternativ musst Du mit mehreren Document-Objekten hantieren oder ein Aktualisieren-Flag in der Ansicht setzen, was aber nachher wieder zurückgesetzt werden muss.
EDIT: noch ein Nachsatz zur besseren Wartbarkeit
Anstelle von
--- Code: ---While Not Doc Is Nothing
If Doc.Form(0) = "Memo" Then
DocUNID = doc.ParentDocumentUNID
Set Parent = db.GetDocumentByUNID(DocUNID)
If Parent Is Nothing Then
Call doc.RemoveItem( "$Ref" )
Call doc.Save( True, True )
End If
Else
If Doc.Form(0) = "Reply" Then
DocUNID = doc.ParentDocumentUNID
Set Parent = db.GetDocumentByUNID(DocUNID)
If Parent Is Nothing Then
Call doc.RemoveItem( "$Ref" )
Call doc.Save( True, True )
End If
End If
End If
Set Doc = Ansicht.GetNextDocument(doc)
Wend
--- Ende Code ---
würde ich die Bedingung mit einem OR schreiben, dann hast Du den Schleifeninhalt nur einmal
--- Code: ---While Not Doc Is Nothing
If Doc.Form(0) = "Memo" Or Doc.Form(0) = "Reply" Then
DocUNID = doc.ParentDocumentUNID
Set Parent = db.GetDocumentByUNID(DocUNID)
If Parent Is Nothing Then
Call doc.RemoveItem( "$Ref" )
Call doc.Save( True, True )
End If
End If
Set Doc = Ansicht.GetNextDocument(doc)
Wend
--- Ende Code ---
Das aber nur am Rande ...
dnotes:
parent.Authors ist kein Feld in einem Dokument sondern ein Eigenschaft des Objektes Dokument.
Ich kann mir kein Dokument vorstellen, daß diese Eigenschaft nicht besitzt.
Peter Klett:
--- Zitat von: dnotes am 29.07.13 - 11:00:45 ---parent.Authors ist kein Feld in einem Dokument sondern ein Eigenschaft des Objektes Dokument.
Ich kann mir kein Dokument vorstellen, daß diese Eigenschaft nicht besitzt.
--- Ende Zitat ---
Stimmt natürlich. Ist das im Falle des gelöschten Dokuments auch zwingend ein Array? Mich irritierte die (0) in Deinem Post ...
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln