Datensätze und Tabellen
Lerne, wie du Datensätze und Datensatzlisten in Ninox Skripten sortierst, prüfst, aktualisierst und wiederverwendest.
Datensätze sind der Kern jeder Ninox App. Du nutzt sie für Berichte, aktualisierst verknüpfte Daten und steuerst Workflows damit. Dieses Kapitel zeigt Funktionen für Datensätze und Datensatzlisten, wenn du bereits eine Auswahl oder eine Datensatzreferenz hast.
In diesem Kapitel lernst du:
Datensatzlisten und Wertelisten für Berichte und Ansichten zu sortieren
Auswahlen zu zählen, Duplikate zu entfernen und bestimmte Elemente aus einer Liste zu holen
Datensätze per ID abzurufen und Tabellen- und Feld-IDs zu prüfen
Felder per Name zu lesen und zu aktualisieren, einfache Schlüssel-Wert-Paare zu speichern und Datensätze zu duplizieren
zwischengespeicherte Ergebnisse wiederzuverwenden und Daten bei Bedarf zu aktualisieren
array()
Führt zwei Arrays desselben Datentyps zusammen
count()
cnt()
Zählt Elemente in einer Liste oder Auswahl
duplicate()
Erstellt eine Kopie eines Datensatzes
fieldId()
Gibt die interne ID eines Felds zurück
first()
Gibt das erste Element aus einer Liste oder Auswahl zurück
get()
Liest ein Feld per Name oder einen gespeicherten Schlüssel
item()
Gibt ein Element an einer bestimmten Position zurück
last()
Gibt das letzte Element aus einer Liste oder Auswahl zurück
record()
Ruft einen Datensatz per Tabelle und ID ab
removeItem()
Entfernt ein Schlüssel-Wert-Paar aus einem JSON-Objekt
rsort()
Sortiert Werte absteigend
set()
Aktualisiert ein Feld per Name in einem Datensatz
setItem()
Aktualisiert oder ergänzt ein Schlüssel-Wert-Paar in einem JSON-Objekt
slice()
Gibt einen Teil einer Liste zurück
sort()
Sortiert Werte aufsteigend
tableId()
Gibt die interne ID einer Tabelle zurück
unique()
Entfernt doppelte Werte aus einer Liste
Datensatzlisten sortieren, zählen und bereinigen
Nutze diese Funktionen, wenn du die Reihenfolge steuern oder eine Liste zusammenfassen willst.
Wertelisten mit sort() und rsort() sortieren
sort() und rsort() sortierenNutze sort() und rsort(), wenn du bereits eine Werteliste hast und sie auf- oder absteigend sortieren willst. Nutze die select-Anweisung mit order by, wenn du Datensätze abfragen und aufsteigend sortieren willst.
Nutze sie, wenn du:
extrahierte Feldwerte vor der Ausgabe sortieren willst
Werte für Diagramme, Zusammenfassungen oder schnelle Vergleiche vorbereiten willst
sort([any])
rsort([any])
[any]: die Werteliste, die du sortieren willst
Für sort() und rsort() müssen alle übergebenen Werte denselben Datentyp haben.
Wenn du einzelne Werte statt eines Arrays übergibst, fasst Ninox sie zu einem Array zusammen und sortiert das Ergebnis.
Wenn du ein oder mehrere Arrays an sort() oder rsort() übergibst, führt Ninox sie zu einem sortierten Array zusammen.
Schauen wir uns einige Beispiele an:
Gibt die ausgewählten Bestelldaten in aufsteigender Reihenfolge zurück.
Gibt die ausgewählten Bestellbeträge in absteigender Reihenfolge zurück.
Sortiert die Liste alphabetisch.
Fasst die Werte zu einem Array zusammen und sortiert sie aufsteigend.
Führt beide Arrays zusammen und sortiert das Gesamtergebnis aufsteigend.
Fasst die Werte zu einem Array zusammen und sortiert sie absteigend.
Führt beide Arrays zusammen und sortiert das Gesamtergebnis absteigend.
Tipps:
order bysortiert das Ergebnis nur aufsteigend. Für eine absteigende Sortierung nutzersort().
Elemente mit count() und cnt() zählen
count() und cnt() zählenNutze count(), um die Anzahl konkreter Elemente in einer Auswahl oder Liste zurückzugeben. cnt() macht genau dasselbe wie count().
Nutze es, wenn du:
Datensätze zählen willst, die zu einem Filter passen
prüfen willst, ob eine Auswahl leer ist, bevor du weitermachst
eine Liste mit
unique()vergleichen willst, um Duplikate zu erkennen
count([any])
cnt([any])
[any]: die Liste oder Auswahl, die du zählen willst
count() und cnt() zählen Elemente, die nicht null und keine leeren Strings ("") sind.
Schauen wir uns einige Beispiele an:
Gibt die Anzahl der Datensätze in der Tabelle "Orders" zurück.
Gibt die Anzahl offener Bestellungen zurück.
Nutzt cnt(), um zu prüfen, ob das gefilterte Ergebnis leer ist.
Gibt 2 zurück, weil der leere String nicht gezählt wird.
Gibt true zurück, wenn alle Werte eindeutig sind. Gibt false zurück, wenn Duplikate vorhanden sind.
Tipps:
Nutze
length(), wenn du alle Array-Elemente zählen willst, einschließlich leerer Werte.
Duplikate mit unique() entfernen
unique() entfernenNutze unique(), um wiederholte Werte aus einer Liste zu entfernen.
Nutze es, wenn du:
aus vielen Datensätzen eine Liste eindeutiger Werte ableiten willst
unique([any])
[any]: eine oder mehrere Listen, aus denen du Duplikate entfernen willst
Wenn du mehr als ein Array übergibst, führt Ninox sie zusammen und gibt ein Array mit nur eindeutigen Werten zurück.
Schauen wir uns einige Beispiele an:
Gibt jeden Kunden nur einmal zurück.
Gibt die eindeutigen Werte aus dem Array zurück: ["D", "C", "A", "B"].
Führt die Arrays zusammen, entfernt Duplikate und sortiert das Ergebnis: ["A", "B", "C", "D", "E", "F"].
Tipp:
Vergleiche
count(list)mitcount(unique(list)), um zu prüfen, ob eine Liste bereits nur eindeutige Werte enthält.
Zwei Arrays mit array() zusammenführen
array() zusammenführenNutze array(), um zwei Arrays desselben Datentyps zu einem neuen Array zusammenzuführen.
Nutze es, wenn du:
zwei Ergebnis-Arrays vor einer gemeinsamen Prüfung zusammenführen willst
array([any], [any])
erstes
[any]: das erste Arrayzweites
[any]: das zweite Array
array() gibt ein Array zurück.
Nutze
array(), wenn du genau zwei Arrays zusammenführen musst. Für mehr Arrays rufst duarray()erneut mit dem Ergebnis und dem nächsten Array auf.Beide Eingabe-Arrays müssen Werte desselben Datentyps enthalten.
Schauen wir uns einige Beispiele an:
Gibt ein zusammengeführtes Array mit den Werten aus beiden Arrays zurück: ["1", "2", "3", "4", "5", "6"].
Gibt ein zusammengeführtes Array mit den Werten aus 4 Arrays zurück:
["A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "M", "W"].
Auf Elemente in Datensatzlisten zugreifen
Nutze diese Funktionen, wenn du einen einzelnen Datensatz, den Anfang oder das Ende einer Liste oder nur einen Teil eines größeren Ergebnisses brauchst.
Das erste oder letzte Element mit first() und last() holen
first() und last() holenNutze first() und last(), um ein einzelnes Element vom Anfang oder Ende einer Liste oder Auswahl zurückzugeben.
Nutze sie, wenn du:
den frühesten oder spätesten Datensatz aus einer sortierten Auswahl holen willst
nur ein Ergebnis aus einer größeren Liste lesen willst
first([any])
last([any])
[any]: die Liste oder Auswahl, aus der du ein Rand-Element holen willst
first() gibt das erste Element aus einem Array oder einer Auswahl zurück. last() gibt das letzte Element aus einem Array oder einer Auswahl zurück.
Schauen wir uns einige Beispiele an:
Gibt "B" zurück.
Gibt die erste offene Bestellung in Datumsreihenfolge zurück.
Gibt die letzte Bestellung in Datumsreihenfolge zurück.
Gibt "C" zurück.
Gibt den letzten Datensatz aus der Tabelle "Customer" zurück.
Gibt den ersten customer-Datensatz zurück, dessen Nachname mit A beginnt.
Gibt den letzten customer-Datensatz zurück, dessen Nachname mit A beginnt.
Tipps:
Prüfe, ob die Auswahl leer ist, bevor du vom Ergebnis abhängst.
Wenn das Array Datensatz-IDs enthält, kann das Ergebnis je nach Plattform unterschiedlich sein, weil Datensatz-IDs unterschiedlich sortiert werden.
Ein Element über seine Position mit item() holen
item() holenNutze item(), um einen Wert oder Datensatz an einer bestimmten Position in einer Liste zurückzugeben oder einen Wert per Schlüssel aus einem JSON-Objekt zu lesen.
Nutze es, wenn du:
den n-ten Wert aus einem Array lesen willst
Positionen sind nullbasiert. Position 0 ist das erste Element.
item([any], number) item(JSON, number)
item(JSON, string)
[any]: die Liste oder Auswahl, aus der du lesen willstnumber: die nullbasierte Position oder ein numerischer JSON-Schlüsselstring: der JSON-Schlüssel
Schauen wir uns einige Beispiele an:
Gibt "A" zurück.
Gibt die dritte Bestellung aus der sortierten Auswahl zurück.
Gibt "Cucumber" zurück.
Gibt John D Ventures zurück.
Gibt "Jane" zurück.
Tipps:
Nutze
first()oderlast(), wenn du nur den Anfang oder das Ende einer Liste brauchst.Nutze einen String-Schlüssel oder numerischen Schlüssel, wenn du aus JSON liest.
Einen Teil einer Liste mit slice() zurückgeben
slice() zurückgebenNutze slice(), um eine Teilliste aus einem größeren Array oder einer Auswahl zurückzugeben oder einen Teil eines Texts zu extrahieren.
Nutze es, wenn du:
eine Liste in kleinere Abschnitte aufteilen willst
slice([any], from, to)
slice(string, from, to)
[any]: die Liste oder Auswahl, die du zuschneiden willststring: der Text, den du zuschneiden willstfrom: die Startposition, einschließlich dieses Wertsto: die Endposition, ohne diesen Wert
Positionen sind nullbasiert.
Wenn to größer ist als die verfügbare Anzahl an Elementen oder Zeichen, gibt Ninox alles von from bis zum Ende zurück.
Schauen wir uns einige Beispiele an:
Gibt eine Teilliste mit den mittleren Werten zurück: [2, 3].
Gibt die ersten fünf Werte aus der sortierten Betragsliste zurück.
Gibt ["Bagel", "Cake"] zurück.
Gibt "maid" zurück.
Tipps:
fromist inklusive undtoist exklusiv.Bei Text funktioniert
slice()wiesubstring().
Mit Datensätzen, Tabellen und IDs arbeiten
Nutze diese Funktionen, wenn du einen bestimmten Datensatz oder Metadaten zu deiner aktuellen Struktur brauchst.
Einen Datensatz per ID mit record() abrufen
record() abrufenNutze record(), um einen Datensatz aus einer Tabelle zu laden, wenn du seine numerische ID bereits kennst.
Nutze es, wenn du:
einen referenzierten Datensatz per ID erneut öffnen willst
eine Datensatzreferenz aus gespeicherten Metadaten wiederherstellen willst
record(table, id)
table: die Tabelle, die den Datensatz enthältid: die numerische Datensatz-ID
record() gibt eine Datensatzreferenz zurück.
Der zurückgegebene Wert ist eine Referenz und nicht der vollständige Datensatz.
record() gibt immer einen Datensatzreferenz-Typ zurück, auch wenn die numerische ID nicht existiert.
Wenn du prüfen willst, ob der Datensatz existiert, nutze record(table, id)._id. Das gibt die Datensatz-ID nur für vorhandene Datensätze zurück.
Schauen wir uns einige Beispiele an:
Gibt den Datensatz mit der ID 123 aus der Tabelle "Orders" zurück.
Lädt die Bestellung und liest dann ihren Status.
Gibt das Feld date aus dem customers-Datensatz mit der ID 540 zurück.
Prüft, ob der Datensatz mit der ID 540 existiert.
Interne IDs mit tableId() und fieldId() abrufen
tableId() und fieldId() abrufenNutze diese Funktionen, wenn du Metadaten für Logging, API-Calls, Diagnose oder Admin-Skripte brauchst.
Nutze sie, wenn du:
API-URLs dynamisch aufbauen willst
interne Objektreferenzen prüfen willst
tableId(table)
tableId(record)
tableId(string)
fieldId(field)
fieldId(record, string)
fieldId(string, string)
table: die Tabelle, für die du mittableId(table)die interne ID holen willstrecord: ein Datensatz aus der Tabelle, für die du mittableId(record)die interne ID holen willststring: der Tabellenname fürtableId(string)oder der Feldname beziehungsweise Tabellen- und Feldname fürfieldId()field: das Feld, für das du mitfieldId(field)die interne ID holen willst
tableId() gibt den internen Bezeichner einer Tabelle als String zurück.
Tabellen-IDs nutzen Großbuchstaben und beginnen mit A.
fieldId() gibt den internen Bezeichner eines Felds als String zurück. Feld-IDs sind buchstabenbasierte Werte wie A, B, AA oder AB.
Schauen wir uns einige Beispiele an:
Gibt die interne ID der Tabelle "Orders" zurück.
Gibt die interne ID der aktuellen Tabelle zurück.
Gibt die interne ID des Felds status zurück.
Gibt die Feld-ID für Name in der aktuellen Tabelle zurück.
Tipps:
Nutze
tableId()als stabilen Bezeichner in API-Calls.Behalte Feld-IDs für technische Workflows. Nutze sie nicht als Nutzer-Bezeichnungen.
Werte lesen, aktualisieren, kopieren und speichern
Nutze diese Funktionen, wenn du einen Datensatz per Feldname ändern oder einen kleinen gespeicherten Wert für später behalten willst.
Felder mit get() und set() lesen und aktualisieren
get() und set() lesen und aktualisierenNutze get(), um ein Feld aus einem Datensatz zu lesen. Nutze set(), um ein Feld in einem Datensatz zu aktualisieren.
Nutze sie, wenn du:
ein Feld dynamisch lesen willst
einen anderen Datensatz innerhalb eines Skripts aktualisieren willst
generische Hilfslogik schreiben willst, die über mehrere Felder hinweg funktioniert
get(record, string)
set(record, string, any)
record: der Datensatz, den du lesen oder aktualisieren willststring: der Feldname oder die Feld-IDany: der Wert, den du mitsetschreiben willst
get() kann verschiedene Wertetypen zurückgeben, zum Beispiel Text, Zahlen, boolesche Werte oder einen leeren Wert.
set() aktualisiert ein Feld per Name oder über seine Feld-ID als Text, zum Beispiel "Name" oder "A".
set() gibt keinen Wert zurück.
Schauen wir uns einige Beispiele an:
Liest das Feld Status aus dem aktuellen Datensatz.
Aktualisiert das Feld Status im aktuellen Datensatz.
Aktualisiert das Feld Age im aktuellen Datensatz.
Aktualisiert das Feld isActive im aktuellen Datensatz.
Liest den Wert des Felds mit der internen ID B.
Aktualisiert die erste offene Bestellung in Datumsreihenfolge.
Tipps:
Nutze normalen Feldzugriff, wenn der Feldname feststeht.
Nutze eine Feld-ID, wenn dein Skript stabil bleiben soll, auch wenn sich der Feldname ändert.
get(this, "")gibt einen leeren Wert zurück.Nutze
set(), wenn du viele Felder aktualisieren willst, ohne eine Zuweisung pro Feld zu wiederholen.
Beispiel für dynamisches Feld-Mapping:
Das liest nummerierte Felder aus dem aktuellen Datensatz und schreibt sie in neue Subtable-Datensätze.
Beispiel für dynamische Aktualisierungen aus JSON-Daten im API-Stil:
Das durchläuft die Felder in jedem Antwortelement und aktualisiert die passenden Ninox Felder dynamisch.
Gespeicherte Werte mit get() lesen und JSON-Objekte mit setItem() und removeItem() aktualisieren
get() lesen und JSON-Objekte mit setItem() und removeItem() aktualisierenNutze get(), wenn du einen gespeicherten Schlüssel-Wert-Eintrag lesen willst. Nutze setItem(), um ein Schlüssel-Wert-Paar in einem vorhandenen JSON-Objekt zu aktualisieren oder hinzuzufügen. Nutze removeItem(), um ein Schlüssel-Wert-Paar aus einem JSON-Objekt zu entfernen.
Nutze sie, wenn du:
einen Wert in einem JSON-Objekt aktualisieren willst
einen neuen Schlüssel zu einem JSON-Objekt hinzufügen willst
einen Schlüssel aus einem JSON-Objekt entfernen willst, bevor du es wiederverwendest oder sendest
get(string)
setItem(JSON, string, any)
removeItem(JSON, string)
string: der Speicherschlüssel fürgetJSON: das JSON-Objekt, das du ändern willststring: der Schlüssel, den du aktualisieren, hinzufügen oder entfernen willstany: der Wert, den du mitsetItemschreiben willst
Schauen wir uns einige Beispiele an:
Liest den gespeicherten Wert für "theme".
Aktualisiert den Schlüssel firstName im Objekt data.
Fügt dem Objekt data das Schlüssel-Wert-Paar age: 112 hinzu.
Entfernt das Schlüssel-Wert-Paar firstName aus dem Objekt data.
data wird direkt geändert.
Tipps:
get(this, "Field")liest ein Datensatzfeld.get("key")liest einen gespeicherten Schlüssel-Wert-Eintrag. Halte die beidenget()-Formen in deinen Skripten getrennt.Wenn das JSON-Objekt in einer Variablen gespeichert ist, ändert
removeItem()dieses Objekt auch dann, wenn du das Ergebnis nicht erneut zuweist.Wenn das JSON-Objekt in einer Variablen gespeichert ist, ändert
setItem()dieses Objekt ebenfalls, auch wenn du das Ergebnis nicht erneut zuweist.
Einen Datensatz mit duplicate() kopieren
duplicate() kopierenNutze duplicate(), um eine Kopie eines vorhandenen Datensatzes zu erstellen.
Nutze es, wenn du:
einen ähnlichen Datensatz als Vorlage wiederverwenden willst
duplicate(record)
record: der Datensatz, den du kopieren willst
duplicate() gibt den duplizierten Datensatz mit einer anderen Datensatz-ID zurück.
Wenn du einen Datensatz duplizierst, kopiert Ninox alle Feldwerte, aber keine Dateianhänge. Datensätze aus Subtabellen vom Typ Composition werden ebenfalls dupliziert.
Schauen wir uns einige Beispiele an:
Erstellt eine Kopie des aktuellen Datensatzes.
Erstellt eine Kopie und setzt dann das Feld "Status" auf Draft zurück.
Erstellt ein Duplikat des aktuellen Datensatzes und öffnet es.
Tipps:
Setze eindeutige Werte nach dem Duplizieren bei Bedarf zurück.
Prüfe kopierte Statusfelder, Zahlen oder Referenzen, bevor du weitermachst.
Zwischengespeicherte Ergebnisse aktualisieren und SQL-Verbindungen abfragen
Nutze diese Funktionen, wenn dein Skript von externen Daten, wiederholten Berechnungen oder einer verbundenen SQL-Datenbank abhängt.
Aufwendige Ergebnisse mit cached() wiederverwenden
cached() wiederverwendenNutze cached(), um ein Skript einmal auszuführen, sein Ergebnis zu speichern und bei späteren Aufrufen den gespeicherten Wert zurückzugeben.
Nutze es, wenn du:
das Ergebnis eines aufwendigen Skripts wiederverwenden willst
eine Auswahl zwischenspeichern willst, deren Aufbau teuer ist
die Performance in Skripten verbessern willst, die dieselbe Berechnung wiederholen
cached(script)
script: das Skript oder der Ausdruck, den du einmal ausführen und zwischenspeichern willst
Schauen wir uns einige Beispiele an:
Gibt die offenen Tasks-Datensätze zurück, die dem aktuellen Nutzer zugewiesen sind. Das Ergebnis wird zwischengespeichert und bei späteren Aufrufen wiederverwendet.
Tipps:
cached()gibt immer das zurück, was das innere Skript zurückgibt.Berechne das zwischengespeicherte Ergebnis neu, indem du in den Builder-Modus wechselst oder
invalidate()ausführst.Nutze Caching für aufwendige Skripte, die deine App sonst verlangsamen würden.
Häufige Muster für Datensätze und Tabellen
Diese kurzen Muster decken häufige Abfragen und Aktualisierungen von Datensätzen in Ninox ab.
Offene Bestellungen zählen
Gibt die Anzahl offener Bestellungen zurück.
Datensätze für einen Bericht sortieren
Gibt offene Bestellungen in einer vorhersehbaren Reihenfolge für Berichte zurück.
Den aktuellen Datensatz duplizieren und den Status zurücksetzen
Erstellt einen neuen Entwurf aus dem aktuellen Datensatz.
Nutze dieses Kapitel zusammen mit Logik für Filter, Formatierung und Berichte:
Nutze Datumsfunktionen in
where- undorder by-Klauseln.Nutze Textfunktionen, um ausgewählte Werte für die Ausgabe zu formatieren.
Nutze numerische Funktionen, um ausgewählte Beträge zusammenzufassen.
Zuletzt aktualisiert
War das hilfreich?