Autor Thema: Last input key von der Tastatur  (Gelesen 1377 mal)

Offline rhaller

  • Junior Mitglied
  • **
  • Beiträge: 67
Last input key von der Tastatur
« am: 26.04.13 - 11:40:47 »
Hallo Zusammen,

ich schlage mich mit einem Problem herum, vielleicht kann mir jemand von Euch helfen.
Also, beim Verlassen dieser Maske wird ein Code ausgeführt, der die zugrundeliegende Parent-Maske wieder in den Editmode versetzt. Das klappt auch ganz fein, bis auf eine Situation:

Der User ändert ein paar Werte in der Maske und drückt die ESC-Taste. Dann kommt die Notes-Dialogbox "Wollen Sie das Dokument speichern". Beim Klick auf "Ja" wird auch der Querysave-Code ausgeführt, danach dann der im Queryclose.

Im Queryclose steht u. a. folgender Code:

             Set uitool = ws.Editdocument (True, tooldoc, False,,, False)
             uitool.Close True
             ws.Editdocument True, tooldoc, False,,, False

Der Code wird bei allen anderen Arten, die Maske zu verlassen, anstandslos ausgeführt. Bei der Abfolge mit ESC-Taste und Speichern-Ja geht der Debugger auch über die Codezeilen, ohne zu klagen. Im Resultat bleibt aber die Parentmaske (tooldoc) im Lesemodus stehen und wird nicht in den Editmode zurückgesetzt.

Hat vielleicht jemand eine Idee, wo das Problem liegt oder ob im Code eine Abfolge falsch ist. Das wäre super, vielen Dank!

Grüsse
Rudi


Offline Johnson

  • Senior Mitglied
  • ****
  • Beiträge: 258
  • Geschlecht: Männlich
Re: Last input key von der Tastatur
« Antwort #1 am: 26.04.13 - 13:30:56 »
Hall rhaller,

Frage zum Verständnis...

Mit...
Code
Set uitool = ws.Editdocument (True, tooldoc, False,,, False)
             uitool.Close True

... öffnest du das Hauptdokument "tooldoc" und schließt es danach gleich wieder, um es direkt danach mit ...

Code
ws.Editdocument True, tooldoc, False,,, False

...erneut zu öffnen?
Gruß
Johnson

Offline rhaller

  • Junior Mitglied
  • **
  • Beiträge: 67
Re: Last input key von der Tastatur
« Antwort #2 am: 26.04.13 - 13:52:32 »
Ja, so verrückt es klingt:

          If bEditMode Then
             Set uitool = ws.Editdocument (True, tooldoc, False,,, False)
             uitool.Close True
          End If
          ws.Editdocument True, tooldoc, False,,, False
          ws.Reloadwindow

Ich bin im Lauf des Entwickelns und Testen auf diese "urige" Codefolge gekommen.
Dazu muss man aber sagen, dass das Parentdokument zuvor in Lesemodus gesetzt wird.
Es funktioniert auch, nur eben in dieser einen Situation nicht (ESC-Taste, Speichern-Ja)

Offline Johnson

  • Senior Mitglied
  • ****
  • Beiträge: 258
  • Geschlecht: Männlich
Re: Last input key von der Tastatur
« Antwort #3 am: 26.04.13 - 14:23:07 »
Also um auf das Hauptdokument innerhalb eines Antwortdokumentes zugreifen zu können, habe sich für mich bisher folgende Vorgehensweise etabliert:


Maske des Antwortdokumentes


(Declarations)

Code
	
	Private uidoc_parent as NotesUIDocument
	


Initialize

Beim Öffnen des Antwortdokumentes wird ein Object des Hauptdokumentes in der globalen Variable gespeichert. Auf dieses Objekt kann man später z.B. im Querysave, Queryclose oder anderen Actions im Antwortdokument zugreifen und damit arbeiten.

Code
	
	Dim uiws As NotesUIWorkspace
	
	Set uiws = New NotesUIWorkspace
	Set uidoc_parent = uiws.CurrentDocument
	


Queryclose

Beim Schließen des Antwortdokumentes wird auf das Objet des Hauptdokumentes zugegriffen. Damit kann man dieses in einen anderen Modus versetzen, Felder aktualisieren oder eben speichern bzw. schließen.

Code
	
	Dim doc As NotesDocument
	Dim doc_parent As NotesDocument
	
	Set doc = source.Document
	
	If Not(uidoc_parent Is Nothing) Then
		Set doc_parent = uidoc_parent.Document
		If doc_parent.UniversalID = doc.ParentDocumentUNID Then
			If Not(uidoc_parent.EditMode) Then
				' change mode if not already done
				uidoc_parent.EditMode = True
			End If
			' update parent document
			doc_parent.Item = "foobar"...
		End If
	End If
	

Aber ein Dokument erst zu öffnen, dann zu schließen, um es dann wieder zu öffnen, macht eigentlich keinen Sinn.

Bleibt also die eigentliche Frage bestehen: Was ist deine eigentliche Anforderung?
« Letzte Änderung: 26.04.13 - 14:25:50 von Johnson »
Gruß
Johnson

Offline rhaller

  • Junior Mitglied
  • **
  • Beiträge: 67
Re: Last input key von der Tastatur
« Antwort #4 am: 26.04.13 - 15:30:54 »
Danke für den Tipp, das werde ich zusätzlich noch ausprobieren!

Die eigentliche Anforderung ist, dass das Antwort-/Childdokument Daten ins Parentdokument zurückschreibt, während es geöffnet und auch gesperrt ist.

Wird das Childdokument geöffnet muss das Parentdokument zwingend in den Lesemodus versetzt werden und für Frontend-Änderungen gesperrt sein. Das erreiche ich durch

uidoc_parent.close True
ws.EditDocument (True, doc, False,,,False)

Dies geschieht in der Procedure, die darin aufbereitete Daten des Parentdokuments ins Childdokument transportiert. Dort wird auch der Key des Parentdokuments in das profiledoc des Users geschrieben.

Wird das Childdokument geschlossen (mit oder ohne Speichern), muss das Parentdokument wieder geöffnet sein. Zudem muss das Parentdokument während der Bearbeitung gesperrt bleiben, auch im Background (d. h. auch wenn das Childdokument direkt aus einer Ansicht geöffnet wird). Dann kommt aber auch das Problem mit dem Wiederöffnen im Editmodus nicht zum Tragen.

Es ist also nicht ganz einfach ... oder oder ich sehe es zu kompliziert

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz