LotusScript: CopyToDatabase verwirrt NotesDocument.Responses

von Bernd, assono GmbH, Standort Hamburg, 28.03.2008

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

Bernd Hort

Bernd Hort

Diplom-Informatiker, Software-Entwickler & Speaker auf Fachkonferenzen

Bernd Hort ist Expert Digital Business Consultant bei assono. Seit mehr als 20 Jahren entwickelt er erfolgreich individuelle Software-Anwendungen für Unternehmen verschiedener Branchen. Insbesondere in den Bereichen HCL Notes und Domino (ehemals IBM) als auch bei aktuellen, unternehmensrelevanten Themen wie Web-Entwicklung und Web-Architektur, bei Angular-Anwendungen als auch bei progressiven Web-Apps kennt er die neusten Entwicklungen und weiß, wie diese eingesetzt werden können, um den größten Kundennutzen zu erzielen. Aufgrund seines Expertenwissens ist Bernd Hort regelmäßiger Sprecher auf nationalen und internationalen Fachkonferenzen.

Fachbeitrag Entwicklung

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

Sie haben Interesse an diesem Thema?

Gerne bieten wir Ihnen eine individuelle Beratung oder einen Workshop an.

Kontaktieren Sie uns

Weitere interessante Artikel