0

Merkwürdige Problem seit einigen Tagen!

Mein Kunde hat Seite einigen Tagen merkwürdige Probleme. Alles Dinge die seit Monaten ohne Probleme funktioniert habe. So wie es aussieht liefern lesende Abfragen (Wert aus Datensatz lesen, select, etc.) machmal "null" und manchmal den korrekten Wert!

Ich konnte das Problem auf folgendes minimale Skript eingrenzen. Das Skript führe ich in der Console in der Browser-Umgebung aus (nicht in einem native Client!):

let me := (create Test);
me.(Zahl := 83412);
let zahl := me.Zahl;
if zahl = null then
   "Not found";
else
   "Found: " + zahl;
end

Um das Skript zu verwenden muss man vorher eine neue Tabelle "Test" mit nur einer Spalte "Zahl" anlegen.

Wenn man nun schnell hintereinander auf "Ausführen" klickt, kommt ab und zu "Not found"!

IMHO ist das ein Fehler - außer ich stehe hier auf'm dem Schlauch und sehe meinen Fehler nicht.

@Ninox Schraubt ihr gerade im Hintergrund am System herum???

Grüße Andreas

10 Antworten

null
    • schwiegel
    • vor 2 Wochen
    • Gemeldet - anzeigen

    Hi Andreas,

    in deinem Skript kann ich keinen Fehler erkennen. Sollte also eigentlich den korrekten Datensatz ausgeben.

    Ich habe persönlich in der App-Version seit Version 3.16.4 vielfältige Fehler in bestehenden Tabellen, wo bisher alles sauber war. Das passt gefühlt grundsätzlich zu deinem Fehlerbild. Die Fehler traten erstmals im Juni 2025 auf.

    Ich konnte den oder die Fehler aber nicht identifizieren. Wenn ich zum Beispiel die Position einiger Formeln, die nicht korrekt berechnet werden, im Formular nach oben schiebe, dann werden sie richtig ausgegeben. Eine Berechnung sollte nicht von der Position des Feldes abhängen.

    Einige select Formeln werden überhaupt nicht ausgewertet. Wenn ich eine neue Tabelle mit den identischen Feldern manuell aufsetze, funktioniert es aber auf einmal. Nach einem Neustart der App tritt der Fehler dann aber auch in der neuen Tabelle auf.

    Oft hängt sich die App in einigen Tabellen durch verschiedene Aktionen einfach auf. Wenn ich dann zum Beispiel ein Auswahlfeld anklicke, reagiert die App nicht mehr und ich muss sie wieder neustarten. Ninox scheint einige Dinge im Hintergrund geändert zu haben, die eben zu diversen Fehlern führen. Durch die nachfolgenden Updates 3.16.5 und 3.16.6 wurde keins der Probleme adressiert.

    Ich habe an dem Punkt ehrlich gesagt aufgegeben, weil die Fehler so zahlreich sind, dass ich Ninox nicht mehr zuverlässig nutzen kann. Echt schade, weil es eigentlich eine schöne Software war!

    Grüße

    Alex

      • Admin_TB_Ninox
      • vor 2 Wochen
      • Gemeldet - anzeigen

      Hallo Alex,

      es ist einerseits gut, dass ich nicht allein bin mit den Problemen, andererseits ist es aber auch sehr besorgniserregend! So kann man kein System im produktiven Einsatz realisieren.

      Der Support hat sich bis jetzt auch nicht mehr bei mir gemeldet - obwohl das Problem mit meinem kleinen Skript klar reproduzierbar ist!

      Interessant ist auch, das die Problem nur im Browser auftreten. Bei Verwendung der nativen Mac App scheint alles zu funktionieren. Dafür gibt es hier gerne mal Sync Probleme...

      Ich hoffe bei Ninox rauchen die Köpfe und es wird an einer Lösung gearbeitet!

      Grüße

      Andreas

    • Admin_TB_Ninox
    • vor 2 Wochen
    • Gemeldet - anzeigen

    Das Problem wurde soeben vom Ninox Support als Blocker-Bug bestätigt!

    • Markus_Smet
    • vor 2 Wochen
    • Gemeldet - anzeigen

    Danke, dass Sie den Informationen geteilt hast. Das Support-Team von Ninox hat das Problem aufgegriffen und als Blocker eingestuft. Wir arbeiten daran, das zu lösen.

      • Markus_Smet
      • vor 2 Wochen
      • Gemeldet - anzeigen

      Im Moment werden wir das nicht beheben. Wir haben das Problem verstanden und werden bald eine Erklärung und einen Lösungsansatz kommunizieren.

    • Customer Support Ninox
    • uwe_groegor
    • vor 2 Wochen
    • Gemeldet - anzeigen

    Der Fehler betrifft hauptsächlich diese Art Scriptkonstellation, wo ein Wert aus einem neu erstellten Record direkt einer Variablen zugeordnet werden soll und mit dieser Variablen weiter gearbeitet wird.
    Er betrifft auch nur Scripts mit dieser Fallkonstellation, die über einen Button im Browser ausgeführt werden.
    Er tritt nicht auf in den nativen Apps, Trigger Skripte oder bei Einbettung in 'do as transaction'.

    Als Workaround bietet sich somit bei den entsprechenden Buttonscripten die Einbettung des Script in 'do as transaction' an.

    Das ist leider momentan mit einem Mehraufwand beim bearbeiten bestehender Scripte verbunden.

    Uwe
     

      • Gotje_Ing
      • vor 2 Wochen
      • Gemeldet - anzeigen

       
      Können wir mehr Informationen zu diesem Fehler bekommen?
      - Wurde im Hintergrund etwas geändert?
      Falls es auf eine Änderung von Ninox zurückzuführen ist, betrifft aus meiner Sicht viele bestehende Scripte in diversen Datenbanken. 
      Danke!

    • Markus_Smet
    • vor 2 Wochen
    • Gemeldet - anzeigen
    1. Ninox-Skript und andere Programmiersprachen: In Ninox wird jeder Schritt im Skript ausgeführt, ohne explizit darauf zu warten, dass der vorherige Schritt abgeschlossen ist, wodurch das Skript einfacher zu schreiben ist. Ein Skriptschritt läuft in Millisekunden ab, vorausgesetzt der Kontext ist schnell genug, um den nächsten Schritt mit den benötigten Eingaben zu versorgen. Dies ist konzeptionell ähnlich wie synchrones JavaScript und ist ein gängiger Ansatz in der synchronen Programmierung. Der Nachteil dieser Flexibilität ist, dass der vorherige Schritt zurückgelassen werden kann, wenn die zurückgegebenen Daten länger brauchen, um aus einem anderen Kontext zurückzukehren, sodass das Skript zum nächsten Schritt fortschreitet, aber nicht die benötigten Eingaben hat. Das Ergebnis ist in diesem Beispiel, dass "not found" auftritt.

    2. Tatsächliches Ninox-Skriptverhalten: In Ninox aktualisiert ein Skriptschritt einen Datenpunkt in einem Datensatz, sendet den Befehl an einen anderen Kontext, den Server, und fährt mit dem nächsten Schritt im Skript fort. Daten werden vom Server zurück zum Client synchronisiert, das bedeutet, Daten werden in einen anderen Kontext zurücksynchronisiert. Ähnlich wie bei JavaScript kann es also vorkommen, dass ein Skript, das den Serverkontext aufruft, die Daten zurückgibt, nachdem das Skript bereits weitergegangen ist, was zu einem "not found" oder leeren Ergebnis führt.

    Die Lösung: do as transaction garantiert, dass jeder Schritt abgeschlossen ist, bevor weitergemacht wird. Dies ist ähnlich wie callbacks in JavaScript. In "do as transaction" müssen alle Änderungen auf dem Server abgeschlossen sein, bevor das Skript fortfahren darf. Dies kann das Skript blockieren, aber es garantiert ein zurückgegebenes Ergebnis basierend auf einem Schritt, der einen anderen (Server-)Kontext im Skript verwendet und abgeschlossen ist, bevor fortgefahren wird.

    Unsere Triage-Arbeit deutet darauf hin, dass dieses Verhalten schon lange im Produkt vorhanden ist. Wir müssten eine neue Funktion für Ninox-Skript entwickeln, um dieses Problem zu behandeln, und zu diesem Zeitpunkt planen wir nicht, dies zu tun.

      • Gotje_Ing
      • vor 13 Tagen
      • Gemeldet - anzeigen

       Moin,
      danke für die Antwort. Das Verhalten ist tatsächlich über viele Versionen hinweg identisch und es ist keine Änderung in den letzten Serverversionen erkennbar. Deutlich mehr Einfluss scheint der Server selbst zu haben, inklusive der Verbindung zum Server. 

      Aus meiner Sicht könnte in der Doku etwas genauer erläutert werden, welche Functions die synchrone Abarbeitung im Ninox-Script brechen können. Also create, mehrere select in einem Script, mehrere select mit unterschiedlicher Request-Time außerhalb eines Scripts und dadurch entstehende race-conditions, etc. Das kann ich mir gut als eine Erweiterung des neuen Doku-Bereichs "Performance" vorstellen, ggf. auch ein "Ninox-Script Masterclass" Bereich, wo die technischen Details erläutert werden.

    • Admin_TB_Ninox
    • vor 2 Wochen
    • Gemeldet - anzeigen

    In Ninox wird jeder Schritt im Skript ausgeführt, ohne explizit darauf zu warten, dass der vorherige Schritt abgeschlossen ist, wodurch das Skript einfacher zu schreiben ist ...

    Danke für die Klarstellung. Also ich muß gestehen (und ich entwickle seit 35 Jahren Software), dass mir das nicht klar war! Ich habe mir durch die Probleme der letzten Tage schon gedacht, dass hier Dinge ggf. asynchron ablaufen. Die Begründung, dass Skripte dadurch "einfacher zu schreiben" sind lasse ich mal so im Raum stehen. Ich vertrete hier eine andere Meinung. Ich sehe das gerade als nicht "synchron". Wenn es "synchron" wäre, könnte jeder Schritt im Skript sich auf sie Daten der vorherigen Zeile verlassen! Von einer "Low-Code" Plattform wie Ninox erwarte ich mir eine Skriptsprache die den Nutzer nicht mit Nebenläufigkeiten das Leben erschwert ... 

     ... vorausgesetzt der Kontext ist schnell genug

    Das ist ja der perfekte "Zufallsgenerator". Ich habe ja nicht wirklich Einfluß darauf "wie schnell der Kontext" ist! (außer ich nutze "do as transaction")

    Ich kann euch nur empfehlen diesen letzten Foreneintrag von Markus in eure Dokumentation ganz oben unter "Einführung in Ninox-Skript" zu packen. Dann weiß man wenigsten von Anfang an worauf man achten muß.

    Was das allerdings nicht beantwortet:

    Warum habe wir die massiven Probleme erst seit ca. 2 Wochen?

    Aber nach der obigen Beschreibung genügt ja die kleinste Änderung im Timing zwischen Client und Server um in das Problem zu laufen ...

    Grüße

    Andreas

Content aside

  • vor 13 TagenZuletzt aktiv
  • 10Antworten
  • 120Ansichten
  • 6 Folge bereits