0

Klammerung in "readable if"/"lesbar wenn" nicht möglich?

Ich möchte im Script für "readable if"/"lesbar wenn" eine Abfrage verwenden, die eine Klammerung benötigt:

userHasRole("admin") or userHasRole("editor") or (userHasRole("Worker") and 'Status' = 8)

Die Prüfung auf Status soll also nur für die Rolle "Worker" ziehen.

Sobald ich aber diese Abfrage speichere, werden die Klammern entfernt und damit zieht die Prüfung Status = 8 für alle.

Wieso geht das nicht? Gibt es einen Trick?

7 Antworten

null
    • Gotje_Ing
    • vor 12 Tagen
    • Gemeldet - anzeigen

    Ggf. kannst du die Reihenfolge der Argumente verändern, das hat bei mir schon hin und wieder geholfen. 

      • stefan.9
      • vor 11 Tagen
      • Gemeldet - anzeigen

      Danke, funktioniert aber leider auch nicht.

    • mirko3
    • vor 11 Tagen
    • Gemeldet - anzeigen

    Hallo Stefan. Soweit ich es verstehe, klammert der Ninox-Editor nur OR, z.B.

    (userHasRole("admin") or userHasRole("editor") or userHasRole("Worker")) and 'Status' = 8
    

    Wenn in deinem Fall die Klammern entfernt werden, dann weil sie unnötig sind, weil die AND Werte als verbunden betrachtet werden. Entweder machst du mal einen Test in einem Funktionsfeld, ob der Wert wirklich das wiedergibt, was er soll - also ob ein true überhaupt möglich ist, oder kannst es mal so versuchen

    contains([userHasRole("admin"), userHasRole("editor"), userHasRole("Worker") and Status = 8], true);
    

    Da liegen die Boolean in einem Array und es wird auf true getestet. Für mich ist das manchmal übersichtlicher. Mirko

      • stefan.9
      • vor 10 Tagen
      • Gemeldet - anzeigen

      Danke, du hast recht. Das AND ist implizit geklammert, daher werden die Klammern automatisch entfernt.

      Mein Statement vom ersten Post funktioniert also tatsächlich wie gewünscht, ich habe da offenbar gestern beim Test irgendeinen anderen Fehler gemacht. Ich bin ein Freund von Klammern, weil es die Verständlichkeit des Codes verbessert. Vermutlich war ich schon deshalb irritiert und habe dann nicht mehr richtig getested.

      Die Variante mit "contains" funktioniert natürlich auch.

    • Torsten_Stang.1
    • vor 11 Tagen
    • Gemeldet - anzeigen

    Nicht hübsch, aber wohl zielführend?:

    if userHasRole("admin") then
       true else
       if userHasRole("editor") then
          true else
          if userHasRole("Worker") and 'Status' = 8 then
             true else
             false
          end
       end
    end
    
      • stefan.9
      • vor 10 Tagen
      • Gemeldet - anzeigen

      Danke, da hätte ich eigentlich auch selbst drauf kommen können ;-)

      Hübsch ist das vielleicht nicht, aber in meinen Augen gut verständlich, was ich viel wichtiger finde. Ich werde mein Script in dieser Art bauen.

    • Maurice
    • vor 9 Tagen
    • Gemeldet - anzeigen

    Einmal die Regel AND vor OR verinnerlicht, kann man sich die vielen IF ... ELSE Bedingungen sparen. Das ist natürlich jeder Manns/Frau Sache, wie man skriptet.
    Bin kein Informatiker, deshalb: mich würde interessieren, welcher Algorithmus der effizientere ist.