Domino 9 und frühere Versionen > ND8: Entwicklung
Last input key von der Tastatur
(1/1)
rhaller:
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
Johnson:
Hall rhaller,
Frage zum Verständnis...
Mit...
--- Code: ---Set uitool = ws.Editdocument (True, tooldoc, False,,, False)
uitool.Close True
--- Ende Code ---
... öffnest du das Hauptdokument "tooldoc" und schließt es danach gleich wieder, um es direkt danach mit ...
--- Code: ---ws.Editdocument True, tooldoc, False,,, False
--- Ende Code ---
...erneut zu öffnen?
rhaller:
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)
Johnson:
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
--- Ende Code ---
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
--- Ende Code ---
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
--- Ende Code ---
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?
rhaller:
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
Navigation
[0] Themen-Index
Zur normalen Ansicht wechseln