Kennen Sie schon unseren Podcast? Thomas Bahn diskutiert mit Gästen aus Wirtschaft und Wissenschaft über Künstliche Intelligenz und Chatbots. Jetzt reinhören

Fehler im PostSave Event bei neuen Dokumenten

von Manuel,
assono GmbH, Standort Kiel,

Kürzlich hat einer unserer Kunden die Notes-Version von 7.x auf 8.5.3 FP3 aktualisiert, was an sich eine gute Idee ist wink.gif.
In Folge dessen sind zwei unserer Anwendungen auf die Nase gefallen, da es offenbar mit Notes-Versionen > 8.5.x einen Fehler im PostSave-Event gibt. Da wir in unseren Anwendungen recht selten auf das PostSave-Event überhaupt zurück greifen, ist das auch nicht vorher schon bei anderen Kunden oder Anwendungen aufgefallen.

Das Problem betrifft offenbar NotesDocument-LotusScript-Objekte von Dokumenten, die gerade erst neu angelegt wurden und vor dem PostSave das erste Mal gespeichert wurden. Offenbar ist dieses Objekt zum Zeitpunkt, in dem das PostSave ausgelöst wird, noch nicht vollständig initialisiert, so dass einige Properties oder Funktionen fehlerhafte Werte zurück geben oder gleich Fehler werfen.

Die Reihenfolge ist also folgendermaßen:

  1. Das Dokument wird neu erzeugt. Bei der Erzeugung wird im QueryOpen gemäß "unserem" Model-View-Controller-Konzept das Model mitsamt dem Document-Object erzeugt
  2. Nach einigen Eingaben wird die Speicherung ausgelöst
  3. Im QuerySave wird das Dokument validiert
  4. Das Dokument wird (nach erfolgreicher Validierung) gespeichert
  5. Im PostSave greifen wird auf Eigenschaften und Funktionen des Document-Objects zu, das wir im QueryOpen erzeugt haben. Dabei passieren die besagten Fehler.

Die folgenden zwei Fehler sind dabei konkret (in jeweils einer anderen Anwendung) aufgetreten, aber es mag natürlich noch mehr geben:

NotesDocument.NoteID gibt den Wert "0"

Wir rufen in einer Anwendung einen Agenten aus dem PostSave heraus auf, weil dieser den Out-of-Office-Agenten (oder Service) aktivieren soll. Beim Aufruf wird die NoteID als Kontext übergeben:

agent.runOnServer(source.document.noteID)
Die NoteID wird dann im Agenten selbst wieder aus dem Kontext ausgelesen:

session.currentAgent.ParameterDocNoteID
Aber - oh weh - die NoteID ist "0", so dass der Agent natürlich mit Fehlermeldung aussteigt. sad.gif Das hat in früheren Notes-Versionen noch funktioniert, aber war auch mit Notes 9 noch reproduzierbar. Dass es sich hier um nicht beabsichtigtes Verhalten handeln muss, zeigt sich auch daran, dass es einen leicht krummen aber einfachen Workaround gibt. Wir holen uns die NoteID einfach mit Formelsprache:

noteID = Evaluate(|@Right(@NoteID;"NT")|, source.document)
und übergeben diese einfach an den Agenten:

agent.runOnServer(noteID(0))


Nun mag man kein Freund davon sein, Formelsprache mit Evaluate in LotusScript auszuführen, aber zumindest funktioniert es.

Fehler mit NotesDocument.CopyToDatabase

In einer anderen Anwendung werden Dokumente im PostSave (auf Nachfrage hin) in eine Archivdatenbank kopiert. Dazu nutzen wir die Funktion:

NotesDocument.copyToDatabase(NotesDatabase)
Diese Funktion wirft allerdings den Fehler "Invalid or nonexistent document". Wenn man nach dieser Fehlermeldung im Kontext mit copyToDatabase bei Gugl sucht, findet man auch. Allerdings funktioniert der vorgeschlagene Lösungsweg, den Code in das PostSave zu verschieben, eben nicht - oder nicht ohne Weiteres.

Und die Lösung dafür ist ähnlich Facepalm-tauglich, wie die Obige.

Man hole sich die UniqueID des aktuellen Dokumentes und erzeuge sich davon ein neues Notesdocument Objekt, um darauf die Operation auszuführen. Das könnte ungefähr so aussehen:

unid = source.Document.Universalid
Set newDocumentObject = notesDatabase.getDocumentByUNID(unid)
Set archiveDoc = newDocumentObject.CopyToDatabase(archiveDB)


Ich bin nicht begeistert, aber es läuft sad.gif. Dieses zweite Problem war übrigens mit Notes 9 nicht mehr reproduzierbar.


Ergänzungen zu weiteren Fehlern ähnlicher Natur oder Anregungen zu Lösungsstrategien sind immer herzlichst willkommen smile.gif.

Fachbeitrag HCL Notes 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

Sie haben Fragen?

Wenn Sie mehr über unsere Angebote erfahren möchten, können Sie uns jederzeit kontaktieren. Gerne erstellen wir eine individuelle Demo für Sie.

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
Vertrieb: +49 4307 900 411

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