0

Warum funktioniert now() in einer Feld Kalkulation, aber nicht im Trigger Script bei neuem Datensatz?

Ich berechne eine eindeutige custom ID, in die u.a. der aktuelle Timestamp über die Funktion now() einfließen soll. Funktioniert wunderbar in einem Kalkulationsfeld, aber nicht als Code im "Trigger bei neuem Datensatz". Da bleibt der Teil, der now() auswertet, leer.

Gibt es dafür einen Grund?

Hintergrund: Ich könnte die custom ID natürlich auch auf Basis von "erstellt am" berechnen, aber einmal reicht. Die Formel muss nicht immer laufen. Deswegen wollte ich einmal berechnen beim Erstellen und dann weg speichern.  Auch der Wert für "erstellt am" scheint beim "Trigger bei neuem Datensatz" noch nicht zu existieren?

10 Antworten

null
    • Dirk_Spannaus
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Beispiel:

    Schreibt per Trigger das Ergebnis dieser Berechnung in ein Textfeld:

    number(replace(replace(replace(text(now()), " ", ""), ".", ""), ":", ""));
    

    oder auch

    number(replace(replace(replace(text('Erstellt am'), " ", ""), ".", ""), ":", ""))
    

    Ergebnis ist 0.

    Bei der Ausgabe in einem Berechnungsfeld funktionieren beide Berechnungen wunderbar und geben einen Timestamp komplett als Zahl aus.

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

       Hallo Dirk, hast du es schon mal mit format() versucht?

      number(format(now(), "DDMMYYYYHHmm"))
      
      • Dirk_Spannaus
      • vor 1 Jahr
      • Gemeldet - anzeigen

       Danke für Deine Rückmeldung!
      Obiger Code funktioniert im Berechnungsfeld direkt. Ist der Codeinterpreter in den Triggern anders aufgebaut? Ich probier es gern, vermute nur, dass es kein Formatierungsproblem ist?

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

       

      Datum/Zeit-Funktionen sind bei Ninox generell ein leidiges Thema ...

      Grundsätzlich: Soweit ich weiß, werden Trigger auf dem Server ausgeführt. Je nachdem, in welcher Zeitzone sich dieser befindet, kann es als Folge also sein, dass eine falsche Uhrzeit zurückgegeben wird (meist 2 Stunden zurück). Funktionieren sollte der Code jedoch genauso wie in einem Formelfeld. Warum bei deinem Code nur 0 zurückgegeben wird, kann ich so auf Anhieb leider auch nicht sagen. Siehe erster Satz ...

      Die Funktion format() erscheint mir aber generell die bessere Lösung für diese Aufgabenstellung zu sein. Und sie funktioniert auch in einem Trigger - mit der genannten Einschränkung einer möglichen Zeitverschiebung. Deshalb mein Vorschlag, es mal damit zu versuchen. Vielleicht erledigt sich dein Problem damit.

      • mirko3
      • vor 1 Jahr
      • Gemeldet - anzeigen

       Hallo Dirk. Prinzipiell kann Dein Code so nicht funktionieren, da er vor der Funktion number() durch die replace()-Funktionen eine Zahl als Text mit einem Komma als Dezimaltrenner ergibt. number() verlangt aber einen Punkt. Damit kann die Umwandlung einer Textzahl in eine Dezimalzahl nicht gelingen. Du müßtest Deinen Code noch erweitern auf eine Umwandlung des Kommas in einen Punkt s.u. Aber deutlich eleganter ist die Idee von Planox. P.S. Ebenfalls einen timestamp gibt number(now()) in ms. Mirko

      number(replace(replace(replace(replace(text(now()), " ", ""), ".", ""), ":", ""), ",", "."))
      
      • Dirk_Spannaus
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Ich werde es gleich probieren

      • Dirk_Spannaus
      • vor 1 Jahr
      • Gemeldet - anzeigen

       Das Ergebnis ist tatsächlich ein Timestamp der aus z.B. 31.08.2023 11:10 ein 310820231110 macht... eventuell muss ich noch eine führende "0" wegwerfen ;)

      Ich probier auch Deine Idee.

      • Dirk_Spannaus
      • vor 1 Jahr
      • Gemeldet - anzeigen

       Funktioniert! Dankeschön 👍
      Ist mir aber ein völliges Rätsel, warum sich der gleiche Code so unterschiedlich verhält im Berechnungsfeld und in der Automatisierung 🤨

    • Dirk_Spannaus
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Tatsächlich wird 'Erstellt am' bei der Berechnung im Trigger mit 2h Differenz zur Berechnung im direkt im Frontend Feld ausgegeben. Könnte ich jetzt noch definieren, dass es immer UTC sein soll, wäre das zumindest einheitlich...

      • Dirk_Spannaus
      • vor 1 Jahr
      • Gemeldet - anzeigen

      ok - hab mich für format "X" entschieden. Passt für meine Zwecke und ist endlich unmissverständlich ;)

      Date and time formats - Ninox Docs (EN)