Seite 1 von 1

[ERLEDIGT] GET-Objekt verliert schon validierte Daten bei ESC

Verfasst: Di, 21. Feb 2023 16:27
von dtmackenzie
Folgendes Problem aus Benutzersicht in einer Eingabemaske:

Es wird in GET-Feld X ein gültiger Wert eingegeben, Feld X wird verlassen.
Dann wird etwas rumgetabbt, andere Felder bearbeitet bis alle Eingaben stimmen, zum Schluss steht der benutzer zufällig wieder auf Feld X.
Dann schließt der Benutzer die Eingabemaske mit ESC...
Ojé, der in Feld X eingegebene und validierte Wert ist weg!

Uns Programmierern ist klar, was hier passiert: ESC in einem GET-Feld setzt der Inhalt zurück.
Aus Benutzersicht ist dieses Verhalten aber schwer zu verstehen, und nicht zu vermitteln.
In der Hilfe zu @...GET steht:
If the user ends the editing procedure by pressing the Esc key, the original value is assigned to the variable <VarName>.
Wenn nicht das Feld sonst verlassen wurde, ist das natürlich sinnvoll, so kann man abbrechen (mit Originalwert) selbst wenn der Inhalt ungültig ist.
Kern des Problems ist aber: Der Originalwert ist anscheinend nur einmal gesetzt.
In der Hilfe zu Get:original steht:
When a Get object receives input focus a copy of the value contained in the variable is stored in the instance variable :original.
Wenn das aber doch jedesmal passieren würde wenn das Get-Objekt den Fokus bekommt, dann gäbe es nicht dieses Problem.

Ich weiß nicht, ob man das als Bug bezeichnen kann - die Hilfe ist hier nicht 100% eindeutig, und es war vermutlich schon immer so.
Also, was können wir dagegen tun?
Instanzvariable :original ist leider geschützt und lässt sich nicht setzen (z.B. nach erfolgreicher Validierung).
Ich habe auch keine Member-Funktion gefunden, die dies machen würde.
In der Hilfe zu ReadModal wird die Datei GETSYS.PRG erwähnt.
Vielleicht würde dieser Code einen Hinweis liefern, leider konnte ich aber die Datei nicht finden, und nun bin ich mit meinem Latein am Ende.

Ich hoffe, dass ich mich verständlich ausgedruckt habe, und dass vielleicht jemand eine weitere Idee hat.

Re: GET-Objekt verliert schon validierte Daten bei ESC

Verfasst: Di, 21. Feb 2023 17:41
von Wolfgang Ciriack
Hallo David,

ist bei mir auch so, dass ein ESC den Eingabedialog schließt und die Änderungen nicht gespeichert werden.
Daher prüfe ich beim Beenden eines Eingabedialogs, ob Änderungen gemacht wurden, falls ja und Abbruch/ESC, wird abgefragt, ob die Änderungen verworfen werden sollen.
Bei "Nein" bleibt der Benutzer im Dialog und kann mit OK (statt Abbruch/ESC) die Änderungen speichern (bei "Ja" werden eben die Änderungen - so wie bei dir jetzt - verworfen).

Re: GET-Objekt verliert schon validierte Daten bei ESC

Verfasst: Di, 21. Feb 2023 18:52
von dtmackenzie
Hallo Wolfgang,

Dankeschön für Deine Antwort!
Deine Vorgehensweise ist gut und vernünftig, leider haben sich die Benutzer seit 30 Jahren daran gewohnt, mit ESC zu schließen (speichernd!) wenn sie nicht ganz mit ENTER durchtabben (im Hybrid-Textmodus übrigens).
Mit einem zusätzlichen Dialog zu diesem Zeitpunkt wäre der Aufschrei groß...
Meistens geht es ja - sie sind es schon gewohnt, wenn sie eine Eingabe gemacht haben, zumindest raus aus dem Feld zu tabben bevor sie ESC drucken, und alle Felder außer dem aktuellen (was sie dann nicht geändert haben) werden gespeichert OK.
Es ist also eigentlich extrem selten, dass sie zu einem vorher eingegebenen Feld zurückkehren, aber dann ist die Auswirkung sehr unschön und ich habe noch keine Strategie, wie ich diesen Fall abfangen könnte.

Re: GET-Objekt verliert schon validierte Daten bei ESC

Verfasst: Mo, 27. Feb 2023 12:11
von dtmackenzie

Re: GET-Objekt verliert schon validierte Daten bei ESC

Verfasst: Mi, 05. Jul 2023 15:58
von dtmackenzie
Der ILX-Beitrag wurde auf meine Bitte gelöscht, da das Problem mit einer einfachen Testanwendung von Alaska Support nicht nachvollziehbar war.

Endlich bin ich draufgekommen, warum das Problem in meiner Anwendung nachvollziehbar ist aber im Testprojekt nicht: Vor langer, langer Zeit hatte ich das Workaround aus PDR 2615 (Undo-Problem) in meine Anwendung integriert - das verursacht das Verhalten.

Das habe ich nun an Alaska gemeldet.

Re: GET-Objekt verliert schon validierte Daten bei ESC

Verfasst: Mi, 05. Jul 2023 20:24
von Wolfgang Ciriack
Ist ja auch schon 25 Jahre her, da kann man das mal vergessen :badgrin: :badgrin: :badgrin:

Re: GET-Objekt verliert schon validierte Daten bei ESC

Verfasst: Mo, 10. Jul 2023 15:38
von dtmackenzie
Hallo Wolfgang,

O Du Ungläubiger! :wink:
Alaska hat es nicht nur gelöst sondern auch das Workaround in PDR 2615 aktualisiert.

Siehe Zeile ::original := ::varGet() in INLINE METHOD setFocus().

Re: [ERLEDIGT] GET-Objekt verliert schon validierte Daten bei ESC

Verfasst: Mo, 10. Jul 2023 15:45
von Jan
LOL Frank++, wie lange habe ich das schon nicht mehr gelesen.

Jan