0

Trigger

Hallo,
erstmal vielen Dank für das tolle Produkt. Nun habe ich eine Frage: Ich hab es zwar hinbekommen einen Trigger für ein Feld einzurichten aber kann ich einen Trigger so einrichten, dass er sich auf mehr als ein Feld auswirkt?

Z. B.: wenn Feld A »Ja« dann Felder B UND C ändern

Vielen Dank im Voraus!

193 Antworten

null
            • olaf_ottogerstettende
            • vor 8 JahrenSat, March 4, 2017 at 4:32 PM UTC
            • Gemeldet - anzeigen
            Hallo,

            habe eine Frage und bin absoluter Neuling.
            ich möchte mir ein Texfeld erst anzeigen lassen wenn in einem anderen Auswahlfeld nur eine Option ausgwählt wird.
            Wie stelle ich das an.

            Mein Fall:
            (Auswahlfeld)
            Zustand Lampe
            i.Ordnung ( dann passiert nichts)
            Mängel ( dann soll ein weiters Textfeld angezeigt werden )

            Vielen Dank!
            grüße Olaf
            • Leonid_Semik
            • vor 8 JahrenSat, March 4, 2017 at 6:26 PM UTC
            • Gemeldet - anzeigen
            Hallo Olaf,
            die Positionen im Auswahlfeld haben eigene IDs. Diese sind beim Eingabe der Felder rechts zu sehen.
            Angenommen "i.Ordnung" hat ID 1 und "Mängel" -2.
            Dann kannst du in den erweiterten Eigenschaften deines Textfeldes im Register "Feld nur anzeigen wenn" folgende Formel schreiben

            'Zustand Lampe'=2

            Bitte die Formel nicht kopieren/einfügen, sondern selbst schreiben. Wordpress ändert hier die Anführungszeichen und du bekommst sonst Fehlermeldung.

            Grüße
            Leo
            • olaf_ottogerstettende
            • vor 8 JahrenSun, March 5, 2017 at 8:32 AM UTC
            • Gemeldet - anzeigen
            Funktioniert! Danke! klasse Support!
            • Leonid_Semik
            • vor 8 JahrenMon, March 27, 2017 at 4:05 PM UTC
            • Gemeldet - anzeigen
            Guten Tag,
            ich habe folgendes Problem:
            Bei einem Feld A in der Tabelle 1 (Verknüpfung zu einer Tabelle2) habe ich einen Trigger nach Änderung. Dieser Trigger bewirkt, dass in einer anderen Tabellen 3 neue Datensätze erzeugt werden.
            Funktioniert alles prima. Jetzt habe ich noch eine Befehlsschaltfläche in der Tabelle 1 welche einen neuen Datensatz in der Tabelle 1 einfügt und dabei einen bestimmten Wert dem Feld A gibt. Eigentlich dachte ich, dass der Trigger bei dem Feld A automatisch anspringt sobald der Wert von dem anderen Trigger geändert wird. Es passiert aber nichts.
            Gibt es hier Einschränkungen?

            Grüße
            Leo
            • Leonid_Semik
            • vor 8 JahrenTue, March 28, 2017 at 4:07 AM UTC
            • Gemeldet - anzeigen
            Guten Morgen,
            Ich möchte, dass beim Erstellen neuen Datensatzes bestimmte Werte aus aktuellem Datensatz übernommen werden. Problem dabei ist, dass der aktuelle Datensatz nicht unbedingt der letzte sein kann. Der Trigger "bei neu" nimmt mit dem Befehl last (select....) die Werte aus dem Datensatz mit zweitgrößtem ID.
            Momentan habe ich das Problem mit der Schaltfläche und Funktion (let altWert:=Wert; let n:=create Tabelle; n.Wert:=altWert) gelöst. Das "+"-Zeichen bleibt aber sichtbar und wenn der Benutzer statt Schaltfläche das "+"-Zeichen benutzt, ist die ganze Programmierung hin. Ist das Problem mit Trigger lösbar?

            Grüße
            Leo
            • Alexander_Koenig
            • vor 8 JahrenFri, March 31, 2017 at 11:45 AM UTC
            • Gemeldet - anzeigen
            Hallo Leo,

            kaskadierende Trigger, die den nächsten Trigger auslösen, gibt es nicht mehr, da man damit Endlosschleifen bilden kann. Wenn ich Dich richtig verstehe.

            VG, Alex
            • Alexander_Koenig
            • vor 8 JahrenFri, March 31, 2017 at 11:48 AM UTC
            • Gemeldet - anzeigen
            Hallo Leo, kannst Du mit der ID den aktuellen Datensatz ansprechen? Dann über select wieder den entsprechenden Datensatz ausfiltern.
            Hilft das weiter?
            VG, Alex
            • Leonid_Semik
            • vor 8 JahrenSat, April 1, 2017 at 3:49 AM UTC
            • Gemeldet - anzeigen
            Hallo Alex,
            Das ist genau mein Problem. Stell dir vor : eine Tabelle hat 5 Datensätze. In dem Datensatz gibt es ein Textfeld namens "Farbe". In dem letzten Datensatz Nr. 5 ist die Farbe "grün". Ich befinde mich im Datensatz Nr 3 mit der Farbe schwarz und möchte jetzt einen neuen Datensatz mit schwarz erzeugen, aber ohne Schaltflächen. Trigger auf Tabellenebene bei neu:
            let myNr:=last (select Tabelle.Nr);
            Farbe:=select Tabelle wehre Nr=myNr.Farbe
            Ich klicke jetzt auf + und in dem Datensatz Nr 6 erscheint die Farbe grün aus Nr 5 statt schwarz aus Nr 3. ist auch verständlich: für den Nr 6 ist der letzte Datensatz -Nr 5.
            wie kann ich in diesem Trigger die aktuelle Id ansprechen?
            Grüße
            Leo
            • Birger_H
            • vor 8 JahrenMon, April 3, 2017 at 1:31 PM UTC
            • Gemeldet - anzeigen
            Hallo Leo,
            bei Klick auf das "+"-Zeichen ist die ID des aktuellen Datensatz' - "aus dem heraus geklickt wurde" - nicht verfügbar. Eine Lösung weiß ich hier also derzeit nicht.

            Gruß
            Birger - Ninox Support
            • Alexander_Koenig
            • vor 8 JahrenMon, April 3, 2017 at 1:46 PM UTC
            • Gemeldet - anzeigen
            Hallo Leo,

            mit: let myID := _id; kommst du an die ID des aktuellen Datensatzes.
            Das wäre in dem Fall Datensatz 3. Klappt das in dem Fall?

            VG, Alex
            • Ninox Premiumpartner
            • Bastian_Vorholt
            • vor 8 JahrenThu, May 11, 2017 at 5:24 PM UTC
            • Gemeldet - anzeigen
            Hallo zusammen,
            ich würde ganz gerne im Rechnungsmodul ein Mahnwesen einbauen. Ich hab ein Formelfeld gebaut Status 3 ist Bezahlt 1 Neu 2 Versendet

            if today() > 'Zahlbar bis' and Status < 3 then
            1
            else
            0;
            Er erhöt auch den Mahnstatus um 1. Zeitgleich soll er auch das Feld Zahlbar bis um weitere 7 Tage erhöhen. Dann soll wieder geprüft werden. Das ganze soll 3 mal durchlaufen bis zur Mahnstufe 3. Vielleicht hat auch jemand einen ganz anderen Lösungsweg bin für alles offen, weiß halt nur nicht wie ich es 3 mal durchlaufen lassen kann.
            • Birger_H
            • vor 8 JahrenFri, May 12, 2017 at 10:42 AM UTC
            • Gemeldet - anzeigen
            Ein Schleife mit 3 Druchläufen können Sie so realisieren:
            –––
            for p in [1, 2, 3] do
            )(- do somthing here -)()
            end
            –––

            Grüße
            Birger - Ninox Support
            • info_prienoptikde
            • vor 7 JahrenWed, May 31, 2017 at 1:37 PM UTC
            • Gemeldet - anzeigen
            Hallo, bin noch nicht so erfahren mit Ninox. Finde auch keine Lösung hier.
            Ich möchte beim anlegen eines neuen Datensatzes ein Datenfeld(Datenwert) vom vorherigen Datensatz automatisch übernehmen? Können Sie mir helfen.

            Noch eine Frage. Wie kann ich Trigger-Befehle lernen?

            Vielen Dank
            • Leonid_Semik
            • vor 7 JahrenWed, May 31, 2017 at 4:09 PM UTC
            • Gemeldet - anzeigen
            Hallo prienoptik,
            dazu kannst du Operator "last" verwenden.
            beim Trigger auf Tabellenebene folgende Formel:

            let myDatenfeld:=last(select Tabellenname.Datenfeld);
            Datenfeld:=my Datenfeld

            Ninox übernimmt den Wert des Datenfelds aus dem Datensatz mit der letzten (zweitgrößten) ID in die Variable "myDatenfeld" und übergibt dann den Wert an Datenfeld in dem neuen Datensatz.

            Grüße
            Leo
            • info_prienoptikde
            • vor 7 JahrenThu, June 1, 2017 at 11:23 AM UTC
            • Gemeldet - anzeigen
            Hallo vielen Dank für die rasche Antwort. Hab immer noch keine Plan wie ich die Formel anwende. Gibt es irgendein Kompendium wo man sich über Trigger einlesen kann?
            • NiMora
            • vor 7 JahrenTue, June 13, 2017 at 9:03 AM UTC
            • Gemeldet - anzeigen
            Das würde ich auch begrüßen. Allein die Funktions und Sprachreferenz bietet etwas umfänglichere Infos. Alles andere ist viel zu knapp gehalten.

            Bitte mehr.
            • juttabl
            • vor 7 JahrenThu, July 6, 2017 at 1:26 PM UTC
            • Gemeldet - anzeigen
            Hallo,
            Bei mir funktioniert das nicht. Was mach ich falsch?

            ich habe in der Tabelle TrRDetails den Trigger
            "TrRDText := Transaktionen.TrText"
            als Skript bei einem neuen Datensatz eingegeben.
            Wenn ich dann im Formular Transaktionen im Unterformular auf + klicke, entsteht zwar ein neuer Datensatz in TrRDetails aber der Text wird nicht rüber kopiert.

            Oder habe ich die Anleitung falsch verstanden?
            Danke für eure Hilfe!
            • juttabl
            • vor 7 JahrenThu, July 6, 2017 at 1:46 PM UTC
            • Gemeldet - anzeigen
            ok, hab die Lösung gefunden - der Trigger muss im "Skript nach Änderung" sein.
            • juttabl
            • vor 7 JahrenMon, July 10, 2017 at 8:03 AM UTC
            • Gemeldet - anzeigen
            Ich komm gerade mal nicht weiter:

            wie muss diese Formel aussehen, wenn ich das Resultat manchmal händisch abändern will?

            zB ich übertrage mit Hilfe der Formel Text+Soll+Haben in das Unterformular (das funktioniert bereits), aber manchmal will ich im Unterformular etwas anderes stehen haben, z.B. wenn ich beim Text noch was dazu schreiben will.

            Mit der jetzigen Formel überschreibt er mir die Änderungen.
            • Alexander_Koenig
            • vor 7 JahrenMon, July 10, 2017 at 1:40 PM UTC
            • Gemeldet - anzeigen
            Mit einem if/else statement checken ob das Feld schon Content hat:
            TrRDText :=
            if TrRDText = null
            then Transaktionen.TrText
            else TrRDText
            • juttabl
            • vor 7 JahrenMon, July 10, 2017 at 5:13 PM UTC
            • Gemeldet - anzeigen
            super - danke!
            • juttabl
            • vor 7 JahrenTue, July 11, 2017 at 4:38 PM UTC
            • Gemeldet - anzeigen
            Hallo, Ich hätte wieder einmal eine Frage:

            Ich habe einen schönen Trigger für Beleg Nummern geschrieben.
            BelegNr := max((select TrBelege).BelegNr) + 1
            Der funktioniert auch gut.

            Wenn ich aber eine ganze Reihe Datensätze importiere, wird er nicht getriggert. Was muss ich machen, damit er auch bei diesen Datensätzen funktioniert?

            Vielen Dank im voraus!
            • Birger_H
            • vor 7 JahrenWed, July 12, 2017 at 6:31 AM UTC
            • Gemeldet - anzeigen
            Hallo,

            beim Importieren von Datensätzen wir der "onCreate" Trigger nicht ausgeführt.

            Birger - Ninox Support
            • juttabl
            • vor 7 JahrenWed, July 12, 2017 at 7:23 AM UTC
            • Gemeldet - anzeigen
            Hallo,
            Danke für die Antwort. Das habe ich gemerkt, dass er nicht ausgeführt wurde. Nur was ist jetzt die Alternative, dass die importierten Datensätze eine fortlaufende Nummer kriegen?
            Danke!
            • juttabl
            • vor 7 JahrenWed, July 12, 2017 at 8:13 AM UTC
            • Gemeldet - anzeigen
            Nun habe ich das in einem anderen Kontext versucht anzuwenden, aber bekomme in dem Fall eine Fehlermeldung. Keine Ahnung warum!

            Der von mir fabriziert Trigger lautet:
            BelegNr := if BelegNr = null then
            BelegNr := max((select TrBelege).BelegNr) + 1
            else
            BelegNr;

            Die Fehlermeldung sagt:
            dann und sonst liefern unterschiedliche Datentypen

            Was heisst das? Und was much ich an dem Trigger verändern?