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 7 Jahren
    • 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 7 Jahren
    • 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 7 Jahren
    • Gemeldet - anzeigen
    Funktioniert! Danke! klasse Support!
    • Leonid_Semik
    • vor 7 Jahren
    • 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 7 Jahren
    • 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 7 Jahren
    • 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 7 Jahren
    • 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 7 Jahren
    • 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 7 Jahren
    • 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 7 Jahren
    • 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 7 Jahren
    • 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 7 Jahren
    • 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 Jahren
    • 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 Jahren
    • 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 Jahren
    • 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 Jahren
    • 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 Jahren
    • 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 Jahren
    • Gemeldet - anzeigen
    ok, hab die Lösung gefunden - der Trigger muss im "Skript nach Änderung" sein.
    • juttabl
    • vor 7 Jahren
    • 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 Jahren
    • 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 Jahren
    • Gemeldet - anzeigen
    super - danke!
    • juttabl
    • vor 7 Jahren
    • 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 Jahren
    • Gemeldet - anzeigen
    Hallo,

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

    Birger - Ninox Support
    • juttabl
    • vor 7 Jahren
    • 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 Jahren
    • 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?