0

Switch case geht nicht bei Zahl 0

Hi Community,

Bin ich deppert oder warum geht case myX < 1 nicht wenn die Zahl 0 ist. 

 

Ich klicke einen Button und folgender Code soll ausgeführt werden: (Status ist ein Auswahlfeld)

if ZahlX then
    let myX := number(ZahlX);
    switch myX != null do
    case myX < 1:
        Status := 1
    case myX >= 1 and myX <= 4:
        Status := 2
    case myX > 4:
        Status := 4
    end
end

 

Wenn ich den Code auf case myX <2 ändere und ich tippe in das Feld ZahlX eine 1 ein klappt es… sobald ich aber eine 0 rein schreibe wird der Code nicht ausgeführt bzw. es änderte ich nichts wenn ich z.B. auf Status := 2 bin. 

if ZahlX then
    let myX := number(ZahlX);
    switch myX != null do
    case myX < 2:
        Status := 1
    case myX >= 2 and myX <= 4:
        Status := 2
    case myX > 4:
        Status := 4
    end
end

 

kann jemand helfen!? Wieso funktioniert das nicht?

11 Antworten

null
    • mirko3
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Hi. Ich kann nur sagen, dass Dein Szenario in app v 3.8.6 funktioniert und in server v 3.8.8 nicht funktioniert. Also m. E. hast Du nichts falsch gemacht. Ist wohl buggy, oder mir ist es zu spät ;-) Mirko

    • Benjamin_Kunzmann_pr
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Hi,

    der Fehler liegt in der if Abfrage.

    Sinngemäß schreibst du "Wenn ZahlX größer oder  kleiner als 0 dann... tu dies..."

    Jetzt ist also ZahlX = 0 und das Skript tut gehorsamst: nix 🙂

    LG

      • mirko3
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Benjamin Kunzmann (pr) Hi Benjamin. Die if-Abfrage ist eine reine boolsche Abfrage: "bist du da, oder nicht" und im switch wird nach !=null gefragt, was auch nach Existenz abfragt und nicht nach Wert. Also hier kann ich keinen Ausschluss von 0 erkennen. Und, etwas wacher, habe ich heute nochmal geprüft. Das gleiche Script funktioniert in der Mac-App, nicht in der Web-App. 

      • Benjamin_Kunzmann_pr
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Mirko guten Morgen.

      eben drum weil die if Abfrage zuerst gestellt wir kommen die zahlen mit null oder leer erst gar nicht bis zur switch Abfrage durch 😉

      das != in der switch wäre imho überflüssig denke ich

       

      egal wie ich wünsche viel Erfolg bei Wege finden 🙋‍♂️

      • mirko3
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Benjamin Kunzmann (pr) In meinem Verständnis ist null (etwas ist leer) etwas anderes als 0 (die Zahl 0). Die if-Abfrage prüft also erst, ob das Feld leer ist und wenn nicht, dann erfolgt die switch-case-Abfrage. In Siegfrieds Fall ist es überflüssig, die if-Abfrage zu platzieren, weil es sich um einen Trigger handelt, der ja nur nach einer Eingabe ausgelöst wird. Aber mir ging es nicht um das Design des Scripts. Es besteht tatsächlich eine Differenz im Ergebnis zwischen den Anwendungen. Aber, gerade wenn etwas mir so selbstverständlich erscheint, bin ich dankbar für Anregungen. 👍

      Hab einen guten Tag

    • siegfried_toews
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Moin.

    Danke Mirko, dass du das bestätigen kannst. Ich werde es spaßhalber auch mal in der MAC-APP prüfen, muss das aber in der Web-App nutzen später..

    Wo kann ich hier BUGS melden? Ich brauch die Funktion 

      • mirko3
      • vor 1 Jahr
      • Gemeldet - anzeigen

      sto habs gemeldet

    • Chris_t
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Hi Sto,

    versuch´s mal hiermit: 

    Status := null;
    if ZahlX != null then
        let myX := ZahlX;
        switch myX != null do
        case myX < 1:
            Status := 1
        case myX >= 1 and myX <= 4:
            Status := 2
        case myX > 4:
            Status := 4
        end
    end

    Es ist in der Tat etwas verwirrend, dass bei der if-Abfrage "null" mit "0" gleichgesetzt wird. Ich habe ein internes Ticket (LEV-667) dazu eröffnet und nachgefragt, ob das so beabsichtigt ist. Bis ich Antwort erhalte, sollte Dir der Workaround aber erstmal weiterhelfen.

    Viele Grüße
    Chris

      • Chris_t
      • vor 1 Jahr
      • Gemeldet - anzeigen

      So, ich habe jetzt eine Erklärung und greife dazu Mirkos Ansatz mit der boolschen Abfrage zB. bei einem Ja/Nein Feld nochmal auf. Hier gibt es streng genommen 3 Zustände: Ja, Nein und nicht gesetzt. Bei einer Abfrage wird dann ein "nicht gesetzt" wie ein Nein gewertet, obwohl es nicht das gleiche ist.
      Ähnlich verhält es sich auch bei deiner Abfrage "if ZahlX then...". Durch "if ZahlX != null then..." wird der Ausdruck eindeutig (weil explizit nach einem nicht leeren Feld gefragt wird) und die Formel liefert das gewünschte Verhalten.

      • mirko3
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Chris Hi Chris. Danke, daß Du Dich noch damit befasst.

      Aber, ich muß mal etwas widersprechen. Das  Ja/Nein Feld hat drei Zustände, wie Du schriebst, aber eben wirklich drei: "true/false/undefined". Wenn es leer ist dann also "undefined".
      Das erscheint mir wichtig, wenn man "Ja/Nein = false" abfragt. Hier ist das Ergebnis wenn es auf leer ist nämlich "false" und bei Nein ist es "true".

      Siehe debugValueInfo().

      Beim Zahlenfeld wird mit if-Abfragen nur "true" zurückgegeben, wenn es irgendetwas enthält, auch 0 und wenn es leer ist, dann ebenfalls "undefined". Der Zustand "false" existiert hier nicht. Und zuletzt steht ja noch die Differenz des gelingenden Codes in der Mac-App und dem nichtgelingenden in der Web-App. Gruß Mirko.

      • Chris_t
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Es kann sein, dass "leer" in der App oder dem Browser wie die Zahl "0" interpretiert wird. Umgehen lässt sich dieses Verhalten durch eine Präzisierung der Abfrage. Also anstatt if Zahl würde man schreiben if Zahl != null

Content aside

  • vor 1 JahrZuletzt aktiv
  • 11Antworten
  • 102Ansichten
  • 4 Folge bereits