Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: HarryB am 18.08.05 - 14:30:48
-
Hallo Forum,
bei der Entwicklung einer Dialogbox bin ich auf ein Problem gestoßen. Ich habe eine Dialogbox, in welcher auch versteckte Felder enthalten sind ($currentStep, $nextStep). Die Werte dieser Felder sollen geändert werden, indem auf eine Schaltfläche ("Weiter") geklickt wird. Die Schaltfläche enthält den folgenden Code:
FIELD $currentStep := "1";
FIELD $nextStep := "2";
@Command([RefreshParentNote]);
@PostedCommand([CloseWindow])
Die Werte der Felder vor dem Klick auf die Schaltfläche sind "0" für $currentStep und "1" für $nextStep. Wenn ich die Dialogbox ganz normal als Maske testlaufen lasse, werden die neuen Werte für die Felder korrekt gesetzt. Wenn ich das ganze allerdings per LotusScript in einer Dialogbox laufen lasse, werden die veränderten Werte nicht zurückgeschrieben. Die Werte der Felder sind noch so, wie vor Aufruf der Dialogbox.
Die Dialogbox wird wie folgt aufgerufen:
Dim uiws As New NotesUIWorkspace
Dim ses As New NotesSession
Dim db As NotesDatabase
Dim tmpDialogBox As NotesDocument
Dim result As Integer
Set db = ses.CurrentDatabase
Set tmpDialogBox = db.CreateDocument
result = uiws.DialogBox("($dialog)",True,True,True,False,False,False,"Dialogbox",tmpDialogBox,True,True,False)
Eine Überprüfung des Objektes tmpDialogBox per Debugger ergibt für die Felder $currentStep "0" und für $nextStep "1", obwohl ich auf die Schaltfläche "Weiter" geklickt habe, also die Werte, welche für die Felder initial eingestellt sind.
Der Effekt tritt unabhängig davon auf, ob die Felder bearbeitbar sind oder berechnet mit dem eigenen Namen als Wert eingetragen.
Hat jemand eine Idee, wo ich was verkehrt mache? Habt ich überhaupt ausreichend dargelegt, was ich will?
Viele Grüße
Harry
-
Hallo!
Wenn Du die Dialogbox über LS öffnest, musst du die Werte Explicit im Document setzen:
....
Set tmpDialogBox = db.CreateDocument
tmpDialogBox.Deinfeld = ""
result = uiws.DialogBox("($dialog)",True,True,True,False,False,False,"Dialogbox",tmpDialogBox,True,True,False)
if result Then
......
if tmpDialogBox.DeinFeld( 0 ) = "???" Then
.....
uidoc.FieldSettext( "DeinFeld" , tmpDialogBox.DeinFeld( 0 ) )
-
Hallo Dirk,
genau das ist mein Problem. Der Wert von "DeinFeld" ändert sich nicht nach Aufruf der Dialogbox, und zwar nicht in einem UIDocument, sondern in dem Dokument tmpDialogBox.
Um bei deinem Beispiel zu bleiben: nach dem Aufruf der Dialogbox ist bei mir der Wert von DeinFeld = "", so, wie das Feld initialisiert wurde, obwohl dort etwas anderes drin stehen müsste.
Viele Grüße
Harry
-
Hi,
du hast den Parameter [noOKCancel] auf True gesetzt, d.h. die standardmäßigen Buttons werden nicht angezeigt. Wie schließt du denn die dialogbox?
Axel
-
Wie schließt du denn die dialogbox?
Siehe oben:
FIELD $currentStep := "1";
FIELD $nextStep := "2";
@Command([RefreshParentNote]);
@PostedCommand([CloseWindow])
Viele Grüße
Harry
-
Zwei Ansätze:
1. Wie bereits gesagt: Manchmal wird ein Feld im zugrundeliegenden Dokument nicht gesetzt, wenn es nicht vorher definiert wurde.
Also: Zuerst im Script das Feld "erzeugen" durch doc.Feldname = "", dann funktioniert meist auch das zurückgeben...
2. Es gibt verschiedene "Arten" für Schaltflächen: Normal , OK , Abbrechen , Hilfe.
Ich habe festgestellt, dass OK und Abbrechen gefährlich sind, weil Sie deinen Code -besonders was das setzen von Feldern betrifft- schlichtweg ignorieren.
HTH
Tode
-
1. Wie bereits gesagt: Manchmal wird ein Feld im zugrundeliegenden Dokument nicht gesetzt, wenn es nicht vorher definiert wurde.
Also: Zuerst im Script das Feld "erzeugen" durch doc.Feldname = "", dann funktioniert meist auch das zurückgeben...
Leider funktioniert das trotzdem nicht. Da muss noch woanders der Wurm drin sein. :'(
2. Es gibt verschiedene "Arten" für Schaltflächen: Normal , OK , Abbrechen , Hilfe.
Ich habe festgestellt, dass OK und Abbrechen gefährlich sind, weil Sie deinen Code -besonders was das setzen von Feldern betrifft- schlichtweg ignorieren.
Einen Abbrechen-Button hatte ich zwar drin, aber ich habe den mal jetzt auf "Normal" gesetzt und mit @Command([FileCloseWindow]) codiert. Das sollte dasselbe tun. Leider hat das nichts an dem Problem geändert.
Viele Grüße
Harry
-
Gna, gna, gna... der Teufel liegt echt im Detail. Kaum macht man's richtig, schon geht es.
FIELD $currentStep := "1";
FIELD $nextStep := "2";
@PostedCommand([RefreshParentNote]);
@PostedCommand([CloseWindow])
Das wichtige an der Formel für den Button ist, dass das RefreshParentNote ein PostedCommand ist. Sonst ist die Ausführung des Refresh schneller, als die Aktualisierung der Felder. ::)
Viele Grüße
Harry