Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: HarryB am 18.08.05 - 14:30:48

Titel: Dialogbox -> Werte werden nicht zurückgeschrieben
Beitrag 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:

Zitat
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:

Zitat
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
Titel: Re: Dialogbox -> Werte werden nicht zurückgeschrieben
Beitrag von: dirk_2909 am 18.08.05 - 14:40:36
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 ) )
Titel: Re: Dialogbox -> Werte werden nicht zurückgeschrieben
Beitrag von: HarryB am 18.08.05 - 15:29:48
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
Titel: Re: Dialogbox -> Werte werden nicht zurückgeschrieben
Beitrag von: Axel am 18.08.05 - 15:54:10
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
Titel: Re: Dialogbox -> Werte werden nicht zurückgeschrieben
Beitrag von: HarryB am 18.08.05 - 16:13:22
Wie schließt du denn die dialogbox?

Siehe oben:

Zitat
FIELD $currentStep := "1";
FIELD $nextStep := "2";
@Command([RefreshParentNote]);
@PostedCommand([CloseWindow])

Viele Grüße
Harry
Titel: Re: Dialogbox -> Werte werden nicht zurückgeschrieben
Beitrag von: Tode am 18.08.05 - 16:18:33
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
Titel: Re: Dialogbox -> Werte werden nicht zurückgeschrieben
Beitrag von: HarryB am 19.08.05 - 11:24:01
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
Titel: Re: Dialogbox -> Werte werden nicht zurückgeschrieben
Beitrag von: HarryB am 19.08.05 - 11:36:18
Gna, gna, gna... der Teufel liegt echt im Detail. Kaum macht man's richtig, schon geht es.

Zitat
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