0

Funktion funktioniert bei Aufruf über einen Button, aber nicht als Trigger nach Änderung

Die nachfolgende Funktion wird korrekt ausgeführt, wenn ich sie aus einem Button starte.

Wenn die gleiche Funktion aber über einen Trigger nach Änderung des Feldes 'Beginn erste Tagung' aufgerufen wird, funktioniert sie nicht.

Hat jemand eine Idee, wo das Problem stecken könnte?

let VDate := number(year('Beginn Erste Tagung'));
let VJahreszahl := first(select Tagungsjahre where Jahreszahl = VDate).Nr;
let VAkadmie := 'Durchführender Standort'.Akademie;
let VBudget := first(select Budgets where Akademien = VAkadmie and 'Budget für' = VJahreszahl);
Budgets := VBudget

7 Antworten

null
    • mirko3
    • vor 2 Monaten
    • Gemeldet - anzeigen

    Hallo Bernd. Welche Aktion löst denn den Trigger aus? Händische Eingabe des Datums, oder ist es eine getriggerte/automatische Datumseingabe durch einen Tabellentrigger? Mirko

    • Inhaber / Geschäftsführer
    • Bernd_Rutzel
    • vor 2 Monaten
    • Gemeldet - anzeigen

     -  Es eine automatische, getriggerte Änderung das Datums. Aber es funktioniert auch nicht, wenn ich das Datumsfeld manuell ändere.

    • mirko3
    • vor 2 Monaten
    • Gemeldet - anzeigen

    Schreibe doch bitte mal die ersten vier Zeilen in ein Funktionsfeld und füge als 5. Zeile

    debugValueInfo(VDate)+debugValueInfo(VJahreszahl)+debugValueInfo(VAkadmie)+debugValueInfo(VBudget)
    

    ein und poste das Resultat.

    Welche Feldart ist in der Tabelle Budgets das Feld "Akademien"?

    Welche Feldart ist "Budgets"?

      • Inhaber / Geschäftsführer
      • Bernd_Rutzel.1
      • vor 2 Monaten
      • Gemeldet - anzeigen

       Da bekomme ich die folgenden Werte zurück:

      Die Felder "Akademien" und "Budgets" sind jeweils N:1 Verknüpfungen.

      • mirko3
      • vor 2 Monaten
      • Gemeldet - anzeigen

      Dann sind es mir noch zu viele Beziehungen für mein Abstraktionsvermögen. Bitte noch einen Screenshot der wesentlichen Tabellenbeziehungen aus dem Datenmodell anhängen.

    • UweG
    • vor 2 Monaten
    • Gemeldet - anzeigen

    Grundsätzlich kann ein Trigger keinen weiteren Trigger auslösen.
    Probiere es mal mit:
    Budgets := number(vBudget)
     

    Ein API-Request auf einen Link gibt immer eine Zahl zurück.
    Der Unterschied zwischen Button und Trigger ist der Ausführungsort.
    Button Scripte werden immer Rechnerseitig ausgeführt.
    Trigger Scripte immer auf Seiten des Servers, wenn es aus dem Browser erfolgt.
    Mit der App sieht es wieder anders aus, was alert() und dialog() im Trigger beweisen.

    Mehrheitlich versteht Ninox die Zuordnung eines Links mit einem nid.
    Aber manchmal ist doch das reine Zahlenformat erforderlich.
    Deshalb lass ich persönlich die Hände weg von Konstrukten wie:
    let me := this;
    Verknüpfung := me
    Und nutze statt dessen:
    Verknüpfung := number(me)

    Damit bin ich immer auf der sicheren Seite

    Sollte das nicht funktionieren, müsste man sich die Datenbank genauer ansehen und auch speziell, wie das Feld 'Beginn erste Tagung' befüllt wird.

      • Inhaber / Geschäftsführer
      • Bernd_Rutzel.1
      • vor 2 Monaten
      • Gemeldet - anzeigen

       Genau das war das Problem, da der Trigger serverseitig ausgeführt wird, habe ich alle Werte mit number(Wert) definiert und jetzt funktioniert es.

       

      let VDate := number(year('Beginn Erste Tagung'));
      let VJahreszahl := number(first(select Tagungsjahre where Jahreszahl = VDate).Nr);
      let VAkadmie := number('Durchführender Standort'.Akademie);
      let VBudget := number(first(select Budgets where Akademien = VAkadmie and number('Budget für') = VJahreszahl));
      Budgets := VBudget;
      --- Debug-Info
      DebugText := " VDate: " + debugValueInfo(VDate) + " / VJahreszahl: " +
          debugValueInfo(VJahreszahl) +
          "/ VAkademie: " +
          debugValueInfo(VAkadmie) +
          " / VBudget: " +
          debugValueInfo(VBudget)
      ---