LotusScript: CopyToDatabase verwirrt NotesDocument.Responses

von Bernd Hort,
assono GmbH, Standort Hamburg,

Eine Zeit lang habe ich gerne mit Antwortdokumenten in Lotus Notes gearbeitet. Ich mochte die Art, wie sie eindeutige Beziehungen zwischen verschiedenen Dokumenten herstellten. In letzter Zeit bin ich ein wenig davon abgekommen, weil Antwortdokumente in bestimmten Bereichen unflexibel sind. Nun bin ich auf einen eigenartigen Fehler gestoßen, der mein Vertrauen in die Antworthierarchien ein wenig erschüttert.

Für eine Anwendung sollten Hauptdokumente inklusive ihrer Antwortdokumente kopiert werden. Mit einer Kombination aus NotesDocument.CopyToDatabase und NotesDocument.MakeResponse eigentlich kein Problem. Bis die Anwender sich darüber beschwerten, dass beim Löschen von Hauptdokumenten auf einmal die falschen Antwortdokumente mit gelöscht wurden.

In der Anwendung war im Postdocumentdelete-Event eine Funktion implementiert, dass beim Löschen eines Hauptdokumentes über die Eigenschaft NotesDocument.Responses auch die zugehörigen Antwortdokumente mit gelöscht wurden.

Es hat mich einige Zeit gekostet herauszubekommen, wo das Problem lag. Ich habe mir dazu eine kleine Testdatenbank gebaut. In der Datenbank habe ich dann ein Hauptdokument und zwei Antwortdokumente erstellt. A picture named M2

Mit Hilfe eines Agenten habe ich wie oben beschrieben Kopien angelegt. Auf den ersten Blick sieht alles ganz normal aus. Das $Ref-Feld in den kopierten Antwortdokumenten verweist auf das kopierte Hauptdokument. A picture named M3

Weil man das Löschen von Dokumenten so schwer im Screenshot zeigen kann, habe ich mich entschlossen die Dokumente einzufärben. Dabei werden die Farbwerte in das Hauptdokument und mittels der Eigenschaft NotesDocument.Responses in die Antwortdokumente geschrieben. A picture named M4

Um so erstaunter war ich, das reproduzierbar immer das erste kopierte Antwortdokument mit eingefärbt wurde. Dieses eigenartige Verhalten konnte sowohl unter 6.5.6 als auch unter 7.0.3 nachgestellt werden. A picture named M5

Mit ein wenig Probieren habe ich den Fehler eingrenzen können.

Set docCopy = db.CreateDocument
Call docOriginal.CopyAllItems(docCopy)
Call docCopy.ReplaceItemValue("Subject", docOriginal.GetItemValue("Subject")(0) & " (Copy)")

If docOriginal.Responses.Count <> 0 Then
       Call CopyResponses(docOriginal, docCopy)
End If

Call docCopy.Save(True, True, True)

Beim Erstellen der Kopien wurde das kopierte Hauptdokument erst gespeichert, nachdem die Antwortdokumente kopiert und zugewiesen wurden. Nachdem ich die Reihenfolge umgestellt hatte und zuerst gespeichert und dann die Antwortdokumente kopiert hatte, trat der Fehler nicht mehr auf.

Wer es selber einmal ausprobieren möchte, hier ist die zip.gif Beispieldatenbank.

Update:
Anbei der Code wie die Kopien erstellt werden können, ohne das dieser Fehler auftritt.

Set docCopy = db.CreateDocument
Call docOriginal.CopyAllItems(docCopy)
Call docCopy.ReplaceItemValue("Subject", docOriginal.GetItemValue("Subject")(0) & " (Copy)")

Call docCopy.Save(True, True, True)

If docOriginal.Responses.Count <> 0 Then
       Call CopyResponses(docOriginal, docCopy)
End If

Fachbeitrag Entwicklung

Sie haben Fragen zu diesem Artikel? Kontaktieren Sie uns gerne: blog@assono.de

Sie wollen eine individuelle Lösung? Kontaktieren Sie uns

Weitere interessante Artikel

Sie haben Fragen? Wir sind für Sie da.

Wenn Sie mehr über unsere Angebote erfahren möchten, können Sie uns jederzeit kontaktieren. Sie können uns auf verschiedene Weisen für eine unverbindliche Erstberatung erreichen:

assono GmbH

Standort Kiel (Zentrale)
assono GmbH
Lise-Meitner-Straße 1–7
24223 Schwentinental

Standort Hamburg
assono GmbH
Bornkampsweg 58
22761 Hamburg

Telefonnummern:
Zentrale: +49 4307 900 407
Techn. Hotline: +49 4307 900 403
Vertrieb: +49 4307 900 402

E-Mail-Adressen:
kontakt@assono.de
bewerbung@assono.de