Domino 9 und frühere Versionen > ND8: Entwicklung

Prüfung auf "Dokument verwaist" und dessen Umwandlung in Hauptdokument

<< < (4/5) > >>

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