[Allegro] Kleine Frage zu onerase.flx

Bernhard Eversberg ev at biblio.tu-bs.de
Mi Dez 5 08:48:23 CET 2012


Am 05.12.2012 01:06, schrieb Heinrich Allers:
> Ich will etwas mit onerase.flx machen und bin dabei auf ein punktuell
> seltsames Verhalten gestoßen:
>
> In der Demo-Datenbank sorgt diese onerase.flx:
>
> var "|1 hobsbawm?"
> f1nd
> erase
> var "NO"
>
> dafür, daß, wenn ich auf "Löschen" klicke, der Datensatz des Autors
> "hobsbawm..." kommentarlos gelöscht wird. Das ist in Ordnung und
> entspricht der Dokumentation.
>

Damit ist in der Tat ein unschoenes Problem aufgedeckt.

In "onerase.flx" steht:
   Wenn man folgende Zeile aktiviert, wird nicht geloescht:
   var "NO"

   Wenn man schreibt:
   erase
   var "NO"
   dann wird gelöscht, aber ohne Rückfrage!

Es ist so:
Es wird, wenn in einem FLEX der Befehl "erase" steht, stets
ohne Rückfrage gelöscht - und natürlich bevor der nächste Befehl
betrachtet wird. (Es ist ja generell so, daß die Ausführung eines
Befehls ganz stur ohne Ansehen des nächsten Befehls geschieht!)

Wird der FLEX  onerase.flx  durch Klick auf "Löschen" aktiviert,
und steht "erase" drin und wird im Ablauf auch erreicht, dann wird
bedingungslos gelöscht. Die Rückfrage kommt erst nach Ende des FLEXes,
also zu spät und damit irreführend!
Sie unterbleibt, wenn in der iV "NO" steht, sie sollte aber
*stets* unterbleiben, weil das Löschen ja dann schon, nach Ende
des "onerase.flx", passiert ist. Durch simples  var "NO"
erst nach dem "erase" kann man das Löschen nicht verhindern, das könnte
man nur durch eine yesno-Abfrage *vor* dem "erase", eingebaut
in den FLEX also.

Wir müssen folglich den o.g. Text in  onerase.flx  so aendern:

   Wenn innerhalb des FLEXes die Zeile
   erase
   vorkommt, dann wird ohne Rueckfrage geloescht.
   Man muss aber dann den FLEX beenden mit
   var "NO"
   denn sonst wuerde nach seinem Abschluss noch die - dann sinn- und
     nutzlose und nur irrefuehrende - Rueckfrage kommen!
   Soll eine Rueckfrage kommen, muss man sie in den FLEX selber
   einbauen, und zwar natuerlich VOR dem Befehl "erase", z.B. so:
   yesno Loeschen?
   if yes erase

Klar, die irreführende Rückfrage sollte schon von a99 selber verhindert
werden, das wäre noch einzubauen.

> Aber wenn ich noch die Zeile 'exec X _start.flx' hinzufüge, sozusagen
> einen a99-Neustart simulierend, die onerase.flx also so aussieht:
>
> var "|1 hobsbawm?"
> f1nd
> erase
> var "NO"
> exec X _start.flx
>
> dann kommt die Frage
>
>            Satz löschen?
>       Ja   Nein   Abbrechen
>
> die genau an dieser Stelle ich nicht haben möchte und nicht erwarte und
> die ich mit 'var "NO"' verhindert zu haben glaubte.
>
Das ist hier nicht nachvollziehbar, es wird ohne Rückfrage gelöscht.
Jedoch würde hier ohnehin nicht die Angabe "NO" die Rückfrage
verhindern, siehe oben.

B.E.




Mehr Informationen über die Mailingliste Allegro