Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: rar am 11.10.04 - 11:14:54
-
Griaß eich!
Gibt es eine Möglichkeit aus einem selbstgebastelten Button in einer Dialogbox diese zu schließen ohne zusätzlich auf den OK Button der Dialogbox klicken zu müssen?
lG
-
... mir ist da nix bekannt. :'(
klaus
-
Schon probiert mit NotesUIDocument.Close?
-
Oder:
@Command([FileCloseWindow])
(evtl. davor noch speichern falls man das muss....)
-
Das Close geht leider nicht so wie ich will...
Meine Aktion schaut so aus:
Ich erstelle im Backend ein Dokument. Das Dok öffne ich erst mal mit einer Dialogbox, in der sich u.a. der Button befindet. Über den Button kann man mit einer PickListCollection Werte aus einem anderen Dok übernehmen und dann in das neu erstellte Dok schreiben. Dann hol ich mir das neue Dok mit EditDocument ins Frontend
Mit dem uidoc.Close() wird zwar die Dialogbox beendet, aber das EditDocument funktioniert dann auch nicht.
Leider.
-
aber das EditDocument funktioniert dann auch nicht.
was bedeutet das?
-
Der Code, mit dem ich das Dok erstelle und befülle schaut ungefähr so aus:
Set doc = db.CreateDocument()
doc.Form = "mTicket"
Dim resp As Integer
resp = ws.DialogBox( "Dialogmaske", True, True, False, False, False, False, "Titel", doc, True, False)
If resp = False Then Exit Sub
Call doc.ComputeWithForm(True,True)
Call ws.EditDocument(True, doc, False)
In der Dialogmaske sind dann ein paar Eingabefelder und der Button mit dem Code:
Set uidoc = ws.CurrentDocument
Set doc = uidoc.Document
Set db = session.CurrentDatabase
Set coll = ws.PickListCollection(1,False, db.Server, db.FilePath, "aViewName",_
"Auswahl","Wähl ein Dokument aus" )
Set docWP = coll.GetFirstDocument()
If Not docWP Is Nothing Then
doc.Wknr = docWP.Wknr
..... (Felder übernehmen)
Call uidoc.Refresh()
Call uidoc.close()
End If
Ohne das uidoc.Close() (ganz unten) drück ich in der Pickliste auf den OK Button und dann muß ich in der Dialogbox nochmal drauf drücken.
Mit dem uidoc.Close() wird zwar die Dialogbox geschlossen, aber das uidoc.Edit greift nicht weil die Dialogbox nach dem Close ein False (=Abbruch) zurückgibt.
-
Hi,
ich glaube da wirst du Pech haben, das geht nicht so einfach. Ich habe mal in der Gestaltung einer prof. Anwendung gestöbert. Dort haben die Dialogboxen auch eigenprogrammierte OK- und Cancel-Buttons gehabt. Das war ein ziemlicher Aufstand, den die Programmierer damals gedreht hatten. Da war ein zusätzliches Feld in der Maske, ein User-Profildokument und was weiss ich noch alles (kann mich an die Einzelheiten nicht mehr genau erinnern, ist schon etwas länger her und man wird halt alt ;) :-\) im Spiel.
Kannst du deinen Dialog nicht etwas umgestalten, z.B. die Auswahl nicht über eine Picklist, sondern über eine Listenfeld, die mit @DbLookup gefüllt wird, machen. so könntest du dann die eigentlichen OK- und Cancel- Buttons benutzen.
Axel
-
Ich denke, das Hauptproblem liegt darin, dass nur der OK-Buhtong die in der Dialogbox gemachten Änderungen davor bewahrt, wegworfen zu werden.
Das mit dem erforderlichen "Aufstand" kann ich bestätigen, Axel ;D
Bernhard
-
rar: Wie rufst Du denn die Diabox auf? Wenn Du das aus dem PostOpen des Dokumentes machst, also das Dokument im normalen Fenster bereits offen ist, dann dürfte das doch funktionieren, dann musst Du nach dem Close ja keinen weiteren Code mehr ausführen.
-
rar: Wie rufst Du denn die Diabox auf? Wenn Du das aus dem PostOpen des Dokumentes machst, also das Dokument im normalen Fenster bereits offen ist, dann dürfte das doch funktionieren, dann musst Du nach dem Close ja keinen weiteren Code mehr ausführen.
Das bewahrt ihn nicht vor seinem Problem, Jens: Er will nicht zweimal OK (Picklist und Diabox) klicken lassen, was durchaus nachvollziehbar ist.
Nochmal aber das eigentliche Problem: Das in der Diabox verwendete Box wird im Ur-(Aufruf-)Zustand belassen, wenn nicht die Diabox mit OK geschlossen wird. Das ist zumindest meine Erfahrung (und erscheint mir auch sinnig), aber ich lasse mich da (sehr !) gerne eines Besseren belehren.
Bernhard
-
aber das uidoc.Edit greift nicht weil die Dialogbox nach dem Close ein False (=Abbruch) zurückgibt.
Nur eine Idee: Evtl. könnte man über Property notesUIDocument.DialogBoxCanceled tricksen im QueryClose der Dialogbox und so rausfinden was passiert ist.
-
Probier's aus, Matthias: Nur der Click auf "OK" ergibt NotesUIDocument.DialogBoxCanceled = True.
Nochmal: Es würde mich freuen, wenn ich mich irre.
Bernhard
-
Probier's aus, Matthias: Nur der Click auf "OK" ergibt NotesUIDocument.DialogBoxCanceled = True.
Stimmt.
Andere (wohl bessere) Idee:
RefreshParentNote.
Ich öffne per Script eine Dialogbox, die Dialogbox schließe ich via Button:
@Command( [RefreshParentNote] );
@PostedCommand([FileCloseWindow])
Als Rückgabewert bekomme ich True wenn ich auf den Buthong klicke.
-
Aua - was habe ich da übersehen !
Die gelobte DesignerHelp:
Usage
This method is used mainly to create your own buttons to dismiss a dialog box. Mostly used in the QueryClose event.
DANKE, Matthias !!!
Bernhard
-
Gern geschehen.
Ich hatte mich mal mit der Thematik hinreichend beschäftigt (OK-Button simulieren, Prüfung ob OK geklickt wurde, etc. etc.).
Gerade auf RefreshParentNote muss man erstmal kommen, da man da - bedingt durch den Namen - erstmal was anderes erwartet.
Habe unten noch ein Beispiel angehängt, weil es mich es interessiert.
Da wird in einer Dialogbox eine Msgbox (Yes / Cancel) aufgerufen. Durch Klick auf "Yes" wird alles geschlossen und Rückgabewert = True.
-
DANKE, Matthias.
Ich ziehe mir das morgen früh gleich rein. Ich habe gerade die tage ein Konstrukt "Per Dialogbox eine Options-Möglichkeit auswählen und mit der Auswahl diese übernehmen und Dialogbox schliessen".Klappt natürlich - aber offensichtlich viel zu kompliziert abgefackelt.
Wenn das übertragbar ist, stelle ich das Resultat auch sofort hier wieder zur Verfügung !
Gute Nacht !
Bernhard
-
Als ich den Fred vorhin gelesen habe, wollte ich gleich schreiben, daß ihr euch doch nicht bis Mitternacht damit rumschlagen musstet.
Jetzt hab ich aber Matthias' DB angeschaut und bin sehr froh daß ihr das gemacht habt.
Mit Call ws.RefreshParentNote im Button gehts wie es sollte. :D
Vielen, vielen Dank euch allen (insbesondere TMC).
lG aus IBK
-daniel
-
Ich hatte ja versprochen, hier noch mein "Studienergebnis" kund zu tun. Natürlich funktioniert das von Matthias genannte RefreshParentNote - nur nicht bei mir ;D
Aber hier ist der Kontext ein anderer: In einer Diabox will ich vom User eine Auswahl (Optionsschaltfläche). Wenn er ausgewählt hat, soll er nicht noch extra auf OK klicken müssen, sondern die Diabox soll gleich zufallen - ich weiss ja, was ich will (bzw. der Nutzer will). Im PostRecalc prüfe ich daher, ob mein Optionsfeld einen Wert hat.
Hier kann ich RefreshParentNote nun nicht einsetzen - das ruft ja selber erstmal PostRecalc auf, und die Katze beisst sich in den Schwanz.
Man kann halt nicht alles haben ...
Bernhard
-
Hm, schonmal probiert, ob ein Reentry-Flag hilft?
-
Das verhindert ja auch kein circular event calling, Jens ...
Bernhard
-
Nein, aber damit lässt sich das abfackeln, und wäre interessant, obs funktioniert, sicher ist es nicht. Ich hab sowas ähnliches schonmal in LS gemacht, bin aber nicht mehr sicher, obs reentrant war oder obs was anderes war.
-
Ein RefreshParentNote im PostRecalc ist ja schon der casus knacktus an sich. Aber villeicht habe ich gerade noch was anderes gefunden ... Mal schauen.
Bernhard
-
Nun endlich der versprochene Rückmeldung:
Natürlich funktioniert die von Matthias (nochmals danke !) propagierte Methode NotesUIWorkspace.RefreshParentNote. Auch für meinen "Fall":
Egal, wie (Button, Event PostRecalc oder was auch immer) muss die Dialogbox zwingen zu schliessen. Ins Event QueryClose gehört dann die o.g. Methode. Dort könnte man ja auch auf Eventualitäten reagieren.
Wichtig ist: NotesUIWorkspace.DialogBox gibt dann und deswegen immer "True" zurück. Die "alten Hasen" wissen das natürlich, aber wenn sonst mal jemand über diesen Fred stolpert, sollte das nicht unerwähnt bleiben.
Matthias AKA TMC also nochmals meinen Dank !
Bernhard
-
Schön, danke Bernhard für Deine Rückmeldung.
-
Na, ich muss eher sagen: Sorry, dass ich erst heute dazu gekommen bin. Und wieder hab' ich was dazu gelernt :D
Bernhard