Domino 9 und frühere Versionen > ND8: Entwicklung
Event nach dem Schließen eines Dokumentes / modal Editdocument
Peter Klett:
Also willst Du z.B. 5 Dokumente markieren und auf einen Knopf drücken. Dann werden die Dokumente im Backend vorbereitet und zum Schluss sollen die nacheinander einzeln geöffnet, vom User bearbeitet, dann geschlossen und weiterverarbeitet werden?
Vergiss es ...
master:
Ich hatte gehofft, euch mit den Details verschonen zu können.
Grundsätzlich wird zuerst im Backend ein Dokument zusammengestellt. Zu einem bestimmten soll dem Anwender das Dokument vorgelegt werden. Hier soll er im RichText-Feldern das Dokument bearbeiten können. Leider kann ich das nicht in einer Dialogmaske richtig modal machen, weil die Bearbeitung auch länger dauern kann und er nebenbei mal eMails checken oder andere Anwendungen aufmachen können soll. Ist er mit der Bearbeitung des Dokumentes fertig, soll er auf einen Aktionsbutton "weiter" klicken und das Dokument wird wieder im Backend verarbeitet. Je nach Situation kann es notwendig sein, dass es leider in einem Loop wieder mit Editdokument geöffnet wird und dann fangen die Cachprobleme an...
Peter Klett:
Dann würde ich die weiteren Aktivitäten in den Weiter-Button einbauen, dann ist das vollkommen modal. Dokument öffnet sich, Benutzer tippt, klickt auf "Weiter", falls notwendig öffnet sich dann das Dokument erneut zur nächsten Bearbeitung usw. Den aktuellen Status, auf den der Weiter-Button reagiert, kannst Du ja im Dokument speichern. Ganz wichtig ist (und da sehe ich Deine "Cache-Probleme"), dass Du das Dokument aus dem Speicher bekommen musst.
Also sinngemäß im Weiter-Button so
uidoc speichern (wg. Richtext, da reicht nicht das doc)
uidoc schließen
id merken ( id = doc.UniversalID)
Set uidoc = Nothing / alternativ: Delete uidoc
Set doc = Nothing / Delete doc
Set doc = db.GetDocumentByUnid (id)
Set uidoc = workspace.EditDocument (doc)
master:
Hallo Peter,
danke für die Antwort. So ähnlich habe ich es auch gemacht, nur dass beim 2. EditDocument die Felder wieder im Ursprungszustand angezeigt wurden, wie es das Backend beschrieben hat.
Bei einer Testmaske hat es jetzt aber funktioniert, so dass ich am suchen bin, wo der Cache mir das alte Dokument wieder herzaubert.
Der Loop funktioniert schon mal:
--- Code: --- Dim se As New Notessession
Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument
Dim unid As String
Set uidoc = ws.CurrentDocument
If uidoc.EditMode Then
uidoc.Save
End If
unid = uidoc.Document.UniversalID
uidoc.Close True
Delete uidoc
Set uidoc = Nothing ' Doppelt hält besser ;)
Set doc = se.CurrentDatabase.GetDocumentByUNID(unid)
Set dialogdoc = se.CurrentDatabase.createdocument
ws.DialogBox "Testdialog", True, True, False, False, False, False, "bla bla bla", dialogdoc, True
ws.EditDocument True, doc
--- Ende Code ---
Unschön ist, dass bei der DialogBox das UIDoc im Hintergrund immer noch offen ist, obwohl beim .Close das True für Sofortige Schließung angegeben ist, aber zur Not kann man damit leben...
Ich analysiere noch die Unterschiede und gebe Bescheid, wo die alte Fassung des Dokumentes her kommt.
master:
So, die ganze Sache läuft nun und es ist ein für mich unerklärliches Phänomen...
Funktioniert nicht:
--- Code: --- Ws.Editdocument True, MeinClassObjekt.Notesdocument
--- Ende Code ---
Funktioniert
--- Code: ---
Set doc = MeinClassObjekt.Notesdocument
Set MeinClassObjekt.Notesdocument = Nothing
ws.Editdocument Editmodus, doc
--- Ende Code ---
Die Objektvariable für das Notesdocument wird in einer selbsterstellten Klasse von mir gehalten und das scheint Notes durcheinander zu bringen.
Da versucht man mal ordentlich Objektorientiert zu arbeiten und dann so was....
Vielen Dank für Eure Unterstützung. :knuddel:
Navigation
[0] Themen-Index
[*] Vorherige Sete
Zur normalen Ansicht wechseln