Autor Thema: Event nach dem Schließen eines Dokumentes / modal Editdocument  (Gelesen 2186 mal)

Offline master

  • Junior Mitglied
  • **
  • Beiträge: 85
  • Geschlecht: Männlich
Hi,

in einer Anwendung bräuchte ich den ws.Editdocument eigentlich wie einen modalen Dialog, d.h. dass das Script wartet, bis das Dokumentfenster wieder geschlossen wurde.

Code
...
ws.Editdocument .....
msgbox "Dokument wird weiter verarbeitet"
....

Lotus Notes scheint das aber so nicht vorgesehen zu haben. Als nächste Lösung hatte ich dann mit den verschiedenen Events der Maske experimentiert (QueryClose, Postsave, Terminate), aber die Schwierigkeit hierbei ist, dass man innerhalb dieser Events teilweise Caching-Probleme hat, wenn das gleiche Dokument erneut geöffnet werden muss, Dialogmasken angezeigt etc., weil das Documentobjekt noch nicht aus dem Speicher entfernt ist.

Gibt es da ein Event / Timer oder ähnliches um danach wieder in den Programmablauf einzusteigen?


Gruß Klaus

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Du willst massenweise Dokumente im Frontend bearbeiten? Das ist keine wirklich sehr gute Idee. Kannst Du das ganze nicht im Backend erledigen?

Offline master

  • Junior Mitglied
  • **
  • Beiträge: 85
  • Geschlecht: Männlich
Hi Peter,

zum Zeitpunkt des "Editdocument" soll der Anwender in den RichText-Feldern rumfummeln können, daher muss ich auch warten. Die restliche Verarbeitung mache ich bereits im Backend.

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Erklär mal ein bisschen genauer was das werden soll. Ich hab's nicht so ganz verstanden; vorallem mit der Verarbeitung im Backend und Dialogmasken.

Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline Fineas

  • Aktives Mitglied
  • ***
  • Beiträge: 145
  • Geschlecht: Männlich
  • PCLP Dev/Admin 5,6,7,8
Wenn es modal sein soll, kommt eigentlich nur eine "Dialogbox" in Frage. Allerdings ist dann Richtext nicht mehr möglich. Wenn es ausreicht: Richtext Lite. Das wäre aber auch mit Vorsicht zu genießen. Die entscheidende Frage ist deshalb: worum gehts konkret?

Gruß, Heiko

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
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 ...

Offline master

  • Junior Mitglied
  • **
  • Beiträge: 85
  • Geschlecht: Männlich
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...

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
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)

Offline master

  • Junior Mitglied
  • **
  • Beiträge: 85
  • Geschlecht: Männlich
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
	

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.
« Letzte Änderung: 10.10.12 - 15:19:37 von master »

Offline master

  • Junior Mitglied
  • **
  • Beiträge: 85
  • Geschlecht: Männlich
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

Funktioniert
Code
	
	Set doc = MeinClassObjekt.Notesdocument 
	Set MeinClassObjekt.Notesdocument  = Nothing
	
	ws.Editdocument Editmodus, doc

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:

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz