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
    • Frank_Bohmer
    • vor 10 Jahren
    • Gemeldet - anzeigen
    Hallo gandr,
    über einen Workaround geht das:
    wenn A dann (B:= 18) + (C:= 36) sonst 0
    Falls B oder C keine numerischen Felder sind, müsste im sonst-Teil ein Textwert stehen. Was unter sonst steht ist eigtl. egal, da es keine Auswirkung hat, aber die Datentypen der Rückgabewerte von dann und sonst müssen übereinstimmen.
    LG Frank
    • Frank_Bohmer
    • vor 10 Jahren
    • Gemeldet - anzeigen
    s.o.
    • RvS
    • vor 9 Jahren
    • Gemeldet - anzeigen
    Hallo Frank,

    ich baue gerade an einer Datenbank für die Angebots- und Rechnungstellung. Dabei habe ich ein Problem, bei dem mir nicht klar ist, wie das zu lösen ist oder ob das überhaupt geht.

    a) Diese Tabellen gibt es:
    Kunden
    Produktliste
    Angebote mit Angebotspositionen (-> Komposition)
    Rechnungen mit Rechnungspositionen (-> Komposition)

    Die beiden Tabellen "Angebote" und "Rechungen" beziehen sich jeweils mit einer 1:N-Verbindung auf die Tabelle "Kunden". Die Rechnungstabelle ist annähernd so aufgebaut wie die Angebotstabelle. Beide enthalten je eine kombinierte Untertabelle für die Angebotspositionen respektive die Rechnungspositionen.

    b) Den Prozess habe ich mir so vorgestellt:

    1. Schritt: Für einen Kunden wird ein Angebot erstellt. Jedes Angebot kann mehrere Artikel aus der Produktliste enthalten. Die Details wie Artikelname, preis etc. werden mit Triggern übernommen, so dass man die Produktdetails im Angebot bei Bedarf verändern kann. Soweit funktioniert das auch gut.

    Das Problem ist der nächste Schritt!

    2. Schritt: Nach Auftragserteilung und Auftragserfüllung möchte ich eine Rechnung stellen. Diese soll sich auf das Angebot beziehen, das die Grundlage des Auftrags ist.

    Konkret heißt das: Die Rechnung sollte die gleichen Artikel auflisten wie das Angebot. (Auch hier soll die Möglichkeit bestehen, die einzelnen Positionen nachträglich zu ändern oder zu ergänzen, ohne dass dadurch das ursprüngliche Angebot ebenfalls verändert wird -> Trigger)

    Doch dieser Schritt gelingt bisher nicht. Als Lösungsversuche habe ich verschiedene Varianten von Verknüpfungen und Trigger ausprobiert. Aber es hat bsi jetzt nie richtig funktioniert, eine neue Rechnung so mit einem Angebot zu verknüpfen, dass sie automatisch mit den Positionen des Angebots bestückt wird. Geht sowas überhaupt?

    Für eine Antwort im Voraus schon dankbar:
    Rüdiger
    • Frank_Bohmer
    • vor 9 Jahren
    • Gemeldet - anzeigen
    Hallo Rüdiger,
    mit Triggern können zur Zeit noch keine neuen Datensätze angelegt werden, was hierfür Voraussetzung wäre. Umfangreichere Skripting-Funktionen stehen bei uns auf dem Plan und ich denke, zur Jahresmitte wird da einiges kommen. Die einzige Lösung, die mir jetzt dazu einfällt ist, Angebot und Auftrag als gleiches Objekt zu behandeln - also zB über ein Statusfeld festzulegen, ob das Angebot in einen Auftrag umgewandelt wurde. Mit der Druckfunktion können dann ja unterschiedliche Druckformulare für Angebot und Rechnung entworfen werden.
    Viele Grüße Frank
    • kksmile
    • vor 9 Jahren
    • Gemeldet - anzeigen
    Hallo,
    wie kann man den per Trigger ein anderes Feld auf leer/NULL setzen?

    LG
    • Frank_Bohmer
    • vor 9 Jahren
    • Gemeldet - anzeigen
    Hallo kksmile,
    das geht nur in der textuellen Formeleingabe - im Formeleditor auf das Dokument-Symbol klicken:
    Feld := null
    LG Frank
    • kksmile
    • vor 9 Jahren
    • Gemeldet - anzeigen
    Die Trigger Skripts scheinen nur bei einem neuen Datensatz zu funktionieren. Bei der Änderung eines Feldes eines bestehenden Datensatzes tut sich nichts.
    Feature oder Bug?

    Mit freundlichen Grüßen
    Kurt Klamp
    • Frank_Bohmer
    • vor 9 Jahren
    • Gemeldet - anzeigen
    Hab's grad nochmal überprüft: Die Trigger lösen auch bei bestehenden Datensätzen aus (so ist es beabsichtigt). Der Trigger muss an dem Feld definiert sein, welches geändert wird.
    Wie sieht denn die Formel aus?
    Viele Grüße, Frank
    • kksmile
    • vor 9 Jahren
    • Gemeldet - anzeigen
    z.Bsp. im Feld Anteile ist folgendes Trigger Skript hinterlegt:
    ('Anteile gesamt':=('Anteile bisher'+Anteile))

    nach einer Änderung des Feldes Anteile wird das Skript nicht mehr aktiv.

    PS: beim setzen eines zahlenfeldes per Skript wird das Zahlenformat oft ignoriert -> z. Bsp. 10 statt 2 Nachkommastellen
    • Frank_Bohmer
    • vor 9 Jahren
    • Gemeldet - anzeigen
    Hier mal eine Beispiel-Datenbank, bei der dieses funktioniert:

    https://www.dropbox.com/s/bbdq1kygzd7zx9y/Trigger-Test.ninox?dl=0

    Vielleicht entsteht das Problem an anderer Stelle... am Besten klären wir das direkt über das Support-Postfach support@ninoxdb.de
    • Lemmel
    • vor 9 Jahren
    • Gemeldet - anzeigen
    Hallo!

    Ich habe folgende "Triggerfrage":

    Ich habe eine Datenbank (Daten über Hundeführer, Hundehalter und Hund).

    Wenn der Hundeführer auch gleichzeitig Halter des Hundes ist, möchte ich mittels eines Ja/Nein Feldes "Führer=Halter?" automatisch die bereits eingegebenen Hundeführerdaten in die Halterfelder übernehmen.

    Das klappt bei mir mit einem Feld wie folgt:

    ('H-Nachname' := (if ('Führer=Halter?' = "1") then F-Nachname else ""))

    Gibt es auch eine Möglichkeit (Formel) mehrere Felder gleichzeitig zu füllen?
    H-Nachname aus F-Nachname
    H-Vorname aus F-Vorname
    H-Ort aus F-Ort
    u.s.w.

    VG
    Martin
    • Frank_Bohmer
    • vor 9 Jahren
    • Gemeldet - anzeigen
    Hallo Martin,
    es gibt einen "Trick" mit dem das geht: verbinde die Formeln mit +, also zB
    (Vorname := "Hans") + (Nachname := "Müller")
    Viele Grüße
    Frank
    • dialog
    • vor 9 Jahren
    • Gemeldet - anzeigen
    Hallo! Habe ich es richtig verstanden, dass ein Trigger IMMER nur in der gleichen Tabelle Felder ändern kann (und zur Zeit an einer umfangreicheren Funktionalität gearbeitet wird)?

    Ich würde gerne dieses Problem lösen: Eine Tabelle PROJEKTE enthält verschiedene Beratungsprojekte. Für jedes Projekt wird ein Standard-Workflow definiert und dieser wird als Untertabelle PROZESS angelegt. Ein Projekt soll einem KUNDEN zugeordnet werden.

    Der Trigger soll nun nach der Zuordnung des Projekts zum Kunden die Untertabelle CHECKLISTE (Obertabelle: KUNDE) mit den Positionen aus der Untertabelle PROZESS füllen. So kann für jeden Kunden eine Checkliste erstellt werden, in der der Arbeitsfortschritt dokumentiert werden kann.

    Gibt beim derzeitigen Stand der Software noch eine andere Möglichkeit, die ich bis jetzt nicht gesehen habe?

    Vielen Dank für die Antwort im Voraus.

    Gruß, Andreas
    PS: NINOX ist klasse, bitte weiter so!
    • Frank_Bohmer
    • vor 9 Jahren
    • Gemeldet - anzeigen
    Hallo Andreas,
    ja, das hast Du richtig verstanden und ja, wir arbeiten an einem kompletten Scripting-Modul, mit dem dann "alles" möglich sein wird. Dein Anwendungsfall ist zur Zeit also nicht automatisierbar, das einzige was ggf. helfen könnte, ist die Duplizieren-Funktion, die ja auch Untertabellen (Komposition=Ja) mit kopiert. Evtl. kannst Du so einen Musterkunden als Kopiervorlage nutzen.
    Viele Grüße, Frank
    • MichaelMW
    • vor 9 Jahren
    • Gemeldet - anzeigen
    Hallo,

    Besteht die Möglichkeit, einen leeren Datensatz per Trigger zu löschen ?
    Es passiert, dass der Anwender einen neuen Datensatz versehentlich erzeugt.
    Also einen Trigger, wenn alle Felder leer sind, diesen dann zu löschen.

    Gruß

    Michael
    • Alexander_Koenig
    • vor 9 Jahren
    • Gemeldet - anzeigen
    Hallo Michael, es gibt zwei Arten von Triggern - Feld-Trigger werden bei Eingabe oder Aktualisierung eines Feldes ausgelöst, Trigger auf Tabellen Ebene bei Anlage eines neuen Datensatzes. Trigger werden für die Problemstellung entweder zu früh oder nicht ausgelöst.
    Möglich es Leere Datensätze auszublenden. Aber Löschen muss händisch vorgenommen werden.
    Viele Grüße, Alex
    • thomas.5
    • vor 9 Jahren
    • Gemeldet - anzeigen
    Hallo Frank,
    Kann man das Feld "Farbe" auch scripten, also zum Beispiel via Trigger setzen um bestimmte Sachverhalte auf die Art Farbig zu Codieren?

    Danke, Thomas

    Ps Ninox wird immer genialer...
    • Alexander_Koenig
    • vor 9 Jahren
    • Gemeldet - anzeigen
    Hallo Thomas,

    Im Trigger Feld einfach die Farbe eintragen:
    Color := „green"
    Kann mann auch mit Wenn/Dann Abhängigkeiten konstruieren.
    • thomas.5
    • vor 9 Jahren
    • Gemeldet - anzeigen
    Hallo Miteinander,

    Ich habe eine Tabelle mit Tagen (Tag) und eine mit den Schlafzeiten und Wachzeiten meines Babys (Schlafzeit), bei dem ich immer die halbe Wachzeit ein Auge ankleben muss. Das ist schwer im Kopf zu rechnen und ich wollte das was ich bisher in Numbers mehr schlecht als recht hinbekomme mit Ninox machen.

    In der Tabelle Schlafzeit gibt es die Uhrzeitfelder von und bis neben einem Dropdown-Menü für den Typ (Wachphase oder Schlafphase) um die Gesamtdauer zu addieren.
    Wenn also das Baby bis 10:00 wach war, Startet die neue Schlafphase um 10:00, also soll 10:00 bei 'von' stehen.

    Schlafzeit ist N:1 mit Tag als Komposition verknüpft.

    Ich habe versucht den Ansatz mit den Zählerständen zu verwenden, aber der Beginn der nächsten Schlafzeit bzw. Wachzeit wird beim Trigger neuer Datensatz nicht eingetragen:

    let z := 'Tag'.Nr;
    'Von' := last((select 'Schlafzeit ' where 'Tag'.Nr = z).'Bis')

    Ich komm nicht drauf was falsch ist...

    Danke,
    Thomas
    • Frank_Bohmer
    • vor 9 Jahren
    • Gemeldet - anzeigen
    Hallo Thomas,
    select Schlafzeit where Tag.Nr = z
    findet nur den aktuellen Datensatz, aber nicht den vorhergehenden.
    Möglich wäre zB
    Von := last((select Schlafzeit).Bis)
    Viele Grüße, Frank
    • thomas.5
    • vor 9 Jahren
    • Gemeldet - anzeigen
    Hallo Frank,

    Super - Klappt schonmal, wenn ich es aus der Schlafzeittabelle heraus mache. Die DB bediene ich aber nicht selbst... Das Feld "von" bleibt aber leer, wenn ich aus der Tabelle "Tag" heraus einen neuen Satz anlege. Bekommt man das auch hin? Dann wäre es aus der Anwendersicht transparenter.

    Gruß Thomas
    • thomas.5
    • vor 9 Jahren
    • Gemeldet - anzeigen
    Stopp, geht doch... Ich hatte beim Basteln eine alte Formel übersehen, die das korrekte Ergebnis wieder überschrieben hat. Übrigens geht's nicht um das Aufkleben, sondern um das Abkleben eines Auges :)
    Danke!
    • info.3
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Hallo Alexander,

    Ich bin gerade dabei dies zu testen. Nur leider erfolglos. Könnt ihr ein Besipiel erstellen? Ich möchte bei einem Lager, das unterschreiten des Mindestbestand dies Farblich darstellen.

    Vielen Dank und guten Rutsch ins neue Jahr.

    Grüße Frank
    • Alexander_Koenig
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Hallo Frank,

    wenn die Lagerbestände händisch einegeben werden, geht es mit folgendem Trigger:

    Farbe := if Bestand <= 10 then
    "red"
    else
    "green"


    Wenn der Lagerbestand sich durch eine Formel aus Warenein- und Ausgang berechnet geht es aktuell noch nicht. Es gab kaskadierende Trigger. Das Feature wurde aber rausgenommen, weil man damit ziemlich einfach endlos Schleifen bauen konnte.

    Wir haben die Thematik auf der CR Liste. Können aber noch nicht genau sagen wann wir das umsetzen.

    Viele Grüße und einen guten Rutsch, Alex
    • Alexander_Koenig
    • vor 8 Jahren
    • Gemeldet - anzeigen
    Nützlich kann es in dem Fall sein, eine Ansicht für unterschrittene Mindestbestände anzulegen.
    Die Ansicht filtert alle Artikel, die beispielsweise einen Lagerbestand unter 10 haben raus.
    So hat man eine Übersicht über alle Artikel, die man nachbestellen muss.

    Hilft das weiter?