Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Einfache Rechenoperationen anlegen
Mit diesen Operatoren nehmen Sie 2 numerische Werte, führen eine Berechnung durch und erhalten einen numerischen Wert zurück. Es geht hier vor allem um die Grundrechenarten.
+
Addition (auch zum Verbinden von Text)
1 + 2 = 3
-
Subtraktion
3 - 2 = 1
*
Multiplikation
2 * 3 = 6
/
Division
6 / 3 = 2
%
Teilungsrest
13 % 5 = 3
(13 / 5 = 2 Rest 3)
()
Klammern (zum Verändern der Reihenfolge, in der Ausdrücke abgearbeitet werden)
1 + 2 * 3 = 1 + (2 * 3) = 7
(1 + 2) * 3 = 9
Ninox entfernt
überflüssige Klammern (es folgt den Vorrang-Regeln „Punkt- vor Strich-Rechnung),
ebenso wie überflüssige Leerzeichen.
Es fügt aber auch Leerzeichen hinzu, wo es dies für sinnvoll erachtet (z.B. bessere Lesbarkeit).
Diese Operatoren sind beim Erstellen Ihres Skripts besonders wichtig
:=
Dieser Operator ( „definiert als gleich”) weist einem Feld oder einer Variablen einen Wert zu.
Text := "Hello world!"
let x := 1000;
x := 2
;
Mit dem Semikolon beenden Sie eine Zeile. Wenn Sie Variablen definieren (mit let
), wird das Semikolon auch automatisch und nachträglich von Ninox eingefügt.
let x := 1000;
""
Die Anführungszeichen markieren Text, d.h. alles innerhalb soll als normaler Text verwendet werden.
"Hello" + " " + "world!"
=> Hello world!
Text := "Hello world!"
=> Hello world!
''
Mit dem einfachen Anführungszeichen umfassen Sie Tabellen- oder Feld-Namen, die ein Leerzeichen oder Sonderzeichen enthalten, damit Ninox erkennt, dass sie zusammengehören.
'Gesamt netto' + " " + "(MwSt. nicht enthalten)"
=> 425,00 € (MwSt. nicht enthalten)
Erläuterung: 'Gesamt netto'
ist ein Feldname in Ihrer Datenbank.
"(MwSt. nicht enthalten)"
ist einfach ein Text, der dem Betrag angehängt wird.
.
Mit einem Punkt greifen Sie auf Felder von Datensätzen oder auf Werte von JSON-Objekten zu.
Mit (select Kunden).Kundennummer
greifen Sie zum Beispiel auf alle Kundennummern der Tabelle Kunden zu.
--- ---
Eine Alternative zu doppelten Anführungszeichen (s.o.) sind 3 Minuszeichen. Das kann dabei helfen, dynamischen Text übersichtlicher zu gestalten.
---Hello world!---
=> Hello world!
Auf den folgenden Seiten geben wir Ihnen eine Einführung zum Skript schreiben mit Ninox
Die Ninox-Skriptsprache (auch: „NX-Skriptsprache” oder „NX-Skript”) ist dafür da, einfache, sich vielfach wiederholende Vorgänge, aber auch komplexe Arbeitssequenzen zu automatisieren, um Sie so optimal bei Ihren Arbeitsabläufen zu unterstützen.
Wir werden dabei im Folgenden nicht zwischen Funktionen und Prozeduren unterscheiden.
Eine Funktion liefert auf Basis der Werte der Parameter ein bestimmtes Ergebnis.
Eine Prozedur führt eine Reihe von aufeinander folgenden Einzelaktionen aus.
Bereit? Los geht's ...
Wenn Sie Texte personalisieren möchten, also zum Beispiel ein an sich gleiches Schreiben wie eine Rechnung an viele Empfänger mit den entsprechenden anderen Daten schicken möchten, geht das einfacher mit dynamischen Texten (Geburtstagsgruß).
Um Texte per Skript dynamisch zu gestalten, haben Sie 2 Möglichkeiten:
einfache Strings und Felder mit dem Plus-Operator +
verbinden
Template-Strings mit Werten innerhalb geschweifter Klammer {...}
Ketten Sie mit dem +
-Operator einfache Strings aneinander. Dabei könne Sie über +
jeden beliebigen Datentypen einbinden, z.B. Zahlen.
Mindestens einer der Datentypen muss ein String sein, damit wieder ein String dabei herauskommt.
Legen Sie in einer Tabelle ein Feld Vorname an und fügen Sie folgenden Inhalt in ein Formel-Feld ein.
Ergebnis: Hallo Sam! (falls im Feld Vorname der Wert Sam enthalten ist)
Template-Strings werden durch ein 3 Minuszeichen ---
am Anfang und Ende gekennzeichnet. Alles dazwischen wird zu einem Text.
Dabei können Sie innerhalb von geschweiften Klammern {...}
Skripte einfügen, z.B. wenn Sie einen Serienbrief schreiben möchten, der sich jeweils die entsprechenden Daten, wie Vor- und Nachname, Anschrift etc., aus einer Tabelle holt.
Das gleiche Beispiel wie oben, aber mit einem Template-String.
Ergebnis: Hallo Sam! (falls im Feld Vorname der Wert Sam enthalten ist)
Eine Übersicht aller grundlegenden Features, die der Formel-Editor ab Version 3.6 bietet
Derzeit sind die neuen Features des Formel-Editors sowohl für die Web-App (app.ninox.com) als auch für die Mac-App verfügbar.
Zeilennummern werden am linken Rand des Formel-Editor-Fensters angezeigt.
Zeilennummern werden standardmäßig angezeigt.
Rückt einen Code-Block automatisch ein.
Nimmt Ihren Code und „verschönert” ihn, damit er einem konsistenten Stil entspricht. Umschließt den Code und fügt bei Bedarf Leerzeichen hinzu oder entfernt diese.
Rufen Sie den Formel-Editor auf, um bereits vorhandenen Code zu formatieren, und klicken Sie auf OK, um den Editor zu verlassen. Wenn Sie den Formel-Editor das nächste Mal öffnen, erscheint dieser Code neu formatiert.
Während der Eingabe erscheint neben dem Mauszeiger ein Pop-up mit Vorschlägen zur Vervollständigung des Skripts.
Um die erste Option aus der Liste auszuwählen, drücken Sie die ENTER
-Taste.
Um eine andere Option auszuwählen, verwenden Sie die Pfeiltasten und bestätigen Sie Ihre Auswahl mit der ENTER
-Taste.
Während der Eingabe wird der Text in verschiedenen Farben hervorgehoben.
String (Text)
Keyword
Funktion
Eingebauter Wert
Variable/Tabelle/Feld
Operator
Zahl
Datentyp
Geben Sie einen Ausdruck ein, um die Syntax-Hervorhebung auszulösen.
Die aktuelle Position des geschriebenen Codes wird oberhalb des Inhalts des Formel-Editors angezeigt.
Die Position wird automatisch angezeigt.
Zeigt Fehler und Warnungen an, während Sie Skript schreiben, und schlägt Korrekturen vor.
Während der Eingabe werden die Zeilen mit fehlerhaftem Code rot hervorgehoben und der Code selbst wird rot unterstrichen. Um die Fehlermeldung anzuzeigen, bewegen Sie den Mauszeiger über die Zeilennummer.
Wenn Sie einen Syntaxfehler machen, hebt der Formel-Editor nur den ersten Fehler hervor, auch wenn weitere Syntax-Fehler auf diesen ersten Fehler folgen. Dies geschieht, weil das folgende Skript aufgrund des vorangegangenen Syntax-Fehlers nicht geparst werden kann.
Wenn Sie einen Verweis-Fehler machen, hebt der Formel-Editor jeden Fehler unabhängig von seiner Position im Skript hervor.
Wenn also ein Syntax-Fehler einem Verweis-Fehler vorausgeht, wird nur der vorangehende Syntax-Fehler hervorgehoben.
Suchen und ersetzen Sie Text, Variablen und Ausdrücke innerhalb eines Code-Blocks. Funktioniert für
Ganzes Wort suchen
,
Groß-/Kleinschreibung suchen
sowie
Regulären Ausdruck verwenden
.
Geben Sie zum Suchen Text in die Suchleiste ein oder drücken Sie CMD+F
(macOS) bzw. Strg+F
(Windows).
Hebt die zugehörigen Klammern hervor und vervollständigt offene Klammern automatisch.
Um eine zugehörige Klammer zu finden, verwenden Sie die Pfeiltasten, um eine Klammer auszuwählen und ihr Gegenstück hervorzuheben. Um Klammern automatisch zu vervollständigen, geben Sie eine offene Klammer ein.
Hier werden 2 Werte miteinander verglichen
Hiermit können Sie 2 numerische Werte vergleichen. Die Operatoren liefern ein Ergebnis, das entweder wahr oder falsch ist. Die Ausgabe im Feld lautet bei Ninox Ja (true
) oder Nein (false
).
=
gleich
1 + 1 = 3 - 1
Äpfel = Birnen
!=
ist ungleich
Äpfel != Birnen
1 + 1 != 3 - 1
<
kleiner als
4 * 2 < 10
10 < 4 * 2
<=
kleiner gleich
5 * 2 <= 10
10 <= 4 * 2
>
größer als
10 > 4 * 2
4 * 2 > 10
>=
größer gleich
5 * 2 >= 10
4 * 2 >= 10
like
enthält
"Hello" like "el"
"el" like "Hello"
if ... then ... else ... end
Mit if ... then ... else ... end
legen Sie eine „Wenn ... dann ... sonst“-Bedingung fest, die Ninox prüfen lässt, ob eine Sequenz von Anweisungen ausgeführt werden soll (Wenn ... dann ...) bzw. was passieren soll, wenn die Eingangsbedingung nicht erfüllt wird (... sonst ...).
Die If-Bedingung muss ein Ausdruck sein, der entweder richtig (true
/Ja) oder falsch (false
/Nein) ist.
Hierzu eignen sich u.a. auch die Verwendung von Vergleichsoperatoren, wie größer als (>=
), kleiner als (<=
) oder gleich (=
).
Je nachdem wie das Ergebnis des Vergleichs ausfällt, wird das weitere Vorgehen festgelegt.
Erstellen Sie ein Feld Betrag (Feldtyp Zahl), geben Sie folgendes Skript in ein Formel-Feld ein und variieren Sie den Wert in Betrag:
Ergebnis: Wenn der im Feld Betrag eingegebene Wert größer oder gleich 30 € ist, wird mit Karte bezahlt, ansonsten wird bar bezahlt.
Sie müssen keine alternative Sequenz, also kein else
festlegen. Das heißt, eine Anweisung wird entweder ausgeführt oder eben nicht.
Ergebnis: zahlungsart
wird standardmäßig auf „Bar“ gesetzt. Wenn der Wert im Zahlenfeld Betrag aber größer als 30 € ist, wird der Wert für zahlungsart
auf „Karte“ aktualisiert.
Sie möchten das Thema vertiefen? Schauen Sie sich dazu den entsprechenden Abschnitt in unserem an.
Mit null
prüfen Sie, ob ein Datenfeld leer ist. Daher steht null
also nicht für 0, sondern für leer. In Kombination mit einer Verzweigung können Sie so auch ein Skript ausführen, falls ein Feld leer ist.
Ergebnis: Falls das Feld Betrag leer ist, wird eine Aufforderung zur Eingabe ("Bitte geben Sie einen Betrag ein!"
) angezeigt.
let
Mit let
erstellen Sie eine neue Variable, der Sie dann über :=
einen Wert zuweisen.
Der Name der Variable darf dabei kein sein. let let
ist zum Beispiel „verboten“ .
Ergebnis: Hallo Sam! (Wenn aus dem Feld Vorname der Name Sam gezogen wird)
Sie können statt let
auch var
verwenden, um eine Variable zu deklarieren. Wir empfehlen die Verwendung let
. Einfach so. var
ist einfach ein bisschen veraltet.
Die Version 3.11 von Ninox führt „Erstellbar wenn” und „Löschbar wenn” ein – erstellen Sie Bedingungen zum Erstellen und Löschen von Datensätzen im Formel-Editor
Erstellbar wenn und Löschbar wenn sind für alle Apps (Web-App, iPhone/iPad, Mac, Android) verfügbar.
In sind die Funktionen isAdminMode()
, clientLang()
und userLang()
hauptsächlich für die clientseitige Verwendung gedacht. Wenn Sie diese mit Erstellbar wenn und Löschbar wenn verwenden, liefern die Funktionen falsche Ergebnisse, weil sie sich auf clientseitige Daten verlassen, die für serverseitige Prozesse nicht verfügbar sind.
Bedingte Datenverwaltung
Erstellbar wenn ermöglicht die Erstellung von Datensätzen nur unter bestimmten Bedingungen – für mehr Kontrolle darüber, wann Daten erzeugt werden.
Löschbar wenn verhindert, dass Datensätze versehentlich oder unbefugt gelöscht werden, sodass die Datensicherheit gewährleistet ist.
Bessere Compliance
Admins können Regeln anwenden, die bestimmte Aktionen einschränken, zum Beispiel das Löschen von gesendeten Rechnungen, um die Einhaltung von Richtlinien zu garantieren.
Gesteigerte Dateneffizienz
Admins können den Lebenszyklus von Datensätzen verwalten und so die Erstellung unnötiger oder doppelter Einträge vermeiden. Dies macht die Datenverarbeitung effizienter.
Größere Kontrolle über Arbeitsabläufe von Anwendern
Anwender können Datensätze nur unter bestimmten Bedingungen oder durch bestimmte Aktionen erstellen oder löschen – das ermöglicht eine bessere Kontrolle der Benutzer-Aktivitäten.
Einfachere Automatisierung von Arbeitsabläufen
Teile des Arbeitsablaufs, wie das automatische Erstellen oder Löschen von Datensätzen, wenn bestimmte Kriterien erfüllt sind, im Sinne der Effizienz optimiert.
Erstellbar wenn und Löschbar wenn bieten einen feineren Ansatz für die Datenverwaltung im Formel-Editor. Im Gegensatz dazu können Sie mit den vorherigen Methoden Datensätze erstellen und Datensätze löschen lediglich eine Rolle aus einem Drop-down-Menü auswählen.
Letzteres dient als Abkürzung, um das Anlegen und Löschen auf der Basis von Rollen zu managen. Mit Erstellbar wenn und Löschbar wenn können Sie genauere Bedingungen im Formel-Editor festlegen.
Legen Sie zunächst eine neue Datenbank an:
Gehen Sie zu Ihrem Arbeitsbereich und klicken Sie auf die Kachel Neue Datenbank.
Wählen Sie eine Datenbank-Vorlage aus:
Wählen Sie die Vorlage Angebote und Rechnungen aus der Liste.
Öffnen Sie Ihre Datenbank:
Sobald die Datenbank erstellt ist, öffnen Sie die Datenbank Angebote und Rechnungen.
Navigieren Sie zur Tabelle Rechnungen:
Suchen Sie innerhalb Ihrer Datenbank die Tabelle Rechnungen und klicken Sie darauf.
Bearbeiten Sie die Felder:
Legen Sie die Berechtigungen fest:
Klicken Sie im Einstellungs-Pop-up auf Erstellbar wenn oder Löschbar wenn (3), um Bedingungen festzulegen.
Konfigurieren Sie die Bedingungen:
Nutzen Sie den Formel-Editor, der sich öffnet, um Ihre Bedingungen gemäß den mitgelieferten Beispielen einzurichten.
Geben Sie im Formel-Editor userHasRole("Vorgesetzter")
ein. Das bedeutet, dass nur Anwender mit der Rolle Vorgesetzter Datensätze erstellen können.
Klicken Sie auf Speichern, um den Formel-Editor zu schließen.
Klicken Sie in den Tabellen-Einstellungen auf Speichern, um die Änderungen zu übernehmen.
Zum Testen, versuchen Sie einen Datensatz zu erstellen, indem Sie auf das Plus-Symbol klicken. Wenn Sie dazu nicht berechtigt sind, erscheint die Meldung You are not authorized for this action (Sie sind für diese Aktion nicht berechtigt) angezeigt.
Geben Sie im Formel-Editor Status = 1
ein. Das bedeutet, dass Datensätze mit dem Status Offen gelöscht werden können.
Klicken Sie auf Speichern, um den Formel-Editor zu schließen.
Klicken Sie in den Tabellen-Einstellungen auf Speichern, um die Änderungen zu übernehmen.
Zum Testen, versuchen Sie einen nicht als Offen markierten Datensatz zu löschen, indem Sie auf das Papierkorb-Symbol klicken. Nach der Bestätigung erscheint die Meldung You are not authorized for this action (Sie sind für diese Aktion nicht berechtigt).
if ... then ... else if | switch ... case
Durch Aneinanderketten von if-then-else-Blöcken können Sie eine Mehrfachverzweigung erstellen. Schreiben Sie hierfür nach else
erneut ein if
für eine weitere Bedingung und so weiter ... (je nach Bedarf).
Verwenden Sie wie im vorangegangen Beispiel wieder das Zahlenfeld Betrag und fügen Sie folgendes Skript in ein Formel-Feld ein:
Ergebnis: Im Formel-Feld erhalten Sie entsprechend der Eingabe die Antwort "Bar"
, "Karte"
oder "Bitte geben Sie einen Betrag ein!"
.
Mit switch ... case
können Sie komplizierte Mehrfachverzweigungen ersetzen. Sie können mit dieser Anweisung einen Wert (switch ...
) nach verschiedenen Ausprägungen (case ...:
) abfragen und einen Standardwert (default:
) festlegen, falls der Wert keiner dieser Ausprägungen entspricht.
Je nach Ergebnis ordnen Sie den nächsten Schritt entsprechend zu. Das ist sinnvoll, um tief verschachtelte if-Anweisungen zu umgehen.
Tipp: switch ... case
funktioniert am besten mit einem Auswahlfeld als abgefragten Wert.
Sie haben ein Auswahl-Feld Zahlungsart mit den Optionen:
Bar
Überweisung
Lastschrift
Fügen Sie folgendes Skript in ein Formel-Feld ein, um eine Info zur ausgewählten Zahlungsart einzublenden:
Ergebnis: Ausgehend von Ihrer Eingabe im Auswahl-Feld Zahlungsart ist genau einer der folgenden Infos in Ihrem Formel-Feld sichtbar:
Zahlungsart: Bar.
Zahlungsart: Überweisung. Erst ab 30 Euro.
Zahlungsart: Lastschrift. Unterschrift nicht vergessen!
Bitte wählen Sie eine Zahlungsart aus!
Hier zeigen wir Ihnen, wo genau Sie zaubern ... äh ... skripten können
Die Eingabe der Funktionen bzw. Prozeduren findet über den Formel-Editor in einem Formel-Feld (immer gekennzeichnet durch fx) statt.
Diese Felder sind die „Tür“ zum Formel-Editor. Wir haben hier ein paar Beispiele für Sie zusammengestellt.
Klicken Sie auf das Zahnrad-Symbol (1) und wählen Sie dann Felder bearbeiten (2), um die Tabellen-Einstellungen zu ändern.
Sie möchten das Thema vertiefen? Schauen Sie sich dazu den entsprechenden Abschnitt in unserem an.
create | delete
Um in einer bestimmten Tabelle einen Datensatz per Skript zu erstellen, geben Sie in einem Button einfach den entsprechenden Tabellennamen nach create
an.
Ergebnis: Ein neuer, aber leerer Datensatz in der Tabelle Kunden.
Um diesen neuen Datensatz dann gleich noch mit Daten zu füllen, speichern Sie den Ausdruck erst in einer Variable, um dann über die Variable auf die gewünschten Felder zuzugreifen.
Wir initialisieren die Variable neuerKunde
mit dem Ausdruck create Kunden
, um den Datensatz in der Variable zu speichern.
Danach greifen wir über den Punkt-Operator .
auf die Felder des neuen Datensatzes zu und geben dem neuen Datensatz eine eindeutige Kundennummer bestehend aus dem Buchstaben K
und einem UNIX-Zeitstempel.
Ergebnis: Ein neuer Datensatz in der Tabelle Kunden mit einer eindeutigen Kundennummer.
Löschen Sie Datensätze automatisch, indem Sie nach delete
spezifizieren, welche Datensätze gelöscht werden sollen.
Fügen Sie das folgende Skript in einen Button ein, um den aktuellen Datensatz zu löschen.
Dies ist nützlich, wenn Sie den Löschvorgang mit einer anderen Aktion verknüpfen möchten, zum Beispiel eine E-Mail auslösen, bevor der Datensatz entfernt wird.
Ergebnis: Der aktuelle Datensatz wird gelöscht.
Möchten Sie mehrere Datensätze löschen, verknüpfen Sie delete
mit select
.
Ergebnis: Alle Datensätze in der Tabelle Kunden mit dem Status 4
werden gelöscht.
for ... in ... do ... end | for ... from ... to ... do ... end | while ... do ... end
Mit einer Schleife können Sie einen Code-Block automatisch mehrmals hintereinander ausführen. Sie können zum Beispiel die Anweisungen eines Code-Blocks auf jedes Element eines Arrays anwenden.
Das ist die wichtigste Schleife, die Sie sich auf jeden Fall merken sollten. Sie wird Ihnen seeeeehr oft das Leben ein bisschen leichter machen.
Wählen Sie nach dem for
einen passenden Variablen-Namen für das jeweilige Element in der Liste aus, an der etwas geändert werden soll.
for
-Schleife ist wie folgt aufgebaut:Zeile 1: Das ist noch nicht Teil der Schleife, aber hilfreich, da besser lesbar: Wir speichern unsere Datensätze in einer Variablen.
Zeile 2: Die Schleife fängt an mit for
[es folgt eine Bezeichnung für ein einzelnes Element aus der zu durchlaufenden Liste] in
[es folgt die Liste] do
.
Zeile 3: Anweisung, was zu tun ist.
Zeile 4: end
Die Schleife wird beendet (Terminierung).
Sie möchten allen Kunden, die den Status 2
haben, einen neuen, den Status 1
geben. Dafür wählen Sie in der Tabelle Kunden (neu) die Kunden mit Status 2
aus. Dann weisen Sie jedem dieser Kunden (kunde
) den Status 1
zu.
Ergebnis: Allen Kunden, die den Status 2
haben, wird der Status 1
zugewiesen.
Diese Schleife eignet sich vor allem bei der Arbeit mit numerischen Werten, da anstelle eines Arrays eine Zahlenfolge verwendet wird, die von der Schleife durchlaufen wird.
Bei jedem Durchgang wird zu der Schleifenvariablen 1
addiert (Inkrement = 1
). Es fängt dabei mit dem Wert nach from
(inklusive) und hört vor dem Wert nach to
(exklusive).
Ergebnis: 60
Die Werte des Arrays mit den Indizes 0
, 1
und 2
werden addiert. 10
+ 20
+ 30
= 60
.
Durch step
kann man die Höhe des Inkrements ändern.
Ergebnis: 50
Die Werte des Arrays mit den Indizes 0
, 2
und 4
werden addiert. 10
+ 30
+ 10
= 50
.
for i in range(0, 10)
ist das Äquivalent zu for i from 0 to 10.
Diese Schleife wird so lange ausgeführt, bis die Bedingung nach while
nicht mehr erfüllt ist.
Dafür deklarieren Sie zum Beispiel eine Zählervariable, die bei jedem Schleifendurchgang inkrementiert wird, bis die Bedingung nicht mehr stimmt. Die Bedingung stimmt so lange (true
) die Variable kleiner als ein festgelegter Wert ist.
Ergebnis: 0 1 2 3 4 5 6 7 8 9
In den meisten Fällen ist for ... in ... do ... end
die beste Wahl.
do as transaction ... end | do as server ... end | do as deferred ... end
Ninox führt Skripte im permanenten Austausch zwischen Browser bzw. App und dem Server aus. Im Regelfall ist das in Ordnung, da der Austausch schnell genug ist, um ein Skript zügig abzuarbeiten.
In manchen Fällen können Sie die Performance Ihrer Skripte jedoch dahingehend weiter optimieren, indem Sie Anweisungen in spezielle Code-Blöcke setzen.
Mehr zu Tipps und Tricks für schnelle Datenbanken.
Um sicher zu sein, dass Skripte innerhalb derselben Transaktion ausgeführt werden, verwenden Sie am besten do as transaction
.
do as transaction
wurde insbesondere für die mobilen Apps (iPhone, iPad, Android) und Desktop-App (Mac) entwickelt, um sicherzustellen, dass Skripte auch lokal verarbeitet werden können. Das ist zum Beispiel der Fall, wenn die Internet-Verbindung unterbrochen ist.
Wenn Sie do as transaction
in der Web-App verwenden, wird das Skript immer auf dem Server ausgeführt.
Die Verschachtelung von Schleifen- und select
-Befehlen ist in der Regel sehr performance-lastig, daher empfehlen wir solche Skripte in einen do as transaction
-Block einzusetzen, um den Vorgang zu beschleunigen.
Sollte es warum auch immer zu Problemen bei der Ausführung des Skriptes kommen, wird die Transaktion verworfen, d.h. eine Transaktion wird entweder komplett ausgeführt oder gar nicht.
Mehr zu Transaktionen.
Wir weisen dem Feld Ansprechpartner in jedem Datensatz der Tabelle Firmen einen Ansprechpartner aus der Tabelle Ansprechpartner mit passender ID zu. Der ganze Vorgang wird innerhalb von do as transaction
ausgeführt.
Ergebnis: Alle Datensätze in der Tabelle Firmen wurden innerhalb einer Transaktion mit einem Eintrag aus der Tabelle Ansprechpartner verlinkt.
Manchmal kann es vorteilhaft sein, einen Teil Ihres Skripts erst vollständig auf dem Server auszuführen, bevor es zurück an Ihren Rechner bzw. Ihre App geschickt wird.
do as server
sollte nicht in Triggern benutzt werden, da Trigger im Browser immer serverseitig und in der App immer lokal ausgeführt werden. Verwenden Sie daher do as server
am besten in Buttons.
do as server
wird meistens in Verbindung mit der Funktion http()
verbunden, um API-Calls zuerst serverseitig auszuführen. Damit wird die CORS-Richtlinie (Cross-origin resource sharing) der Browser umgangen, die ansonsten den http
-Aufruf blockieren würde. Anschließend erhalten Sie die angeforderten Daten vom Server.
Mehr zu API-Calls (im Moment nur auf Englisch).
Manche Funktionen können nicht serverseitig ausgeführt werden, da Sie mit Ihrem Browser bzw. mit Ihrer App zusammenhängen, z. B. alert()
.
Sie möchten in einer Datenbank Daten aus einer Ninox-Tabelle erhalten. Dazu schicken Sie über einen API-Call einen GET
-Request an die entsprechende Ninox-Datenbank. Mit dem Punkt-Operator .
greifen Sie auf Werte der Response zu.
Ergebnis: Hier wird der result
-Wert der response
zurückgegeben, der in diesem Fall aus nur 1 Datensatz und der in den einzelnen Feldern enthaltenen Informationen besteht.
Normalerweise führt Ninox schreibende Transaktionen der Reihe nach aus.
Tipp: Machen Sie sich mit dem Unterschied zwischen lesenden und schreibenden Transaktionen vertraut.
Es kann dabei vorkommen, dass manche dieser schreibenden Transaktionen mehr Zeit beanspruchen und nachfolgende Transaktionen daher etwas warten müssen. Dies kann dazu führen, dass sich Ninox unerwünschter Weise verlangsamt.
Sie können mit der Anweisung do as deferred
dafür sorgen, dass lesende Anweisungen innerhalb einer schreibenden Transaktion in eine eigene (lesende) Transaktion ausgegliedert werden. Dies kann damit im Hintergrund ausgeführt werden.
Wenn Sie zum Beispiel die Daten einer großen Tabelle ändern, kann dies statt einiger Millisekunden mehrere Sekunden dauern. Nachgelagerte Anweisungen müssten dann jeweils so lange warten, bis alle Daten vollständig geändert wurden.
Mit do as deferred
kann die Abarbeitung von Anweisungen beschleunigt werden, da Anweisungen, die zwischen do as deferred
und end
stehen, gesondert abgearbeitet werden und somit andere Prozesse nicht behindern.
Eine Status-Änderung mit einer dadurch ausgelösten E-Mail kann wie folgt optimiert werden:
Sie setzen ein Feld Status = 3
. Dadurch löst der im Status-Feld hinterlegte Trigger nach Änderung (s. Code-Block) folgende Anweisungen aus:
das Feld versendet am wird auf das heutige Datum gesetzt
eine E-Mail wird mit einer Zahlungsaufforderung versendet. Dieser Teil wird separat ausgeführt.
Ergebnis: Alle Datensätze, deren Status auf 3
gesetzt wurde, haben das heutige Datum im Feld versendet am hinterlegt. In einer herausgelösten Transaktion wurde außerdem eine E-Mail mit einer Zahlungsaufforderung an alle Datensätze mit dem Status 3
versendet.
order by
Mit order by
sortieren Sie einen Array aus Datensätzen nach einem bestimmten Feld. Das ist hilfreich, wenn Sie einen Array, bevor Sie ihn weiterverarbeiten, zuerst sortieren möchten.
Wenn Sie order by
in einem Layout-Element Ansicht verwenden, dann wird dieses erst nach einem (ausgewählten) Spaltenkopf sortiert und anschließend über den nach order by
angegebenen Wert.
Ergebnis: Die Einträge der Tabelle Rechnungen werden nach dem Feld Summe sortiert (von klein nach groß).
Sie können die Auswahl der Datensätze mit where
oder eckigen Klammern [...]
einschränken.
Der Wert nach order by
muss dabei nicht zwingend nur ein Feldname sein, Sie können ihn zum Beispiel auch durch Funktionen manipulieren.
Ergebnis: Die Einträge mit heutigem Datum der Tabelle Rechnungen werden nach der Zahl im Text-Feld Rechnungs-Nr. sortiert.
Die 3
verweist auf die Position der Zahl innerhalb der Rechnungs-Nr., die bei uns zum Beispiel an der 4. Stelle beginnt: RE-12574
(0
=R
, 1
=E
, 2
=-
, 3
=1
(die erste Zahl)).
Am besten funktioniert order by
wenn man Datensätze anhand einer Zahl sortiert.
Vorsicht beim Sortieren von Strings. Strings werden nicht alphabetisch, sondern nach dem Index der Zeichen sortiert. So werden zuerst alle Großbuchstaben alphabetisch sortiert, anschließend die Kleinbuchstaben.
ABcD wird also zu ABDc sortiert.
Um das gewünschte Ergebnis zu erhalten, vereinheitlichen Sie die Werte einfach durch upper()
oder lower()
. Dann werden die Anfangsbuchstaben zuerst alle einheitlich auf Großbuchstaben bzw. Kleinbuchstaben gesetzt.
Ergebnis: ABcD
Alternative: Verwenden Sie statt order by
die Ninox-Funktion sort()
.
Sie haben eine Tabelle Beispiel für order by mit einem Feld Vornamen. Darin enthalten sind folgende Datensätze: Aaron, Eddi, conrad, beate, Dahlia, and Fatima. Fügen Sie folgendes Skript in ein Formel-Feld ein.
Ergebnis: Aaron, Dahlia, Eddi, Fatima, beate, conrad
Das ist nicht die gewünschte alphabetische Sortierung ...
Wir ergänzen upper()
, was alle Einträge zum Sortieren in Großbuchstaben setzt.
Brauchen Sie nur die Liste der Namen und nicht die Datensätze selbst, dann empfehlen wir Ihnen die Anwendung von sort()
:
Ergebnis: Aaron, beate, conrad, Dahlia, Eddi, Fatima
select ... where
Mit select
können Sie innerhalb einer Datenbank über ein Skript auf jeden Datensatz einer beliebigen Tabelle zugreifen.
Setzen Sie hierfür nach dem select
-Befehl den Namen der Tabelle ein, aus der Sie Datensätze ziehen möchten.
Setzen Sie folgendes Skript in den Optionen einer eingebetteten Tabellen-Ansicht unter Formel ein, um alle Datensätze der Tabelle Kunden (neu) anzuzeigen.
Ergebnis: In einer eingebetteten Tabelle werden alle Datensätze der Tabelle Kunden (neu) angezeigt.
Um nicht alle Datensätze einer Tabelle anzuzeigen, können Sie mit select ... where
die Auswahl einschränken. Angezeigt werden dann nur die Datensätze, die die Bedingung nach where
erfüllen.
Sie haben in der Tabelle Kunden ein Auswahl-Feld Firmensitz, in dem die IDs der Auswahl-Werte
1
= Deutschland
2
= Österreich
3
= Schweiz
4
= Frankreich
5
= Spanien
6
= Italien
zugeordnet sind und möchten lediglich die DACH-Region anzeigen.
Ergebnis: In einer eingebetteten Tabelle werden die Datensätze der Tabelle Kunden (neu), die Ihren Firmensitz in 1
(Deutschland, 2
(Österreich) oder 3
(der Schweiz) haben, angezeigt.
Falls Sie in einem Feld- bzw. Tabellennamen Sonderzeichen, wie z.B. Leerzeichen, Bindestrich, Unterstrich etc., verwenden, fügen Sie den Namen bitte zwischen 2 einfachen Anführungszeichen ('...'
) ein.
... where
Sie können auch bereits ausgewählte Datensätze, also ein Array vom Typ [nid]
, weiter filtern, indem Sie nach dem Array die Bedingung, nach der zu filtern ist, in eckigen Klammern [...]
angeben.
Im Unterschied zu select ... where
werden hier erst alle Datensätze ausgewählt und anschließend wird gefiltert. Bei select ... where
werden nur die Datensätze ausgewählt, die die Bedingungen erfüllen.
Sie möchten das Thema vertiefen? Schauen Sie sich dazu den entsprechenden Abschnitt in unserem Video-Tutorial an.
function
Sie können bei Ninox auch eigene Funktionen erstellen, um Arbeitsabläufe nach Ihren Wünschen zu automatisieren.
Skript einmal schreiben und in der ganzen Datenbank verwenden
übersichtliche Skripte, da Sie lediglich Ihre selbsterstellte Funktion verwenden und nicht das komplette Skript (ggf. mehrfach) einsetzen müssen
Um eine Funktion zu definieren, verwenden Sie function
gefolgt von Ihrem gewählten Funktionsnamen. Anschließend geben Sie in Klammern an, welche Parameter verwendet werden sollen. Diese werden durch Kommata getrennt.
parameterName : parameterTyp
Wenn Sie eine Funktion ohne Parameter erstellen möchten, dann fügen Sie einfach eine leere Klammer ()
ein.
Wie auch bei Skripten ist die letzte Zeile in der Definition der Funktion der Rückgabewert.
Wenn Sie Ihre Funktion in der Tab-Leiste der Datenbank unter Optionen in Globale Funktionen eingeben, können Sie Ihre Funktionen in der gesamten Datenbank verwenden.
Optionen werden Ihnen nur angezeigt, wenn Sie im Bearbeitungsmodus sind.
Aktivieren Sie den Bearbeitungsmodus.
Klicken Sie auf Optionen.
Geben Sie unter Globale Funktionen Ihre Funktion(en) ein.
Fügen Sie die Funktion hingegen in einem Formel-Feld einer Tabelle ein, steht Ihre Funktion auch nur in diesem Formel-Feld zur Verfügung. Das kann sinnvoll sein, wenn Sie sich wiederholende Skript-Teile kompakt halten wollen oder Ihre Funktion dabei Bezug auf die jeweils aktuelle Tabelle nimmt.
Wir erstellen eine Funktion hallo
, die für uns eine Person begrüßt und ihr sagt, wie alt sie ist. Dazu übergeben wir der Funktion einen String für den Namen und eine Zahl für das Alter als Parameter. Diese Parameter werden in einen vorgegebenen Satz an passender Stelle eingesetzt.
Ergebnis: Hallo Mama. Du bist 100 Jahre alt!
Wenn Sie die Funktion wie folgt aufgerufen haben: hallo("Mama", 100)
name
text
alter
number
Zurzeit stehen leider noch nicht alle Datentypen zum Einsatz in einer benutzerdefinierten Funktion zur Verfügung.
Diese folgenden Datentypen stehen für die Erstellung benutzerdefinierter Funktionen bereits zur Verfügung.
text
entspricht dem Datentyp string
und steht für einfachen Text
"Mama"
number
ist eine Zahl
100
boolean
ist entweder wahr oder falsch
date
ist ein Datum
date(1922, 1, 13)
time
ist eine Zeit
time()
datetime
entspricht dem Datentyp timestamp
und steht für einen Zeitstempel
datetime(date(1922, 1, 13), time())
Tabellen-Name
entspricht einem Datensatz aus der angegebenen Tabelle
meinDatensatz : 'Tabelle 1'
Falls die Bedingung sich in keinem Durchgang auf false
setzt, besteht die Gefahr in einer Endlos-Schleife zu enden. Es könnte sein, dass Ninox dann explodiert.
Sie blockiert somit nicht die nachfolgenden Transaktionen und bietet einen Performance-Boost.
Ergebnis: Aaron, beate, conrad, Dahlia, Eddi, Fatima
Aufgrund der zu verarbeitenden Datenmenge und der damit verbundenen Verarbeitungszeit (Performance), empfehlen wir Ihnen die Verwendung von ... where
. Ist schneller.
"Mama" = "Mama"
"Mama" = "Papa"