0

If Then

Hallo miteinander 

habe zwei Auswahlfelder 

Auswahl 1 

Auswahl 2 

ich möchte jetzt einen Trigger setzten der Auswahl 2 nur wenn Auswahl 1 auf Ja steht, auf Ja  setzten.  

19 Antworten

null
    • Ronny_Lippmann
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Wenn das Feld mit dem Trigger in der gleichen Tabelle ist, geht es. 
     

    if 'Auswahl1' = 1 then 'Auswahl 2' := 1 

     

    aber sobald das Geld mit dem Trigger in einer andern Tabelle ist geht es nicht mehr 

     

    Mit freundlichen Grüßen 

      • Ninox-Professional
      • planoxpro
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Ronny Lippmann Hallo Ronny, wenn nichts anderes angegeben ist, geht Ninox immer davon aus, dass sich alle Felder, auf die in irgendeiner Weise Bezug genommen wird, in derselben Tabelle befinden, in der die Aktion ausgelöst wird.

      Natürlich kann man auch auf Felder in anderen Tabellen zugreifen, muss das dann aber explizit mit angeben. Und zwar über die interne ID, welche aus einer Buchstaben-Kennung der Tabelle sowie der Nummer des Datensatzes besteht, auf den zugegriffen werden soll.

      Wie man diese ID ermittelt und dann für den Zugriff verwendet, hängt aber vom Datenmodell und der genauen Aufgabenstellung ab. In der Regel nutzt man dazu ein "select" oder eine Verknüpfung.

      Ganz allgemeines Beispiel: In TabelleA soll anhand der Artikel-Nr auf den Wert des Feldes 'Preis' in TabelleB zugegriffen werden.

      let myANr := ArtikelNr;
      let myID := first(select TabelleB where ArtikelNr = myANr);
      myID.Preis
      

      Vielleicht hilft das schon mal weiter. Mehr zum Thema "select":

      https://docs.ninox.com/de/skripten/einfuehrung-in-ninox-skript/spezielle-datensaetze-auswaehlen-und-befragen

      • Ronny_Lippmann
      • vor 1 Jahr
      • Gemeldet - anzeigen

      planox. pro 

      danke für die Antwort. 
      ich versuche es mal zu erklären, da ich im Thema Scripte meine Probleme habe. 
       

      habe eine Hauptabelle 'Tabelle 1'

      mit einer Untertabelle 'Artikel' in den Untertabelle sind zwei Auswahlfelder mit jeweils einer Option = Ja. 
      Abrechnen 

      Abgerechnet

      jetzt habe ich ein Ja/nein Feld als Checkbox in der Haupttabelle wenn ich das anwähle soll das Auswahlfeld Abgerechnet in der Untertabelle auf Ja gestellt werden  was auch Funktioniert. Was nicht geht, Abgerechnet soll nur auf Ja gestellt werden wenn Abrechnen auf Ja steht. 
       

      Der Script wenn alle Felder in der Untertabelle sind funktioniert so wie ich es will. Was muss ich da noch hinzufügen das er aus der Haupttabelle geht  

       

      if Abrechnen = 1 then Abgerechnet := 1 end

      Mit freundlichen Grüßen 

      • Ronny_Lippmann
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Ronny Lippmann so schaut der Script in der Haupttabelle aus 

      if Artikel.Abrechnen = 1 then
          Artikel.(Abgerechnet := 1)
      end

      • Ninox-Professional
      • planoxpro
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Ronny Lippmann Untertabelle heißt ja, dass mehrere Datensätze vorhanden sein können. Soll nur ein bestimmter geändert werden oder alle? Wenn ich von letzterem ausgehe, könnte man es so versuchen (Trigger "Nach Änderung" im Ja/Nein-Feld der Haupttabelle):

      if JNFeld then
         Artikel[Abrechnen = 1].(Abgerechnet := 1)
      end
      

      Wobei JNFeld als Platzhalter für den tatsächlichen Namen des Ja/Nein-Feldes der Haupttabelle steht, mit dem die Aktion ausgelöst werden soll.

      • Ronny_Lippmann
      • vor 1 Jahr
      • Gemeldet - anzeigen

      planox. pro 

      danke das funktioniert. Jetzt hat das Auswahlfeld Abgerechnet Einen Trigger, der so leider nicht aktiviert wird. 
       

      Mit freundlichen Grüßen 

    • Ninox-Professional
    • planoxpro
    • vor 1 Jahr
    • Gemeldet - anzeigen
    Ronny Lippmann said:
    danke das funktioniert. Jetzt hat das Auswahlfeld Abgerechnet Einen Trigger, der so leider nicht aktiviert wird. 

    Verstehe ich nicht. Nicht benötigte Trigger kann man löschen.

      • Ronny_Lippmann
      • vor 1 Jahr
      • Gemeldet - anzeigen

      planox. pro planox. pro 

      Ja/Nein Haupttabelle 

      Stellt Abgerechnet Untertabelle auf Ja. Das passt  jetzt auch dank dir 👍
      Das Auswahlfeld Abgerechnet in der Untertabelle  hat selber auch einen Trigger der was ändert. Und das macht er nur wenn ich Abrechnen direkt in der Untertabelle wähle. 

      • Ronny_Lippmann
      • vor 1 Jahr
      • Gemeldet - anzeigen

      planox. pro 

      jetzt scheint es zu gehen. 
       

      if 'Ja / Nein' then
          Artikel[Abrechnen = 1].(Abgerechnet := 1)
      end;
      if 'Ja / Nein' then
          Artikel[Abrechnen = 1].('Auswahl 2' := 1)
      end;
      if 'Ja / Nein' then
          Artikel[Abrechnen = 1].(Auswahl := 4)
      end

       

      danke 🙏 

    • Ninox-Professional
    • planoxpro
    • vor 1 Jahr
    • Gemeldet - anzeigen
    Ronny Lippmann said:
    Das Auswahlfeld Abgerechnet in der Untertabelle  hat selber auch einen Trigger der was ändert.

    Ach so, ja, das stimmt. Trigger können keine Trigger auslösen (manuell sollte er weiter funktionieren). Die gewünschte Aktion ließe sich aber auch direkt in den Trigger der Haupttabelle integrieren.

    Wenn bspw. beim Umstellen des Ja/Nein-Feldes 'Abgerechnet' auf 1 automatisch ein Feld namens 'Datum' mit dem Tagesdatum belegt werden soll, dann könnte man obigen Trigger der Haupttabelle entsprechend erweitern:

    if JNFeld then
       Artikel[Abrechnen = 1].(Abgerechnet := 1);
       Artikel[Abrechnen = 1].(Datum := today())
    end
    

    Wäre ein Abwasch. Und ein Trigger ließe sich bei Bedarf auch schneller mal ändern als zwei. 😉

    Oder, wenn noch mehr Felder geändert werden sollen, kann man es auch in eine Schleife packen:

    if JNFeld then
       let myA := Artikel[Abrechnen = 1];
       for i in myA do
          i.(Abgerechnet := 1);
          i.(Datum := today());
          myA.( ...
       end
    end
    
    • Ninox-Professional
    • planoxpro
    • vor 1 Jahr
    • Gemeldet - anzeigen
    Ronny Lippmann said:
    jetzt scheint es zu gehen. 

    Der Ansatz, alles in einen Trigger zu packen, ist richtig. Ich würde es aber lieber so machen:

    if JNFeld then
       let myA := Artikel[Abrechnen = 1];
       for i in myA do
          i.(Abgerechnet := 1);
          i.('Auswahl 2' := 1);
          i.(Auswahl := 2)
       end
    end
      • Ronny_Lippmann
      • vor 1 Jahr
      • Gemeldet - anzeigen

      planox. pro 

      ja das muss auch so gehen. Mit dem let for do begreife ich leider nicht,  Bin Handwerker. Habe aber in den letzten Wochen schon eine gut funktionierende Software mit Ninox hinbekommen. 

      • Ninox-Professional
      • planoxpro
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Ronny Lippmann 

      Ja, Ninox ermöglicht schon mit wenig bis gar keinem Code brauchbare Anwendungen. Aber bei vielen Nutzern kommt halt irgendwann der Punkt, an dem sie bei ihrem Wunsch nach noch mehr Automatisierung mit "No Code" an Grenzen stoßen.

      Im Gegensatz zu anderen No-Code/Low-Code-Plattformen lassen sich diese Grenzen bei Ninox mit der recht umfangreichen Scriptsprache überwinden. Klar, man muss sich ein wenig reinwuseln, es ist aber kein Hexenwerk und lohnt sich, denn damit eröffnen sich in Sachen Automatisierung ganz neue Perspektiven. Auch (und gerade) für Handwerker ... ;)

      Es ist aber völlig okay, wenn man sich erstmal mit einfachen Lösungen begnügt, wenn sie im gewünschten Sinne funktionieren. Dennoch kurz zur Erläuterung:

      Mit let definiert man eine Variable und weist ihr einen Wert zu. In diesem Fall bekommt die Variable myA ein Array (quasi eine Liste) alle IDs der in der Untertabelle 'Artikel' verknüpften Datensätze, bei denen das Feld 'Abrechnen' auf 1 steht.

      Mit der for-Schleife werden dann die Einträge dieses Arrays nacheinander abgearbeitet, wobei die Variable "i" bei jedem Durchlauf den jeweils aktuellen Wert enthält. So können dann nach und nach alle betreffenden Datensätze der Untertabelle angesprochen und geändert werden.

      Weiterhin viel Erfolg mit Ninox. Und wenn's dann doch mal ein bisschen mehr sein soll: Das Forum hilft immer gerne weiter.

      • Ronny_Lippmann
      • vor 1 Jahr
      • Gemeldet - anzeigen

      planox. pro 

      super erklärt 

      wie gesagt spiele erst seit 4 Wochen mit Ninox, und auch das erste mal mit Scripte konfrontiert. Merke aber selbe je mehr man sich damit beschäftigt, das es besser wird. 
      ja und die Hilfe hier ist natürlich super, werden bestimmt auch noch viele Fragen kommen. 
       

      Mit freundlichen Grüßen 

      und danke 🙏 

      • Ronny_Lippmann
      • vor 1 Jahr
      • Gemeldet - anzeigen

      planox. pro 

      das mit dem let. 
      myA und i sind ja die Zuweisungen? Und könnte man auch anders nennen ? 

      • Ninox-Professional
      • planoxpro
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Ronny Lippmann myA und i sind die Namen der Variablen. Und ja, die kann man beliebig benennen (am besten so, dass die Namen einem selbst was sagen). Wobei sie idealerweise aus mindestens zwei Zeichen bestehen sollten, also nicht nur "i", wie ich es oben gemacht habe (Macht der Gewohnheit). ;)

      • Ronny_Lippmann
      • vor 1 Jahr
      • Gemeldet - anzeigen

      planox. pro 

      grüsse hätte da noch mal eine Frage. 
       

      let my := this 

       

      was macht 'this' 

       

      Mit freundlichen Grüßen 

      • Ninox-Professional
      • planoxpro
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Ronny Lippmann "this" ist ein Ninox-Schlüsselwort und gibt immer die aktuelle Record-ID zurück, also die interne Kennung des Datensatzes, in dem die betreffende Funktion gestartet wird. Man kann sie in eine frei benennbare Variable schreiben (hier "my") und darüber im weiteren Verlauf des Scriptes immer wieder auf Daten des Records zurückgreifen.

      • Ronny_Lippmann
      • vor 1 Jahr
      • Gemeldet - anzeigen

      planox. pro 

      danke 

Content aside

  • vor 1 JahrZuletzt aktiv
  • 19Antworten
  • 84Ansichten
  • 2 Folge bereits