Konsole
In der Konsole probieren Sie ein Stück Ninox-Code aus, bevor Sie es in Ihre Datenbank übernehmen: Sie schreiben es, führen es aus und sehen sofort das Ergebnis.
Die Konsole gibt es seit Version 3.1. Die Debugger, „Prüfen“, „Formatieren“ und die JavaScript-Autovervollständigung kommen mit Version 3.2.0 (Beta) hinzu.
Im Reiter Konsole schreiben Sie Ninox-Code und führen ihn sofort aus, wie in einem Interpreter, um ihn anschließend zu debuggen: Prüfung ohne Ausführung, Schritt-für-Schritt-Debugger, Debugger mit Wiedergabe.
Der Reiter ist den Administratoren vorbehalten. Er zeigt nur sein Symbol, ein Terminalfenster, zwischen den Reitern Debug-Tracer und Fehler; sein Name erscheint, wenn Sie mit der Maus darüberfahren. Er lässt sich in den Ninext Einstellungen deaktivieren, Abschnitt „Skript-Manager“.
Den Ausführungskontext wählen
Der Code wird im Kontext eines Datensatzes ausgeführt, wie eine Formel seiner Tabelle – oder ohne Datensatz:
| Kontext | Wirkung |
|---|---|
| Keine Umgeb. | Kein Datensatz: Der Code wird wie globaler Code ausgewertet. |
| Aktiver DS | Der Datensatz, der in Ninox im Vordergrund angezeigt wird. Der Kontext folgt Ihren Datensatzwechseln. |
| Datensatz | Ein Datensatz Ihrer Wahl, unter den in den Fenstern von Ninox geöffneten, oder über Anderen Datensatz auswählen…, das eine Auswahl öffnet (Tabelle, Suche, Liste der Datensätze). |
| Formel | Der Datensatz, den eine von Ihnen geschriebene Formel zurückgibt, zum Beispiel record(Customer, 12). Die Formel wird bei jeder Ausführung neu ausgewertet. |
Die Kontextleiste zeigt den gewählten Kontext an; ihr Kreuz setzt ihn zurück.
Code schreiben
Der Editor der Konsole bietet:
- die Syntaxhervorhebung von Ninox;
- die Autovervollständigung von Funktionen, Tabellen, Feldern und Schlüsselwörtern, beim Tippen oder mit Strg + Leertaste;
- das Unterstreichen von Fehlern (rote Wellenlinie) und Warnungen (bernsteinfarbene gepunktete Linie) beim Tippen, mit einem Symbol ⛔ oder ⚠ am Rand;
- das Hervorheben der anderen Vorkommen des markierten Wortes;
- eine Schaltfläche Kopieren oben rechts, wenn Sie mit der Maus über den Editor fahren;
- einen Griff unter dem Editor, mit dem sich seine Höhe einstellen lässt.
JavaScript-Autovervollständigung in nativen Blöcken
In einem Block #{ … }# bietet die Konsole dieselbe Eingabehilfe wie die Konsole des Browsers, zugeschnitten auf das, was der Block tatsächlich erhält:
- die sichtbaren Ninox-Variablen und -Parameter in ihrer JavaScript-Form, mit ihrem Typ;
- die lokalen Ninox-Funktionen,
ui,databasesowiecallback, wenn der Block als:callbackoder:asyncdeklariert ist; - nach einem Punkt die Member des Objekts – bei einem Datensatz die Namen seiner Felder; ein Name, der kein gültiger JavaScript-Bezeichner ist, wird in der Form
['…']eingefügt; - im Kopf
#{:die Typen; nach:nid(oder:rid(die Liste der Tabellen.
Diese Hilfe gibt es nur in der Konsole.
Ausführen

Die grüne Schaltfläche Ausführen startet den Code, ebenso wie Strg + Eingabe (⌘ + Eingabe auf dem Mac). Ihr Pfeil bietet drei Modi an:
| Modus | Wirkung |
|---|---|
| Ausführen | Führt den Code in einem Zug aus und zeigt das Ergebnis an. |
| Wiedergabe | Führt den Code einmal aus und lässt Sie dann seinen Ablauf vorwärts und rückwärts durchgehen. |
| Schritt für Schritt | Führt den Code Anweisung für Anweisung aus und hält dort an, wo Sie es festlegen. |
Der gewählte Modus wird gespeichert; die Schaltfläche übernimmt seinen Namen, und das Tastenkürzel startet diesen Modus. Wenn Sie Schritt für Schritt oder Wiedergabe wählen, erscheint sofort unter dem Editor die Leiste dieses Debuggers, mit ihren Befehlen an Ort und Stelle, aber ausgegraut: Vor dem Start wird nichts ausgeführt. Nach einer erfolgreichen Ausführung wird der Code im Editor neu formatiert; der Verlauf behält den Text so, wie Sie ihn geschrieben haben.
Ergebnisse lesen

Die Ergebnisse stapeln sich, das neueste oben; die Konsole behält zwanzig davon. Jedes Ergebnis nennt seinen Typ, seinen Kontext, sein Datum, seine Uhrzeit und seine Ausführungsdauer; ein Klick auf seine Kopfzeile klappt es ein, sein Kreuz entfernt es, und Löschen leert die Liste.
- Ein einfacher Wert wird mit einer Schaltfläche Kopieren angezeigt.
- Ein Datensatz wird mit einer Schaltfläche angezeigt, die ihn in Ninox öffnet, und mit seinen Feldern als Baum.
- Eine Liste von Datensätzen wird wie in den Ansichten von Ninox angezeigt: bedingte Formatierung, Miniaturansichten der Fotos, Farbpunkte, Spaltenbreiten. Ein Reiter pro Ansicht, in der Reihenfolge von Ninox; Ansichten, die Sie nicht sehen dürfen, sind ausgeblendet. Wenn nicht alle Reiter Platz finden, listet die Schaltfläche … („Weitere Ansichten“) die nicht sichtbaren auf. Ein Klick auf eine Zeile öffnet den Datensatz, und die Zeilen werden beim Scrollen jeweils zu 100 nachgeladen.
- Objekte und Listen werden als aufklappbarer Baum angezeigt; jeder Wert lässt sich kopieren, und ein Datensatz öffnet sich mit einem Klick.
- Ein Text, der JSON enthält, wird unverändert angezeigt; die Schaltfläche Baum klappt ihn bei Bedarf auf.
- Ein Text mit mehr als 100.000 Zeichen wird sofort gekürzt angezeigt, mit Alles anzeigen; Kopieren kopiert immer den gesamten Text.
Während einer langen Auswertung erscheint eine Warteanzeige.
Prüfen ohne Ausführung
Prüfen (Strg + Umschalt + Eingabe, ⌘ + Umschalt + Eingabe auf dem Mac) kompiliert den Code, ohne ihn auszuführen: ohne jede Wirkung auf die Daten. Es meldet die Fehler und Warnungen von Ninox und führt die Ninext-eigenen Prüfungen durch:
- eine Oberflächenfunktion oder ein nativer Block in einem
do as server, wo sie wirkungslos wären; - eine deklarierte, aber nie gelesene Variable;
- die JavaScript-Syntax der nativen Blöcke;
- das an
html()übergebene HTML und CSS.
Das Ergebnis erscheint in der Leiste, und der Cursor springt zur ersten Diagnose. Passen zwei Typen nicht zusammen, nennt die Erklärung, welche es sind. Ist der Code gültig, wird er formatiert.
Formatieren
Formatieren (Strg + Umschalt + F, ⌘ + Umschalt + F auf dem Mac) bringt den Code in Form, ohne ihn auszuführen: Einrückung, Leerzeichen um Operatoren, Feldnamen so geschrieben, wie Ninox sie anzeigt. Auch das JavaScript der nativen Blöcke #{ … }# wird formatiert: Ein Block, der in einem Stück geschrieben ist, wird unter der Zeile, die ihn trägt, aufgefächert.
Code mit Fehlern muss zuerst korrigiert werden; und falls beim Formatieren ein Teil des Textes verloren gehen könnte, verzichtet die Funktion darauf und weist darauf hin.
Dieselbe Schaltfläche gibt es in den Skripteditoren von Ninox: Sie erscheint oben rechts, wenn Sie mit der Maus über den Editor fahren, und das Tastenkürzel funktioniert dort ebenfalls.
Der Schritt-für-Schritt-Debugger

Die Haltepunkte
- Ein Klick in den linken Rand oder auf die Zeilennummer setzt einen Haltepunkt (roter Kreis); ein zweiter Klick entfernt ihn.
- Ein Rechtsklick oder Alt + Klick öffnet den Bereich Haltebedingung: Die Ausführung hält dort nur an, wenn Ihre Bedingung wahr ist, zum Beispiel
i > 10. Im selben Bereich können Sie den Haltepunkt Deaktivieren, ohne ihn zu verlieren (grauer Ring), und später Reaktivieren. Ein bedingter Haltepunkt ist ein bernsteinfarbener Kreis. - Die Bedingungen werden ohne Zugriff auf die Datenbank ausgewertet, mit einfachen Funktionen (
count,length,text,upper,lower,contains…). Lässt sich eine Bedingung nicht auswerten, hält die Ausführung sicherheitshalber an. - Sobald ein aktiver Haltepunkt gesetzt ist, hält auch Ausführen dort an und fährt dann Schritt für Schritt fort.
Die Befehle
Die Sitzung beginnt pausiert bei der ersten Anweisung.
| Befehl | Wirkung |
|---|---|
| Nächster Schritt | Führt die Anweisung aus und hält vor der nächsten an. |
| Teilschritt | Geht Teilausdruck für Teilausdruck weiter und zeigt den jeweils erhaltenen Wert an. Bei einem Funktionsaufruf oder einem Formelfeld des Schemas steigt er in dessen Code hinab. |
| Verlassen | Beendet die aktuelle Funktion und kehrt zum Aufrufer zurück. |
| Fortsetzen | Läuft bis zum nächsten Haltepunkt oder bis zum Ende. |
| Abbrechen | Bricht die Ausführung ab. |
Ist die Leiste schmal, zeigen die Befehle nur noch ihr Symbol; ihr Name erscheint, wenn Sie mit der Maus darüberfahren. Die Informationsschaltfläche (ⓘ) der Leiste klappt die Gebrauchsanleitung des Debuggers auf, und das Kreuz, das nach dem Ende der Ausführung erscheint, schließt seinen Bereich.
Wenn die Ausführung in eine Funktion oder eine Formel hinabsteigt, öffnet sich ihr Code in einem gestapelten Rahmen, der wie in Ninox von rechts hereingleitet. Dort lassen sich Haltepunkte setzen: Sie werden nach Funktionsnamen abgelegt, gelten für alle Aufrufe dieser Funktion und für die folgenden Ausführungen und verschwinden beim Neuladen der Seite. Der Rahmen einer Formel des Schemas trägt den Vermerk Formel. Ein Griff am linken Rand eines Rahmens legt fest, wie viel des darunterliegenden Rahmens er verdeckt. Ein Block #{ … }# zählt als ein einziger Schritt.
Die Variablen
Bei jedem Schritt zeigt der Bereich Bekannte Variablen bei diesem Schritt Wert und Typ jeder Variablen; ein Wert lässt sich aufklappen und kopieren, und ein Datensatz öffnet sich mit einem Klick. Variablen, die existieren, aber außerhalb des Gültigkeitsbereichs liegen, erscheinen grau.
Gut zu wissen
Die Ausführung ist bei jeder Pause wirklich angehalten, und die Datenbank lebt währenddessen weiter: andere Benutzer, Programmierschnittstelle, Trigger. Was bereits ausgeführt wurde, bleibt wirksam, auch wenn Sie abbrechen. Eine Pause von mehr als zehn Minuten beendet die Ausführung.
Der Debugger mit Wiedergabe
Der Code wird tatsächlich ausgeführt, ein einziges Mal und in einem Zug. Anschließend gehen Sie seinen Ablauf vorwärts und rückwärts durch, mit den Befehlen des Schritt-für-Schritt-Modus – Nächster Schritt, Teilschritt, Verlassen, Fortsetzen –, dazu Erster Schritt und Vorheriger Schritt. Die Liste der Schritte nennt den bei jedem Schritt erhaltenen Wert; ein Klick auf einen Schritt führt direkt dorthin. Die Wiedergabe zählt in großen Schritten: einer pro ausgeführter Anweisung und einer pro Schleifendurchlauf, der den Wert der Schleifenvariable angibt. Die eingerückten Teilschritte tragen die Nummer ihres großen Schritts (3.1, 3.2 …) und werden gesondert gezählt („+6 Teilschritte“); Verlassen führt auch von einem Teilschritt zu dem großen Schritt zurück, der ihn trägt. Die gestapelten Rahmen und der Variablenbereich sind dieselben wie im Schritt-für-Schritt-Modus. Ideal, um zu verstehen, was passiert ist, ohne den Code erneut zu starten.
Einschränkungen:
- ein Datensatz erscheint in seinem aktuellen Zustand, nicht in dem zum Zeitpunkt der Ausführung;
- die Bedingung eines bedingten Haltepunkts wird nicht erneut ausgewertet: Die Wiedergabe hält dort immer an;
- ab 10.000 Schritten wird die Aufzeichnung gekürzt.
Beide Debugger lehnen Code mit Fehlern ab und melden diese wie Prüfen.
Aus dem Editor von Ninox debuggen
Wenn Sie mit der Maus über einen Skripteditor von Ninox fahren, erscheint oben rechts die Schaltfläche In der Konsole debuggen. Sie öffnet die Konsole und nimmt Ihren Code dorthin mit, ohne ihn auszuführen, mit dem aktuellen Datensatz als Kontext: Gibt es keinen aktiven Datensatz dieser Tabelle, öffnet sich die Datensatzauswahl für diese Tabelle. Aus dem globalen Code ist der Kontext Keine Umgeb., und nur die Funktion, in der der Cursor steht, wird mitgenommen.
Der mitgenommene Code ersetzt den Code der Konsole und dessen Haltepunkte.
Der Verlauf, und Ihre Arbeit begleitet Sie
- Die Schaltfläche Verlauf listet die letzten 50 Befehle auf; Alt + ↑ und Alt + ↓ blättern im Editor durch sie. Ein Klick lädt den Code und seinen Kontext anstelle des aktuellen Codes und seiner Haltepunkte.
- Wenn Sie mit der Maus über eine Zeile des Verlaufs fahren, löscht ein Papierkorb sie.
- Aus dem Verlauf übernommener Code wird in der aktuellen Sprache von Ninox neu aufgebaut: „Id“ wird auf Deutsch zu „Nr“. Ein nach einem Sprachwechsel wieder aufgerufener Code kompiliert also stets.
- Beim Start findet die Konsole Ihren letzten Code, seinen Kontext, seine Ergebnisse und seine Haltepunkte wieder – auf einem gemeinsam genutzten Rechner jeder die eigenen.
- Bei einem Administrator wandern der Verlauf und der letzte Code auch von einem Computer zum anderen mit und überstehen das Löschen der Browserdaten.
Achtung
Dieser Verlauf wird im Klartext in den Einstellungen des Plugins gespeichert, die alle Benutzer der Datenbank laden. Lassen Sie darin weder Passwörter noch Zugangsschlüssel stehen.
