Skripte in Beispielen¶
Dieser Bereich ist eine Beispielsammlung zum Mitmachen. Zu jedem Thema findest du mindestens 20 kleine Skripte — von ganz einfach bis zu Aufgaben aus dem echten Betrieb. Du musst nichts vorher wissen außer: Ein Skript ist eine kleine Anleitung, die KCForms Schritt für Schritt ausführt.
Die ausführliche Beschreibung jeder Funktion steht im Bereich Scripting. Hier geht es ums Ausprobieren.
Was sind eigentlich diese geschweiften Klammern?
Wenn dir Begriffe wie Variable, Objekt, Liste oder Schleife noch nichts sagen, fang hier an: JavaScript-Grundlagen und JSON und Objekte verstehen. Beide erklären in einfachen Worten, was in fast jedem Beispiel hier vorkommt.
Die Themen¶
| Thema | Worum es geht |
|---|---|
| Erste Schritte | Felder lesen und setzen, rechnen, Texte und Datumswerte, Fehler melden |
| Datenbank (SQL) | Zählen, suchen, einfügen, ändern — bis zur Transaktion |
| Datensätze (forms) | Formular-Datensätze per Skript anlegen, lesen, ändern, löschen |
| Verzeichnis (LDAP) | Benutzer prüfen, suchen, auslesen — bis zum Anlegen und Ändern |
| CSV-Dateien | Tabellen einlesen und schreiben, z. B. für Excel |
| Dateien (fs) | Dateien lesen, schreiben, auflisten, verschieben |
| Internet (HTTP) | Webseiten und Schnittstellen abfragen, Daten senden |
| XML und WebServices | XML lesen und bauen, SOAP-Dienste aufrufen |
| Mails schreiben, mit Anhang, als HTML, an viele Empfänger | |
| Dialoge und Meldungen | Fehler am Feld, Hinweise und Fragen im Formular anzeigen |
| PDF, ZIP und Word | Ausdrucke erzeugen, Dateien packen, Briefe füllen |
| Zeitgesteuerte Jobs | Aufgaben, die nachts oder stündlich laufen — Import, Aufräumen, Berichte |
| Workflow | beim Weiterleiten Felder setzen, prüfen, Mails schicken, exportieren, andere Programme benachrichtigen |
| REST-Services | eigene Schnittstellen für andere Programme |
Jede Seite ist gleich aufgebaut:
- Einsteiger — ein bis fünf Zeilen, eine Sache auf einmal.
- Fortgeschritten — mehrere Schritte, Schleifen, eigene Funktionen.
- Profi — so, wie man es im echten Betrieb baut: mit Fehlerbehandlung, Transaktionen und Aufräumen.
Wo probiere ich ein Beispiel aus?¶
Am schnellsten in der Skript-Konsole: System-Administration → Werkzeuge & Diagnose → Skript-Konsole. Beispiel hineinkopieren, Ausführen klicken, unten die Ausgabe lesen. Die Konsole bietet fast alle Werkzeuge; einige Beispiele (Dialoge, PDF des Formulars, Dateianlagen) brauchen dagegen ein Formular — dort steht es dann dabei.
In einem Formular gehört ein Skript in einen Hook: im Formular-Editor den
Reiter Skripte öffnen, einen Hook wählen (etwa onLoad beim Öffnen oder
eine Schaltfläche) und das Skript einfügen. Was welcher Hook tut, steht unter
Hooks und Reihenfolge.
Die Beispiele sind getestet
Jedes Beispiel auf diesen Seiten wird automatisch gegen ein echtes
KCForms ausgeführt. Wenn eines bei dir nicht läuft, liegt es meist an
Namen, die bei dir anders heißen: Formularfelder (name, betrag …),
Tabellen, der LDAP-Konnektor kcads oder Dateipfade. Passe sie an.
Fünf Dinge, die du immer brauchst¶
1. Etwas ausgeben — log.info(...) schreibt eine Zeile ins Protokoll.
In der Skript-Konsole siehst du sie sofort unten.
2. Ein Formularfeld lesen und setzen — alle Felder stehen in
ctx.form.
3. Mit Zahlen rechnen — Felder kommen als Text an. .num am Feld
macht daraus eine Zahl. (Für Werte, die nicht aus einem Feld kommen — aus der
Datenbank, aus einer CSV-Datei, aus einer Detail-Zeile — heißt dasselbe
kc.num(...).)
4. Eine Entscheidung treffen — mit if.
5. Einen Fehler abfangen — try … catch verhindert, dass ein Problem
das ganze Skript abbricht.
try {
var zeile = db.queryOne("SELECT * FROM gibt_es_nicht");
} catch (e) {
log.warn("Das ging schief: " + e.message);
}
Häufige Stolpersteine¶
| Problem | Lösung |
|---|---|
"3" + "4" ergibt "34" |
Feldwerte mit .num in Zahlen umwandeln ($betrag.num); sonst kc.num(...) |
Betrag steht englisch da (1234.50 €) |
.toFixed(2) kennt nur den Punkt. $betrag.numFormat(null, "€", 0, 2, ",", ".", 3) liefert 1.234,50 € — Beschreibung |
| Groß-/Kleinschreibung | JavaScript unterscheidet Name und name; Tabellennamen je nach Datenbank auch (USERS ≠ users) |
JSON.stringify(zeile) zeigt {} |
Datenbankzeilen sind Java-Objekte. Werte einzeln lesen (zeile.name) oder mit for (var k in zeile) durchgehen — Erklärung |
| Skript bricht nach 6 Sekunden ab | Das Zeitlimit schützt den Server. Große Mengen in kleinen Portionen oder als Job verarbeiten |
Tabelle heißt wie ein SQL-Wort (GROUPS, ORDER …) |
Namen in Backticks setzen: SELECT * FROM `GROUPS` (MySQL) |
return außerhalb einer Funktion |
ist erlaubt und beendet das Skript — return false bricht in onBeforeSave das Speichern ab |