System-Administration im Überblick¶
Die System-Administration erreichst du über das Zahnrad oben rechts →
System-Administration. Mitglieder der Gruppe ADMIN sehen alles.
Wer nur einzelne Verwaltungsrechte hat — etwa USER_MANAGE oder
PROPERTIES —, sieht genau die Bereiche, die dazu gehören
(siehe Benutzer & Gruppen).
Links steht die Navigation, nach Themen gruppiert; das Feld Bereich suchen … darüber filtert die Einträge. Zurück zur Anwendung führt zur Formularliste, Formular-Editor ganz unten öffnet den Editor.
Formular-Konfiguration¶
| Eintrag | Wofür | Mehr dazu |
|---|---|---|
| Properties | Konfigurationswerte für Formulare (Adressen, Grenzwerte, Textbausteine), auch von KeyUsern pflegbar | Properties |
| Standardwerte für Felder | wie viele Zeichen ein neues Textfeld je nach Breite fasst | Standardwerte für Felder |
Benutzer & Zugang¶
| Eintrag | Wofür | Mehr dazu |
|---|---|---|
| Benutzerverwaltung | Benutzer anlegen, bearbeiten, sperren, löschen; Gruppen zuordnen | Benutzer & Gruppen |
| Gruppenverwaltung | Gruppen, Mitglieder und die Berechtigungen einer Gruppe | Benutzer & Gruppen |
| Berechtigungen | Berechtigungs-Codes anlegen und beschreiben | Benutzer & Gruppen |
| Anmeldung | Anmelde-Strategie, Anmelde-Skripte, Test-Login, Login-Hinweis | Anmeldung |
| Sitzungs-Zeitablauf | Wann eine Anmeldung von selbst endet: Leerlauf, längste Dauer, Vorwarnung | Sitzungs-Zeitablauf |
| OIDC (Entra ID, AD FS, BankID-Broker) | Anmeldung über einen OpenID-Connect-Anbieter, auch Windows-Anmeldung | Anmeldung |
Erscheinungsbild¶
| Eintrag | Wofür | Mehr dazu |
|---|---|---|
| Theme | Farben, Schriften, eigenes CSS, Bilder und SVGs | Theme |
| Sprachen | Oberflächen-Sprachen anlegen und übersetzen | Sprachen |
| Startseite | Titel und Text der Willkommensbox auf der Startseite, je Sprache; Makros wie ${user:firstName} werden ersetzt |
unten |
Formular-Bausteine¶
| Eintrag | Wofür | Mehr dazu |
|---|---|---|
| Baukasten | Ordner und Vorlagen des Baukastens im Formular-Editor pflegen; mitgelieferte Einträge lassen sich nur deaktivieren | Baukasten |
| Druckvorlagen | Kopf- und Fußzeilen für den PDF-Druck, je Vorlage mit eigener Schrift | Druck |
| Section-Repository | zentrale Feldgruppen, die mehrere Formulare live einbinden | Section-Repository |
| Skript-Bibliotheken | gemeinsamer Skript-Code in der Datenbank | Skript-Bibliotheken |
| Datei-Bibliotheken | gemeinsamer Skript-Code als .js-Dateien |
Datei-Bibliotheken |
| Skript-Module | Java-Routinen aus eigenen JAR-Dateien freigeben, die Skripte über modules.use(...) benutzen |
Skript-Module |
| Beispiele | mitgelieferte Beispielformulare einzeln einspielen und wieder entfernen | unten |
Schnittstellen & Verteilung¶
| Eintrag | Wofür | Mehr dazu |
|---|---|---|
| LDAP-Konnektoren | Verbindungen zu LDAP/Active Directory; je Konnektor der Benutzer-Export | LDAP-Konnektoren, LDAP-Benutzer-Export |
| LDAP-Browser | Verzeichnisbaum ab der Basis-DN durchsuchen; ein Klick zeigt die Attribute eines Eintrags | unten |
| LDAP-Test-Client | direkte Abfragen gegen einen Konnektor, um Basis-DN, Filter und Suchtiefe auszuprobieren | unten |
| HTTP-/WebService-Konnektoren | benannte Endpunkte mit Zugangsdaten für ws/http und die Allowlist für interne Ziele |
HTTP-/WebService-Konnektoren |
| Datenquellen | externe Datenbanken für Lookups, Picker und Skripte | Datenquellen |
| E-Mail-Konfiguration | Mailserver, Absender, Testmail, Empfänger-Whitelist | E-Mail-Konfiguration |
| E-Mail-Ausgang | Warteschlange der ausgehenden Mails | E-Mail-Ausgang |
| REST-Services | eigene, per JavaScript programmierte Schnittstellen | REST-Services |
| Web-Links | Links, die ein Formular direkt öffnen | Web-Links |
| Transport | Formulare zwischen Systemen übertragen | Transport |
Betrieb & Überwachung¶
| Eintrag | Wofür | Mehr dazu |
|---|---|---|
| System-Informationen | Version, Java, Datenbank, Betriebssystem, Speicher, aktive Sitzungen | unten |
| System-Einstellungen | Standard-Absender, öffentliche Basis-URL, System-Id, Zeitzone, Ad-hoc-Anmeldung, Anzeigeoptionen | System-Einstellungen |
| Wartungsfenster | geplante Wartung ankündigen, Anwendung sperren | Wartungsfenster |
| Zeitplaner | zeitgesteuerte Skripte | Zeitplaner |
| Log-Konfiguration | Protokoll-Stufen einzelner Bereiche und die Logback-Konfiguration | unten |
| System-Logs | Protokolldateien ansehen | unten |
| Signatur-Sicherung | Schlüssel, mit dem Unterschriften versiegelt werden | unten |
Werkzeuge & Diagnose¶
| Eintrag | Wofür | Mehr dazu |
|---|---|---|
| Skript-Konsole | JavaScript ohne Formular ausführen, Skripte speichern, mit Test-Daten und Anlagen | Skript-Konsole |
| DB-Client | SQL direkt gegen die KCForms-Datenbank oder eine Datenquelle | DB-Client |
Bereiche ohne eigene Seite¶
Startseite¶
Hier pflegen Sie Titel und Text der Willkommensbox, die Anwender auf der Startseite über dem Formular-Katalog sehen. Oben wählen Sie die Sprache; ein Punkt ● in der Auswahl zeigt, für welche Sprachen schon ein Text gepflegt ist. Bleibt eine Sprache leer, erscheint dort der Standardtext von KCForms.
Der Text ist Markdown, also **fett**, Listen mit - und Links mit
[Text](https://…). Makros setzt KCForms beim Anzeigen ein. Die Seite
listet die gebräuchlichsten zum Anklicken auf, etwa:
${user:firstName}: Vorname des angemeldeten Anwenders${user:name}: Vor- und Nachname${date(dd.MM.yyyy)|now}: heutiges Datum, z. B. 15.08.2026${system:release}: Version von KCForms
Ein Titel wie Willkommen, ${user:firstName}! begrüßt also jeden mit
Namen. Alle Makros stehen unter Makros.
Beispiele¶
KCForms bringt eine Reihe von Beispielformularen mit, von der Urlaubsantrag-Demo mit Workflow bis zu Formularen, die einzelne Skript-Funktionen vorführen. Eine ausgelieferte Installation startet ohne sie. Hier spielen Sie einzelne ein, wieder ein oder entfernen sie.
Die Liste zeigt je Beispiel einen Punkt (grün = installiert), den Titel und die Formular-IDs, die es anlegt. Die Knöpfe:
| Knopf | Wirkung |
|---|---|
| Einspielen | legt das Beispiel samt Tabellen, Skripten und Demo-Daten an |
| Neu einspielen | setzt ein installiertes Beispiel auf den Auslieferungsstand zurück; eigene Änderungen und Demo-Daten darin gehen verloren |
| Entfernen | löscht die Formulare des Beispiels mit Tabellen, Datensätzen und Skripten |
| Alle einspielen / Alle entfernen | dasselbe für alle Beispiele auf einmal |
Neu einspielen fragt nicht nach
Entfernen und Alle entfernen fragen vorher nach und löschen dann endgültig. Neu einspielen und Alle einspielen fragen nicht: Wer ein Beispiel angepasst hat, verliert diese Änderungen mit einem Klick. Auf einem Produktivsystem spielen Sie höchstens die Beispiele ein, die Sie wirklich brauchen.
LDAP-Konnektoren¶
Ein Konnektor beschreibt die Verbindung zu einem Verzeichnis (LDAP oder
Active Directory). Skripte sprechen ihn über seine ID an
(ldap.connect("firmen-ldap")), Lookups
und Picker wählen ihn als Datenquelle aus, und die
Anmeldung kann gegen ihn prüfen.
| Feld | Eintrag |
|---|---|
| ID | Name, unter dem Skripte und Lookups den Konnektor finden, z. B. firmen-ldap |
| Verbindungs-URL | ldap://host:389 oder verschlüsselt ldaps://host:636 |
| Basis-DN | Standard-Startpunkt für Suchen, z. B. dc=firma,dc=de |
| Authentifizierung | Einfach (Bind-DN und Passwort) oder Keine (anonym) |
| Benutzername (Bind-DN) / Passwort | das Konto, mit dem KCForms sich anmeldet |
| Umgang mit SSL-Zertifikaten | Standard: nur Zertifikate, denen Java vertraut. Allen vertrauen: auch selbstsignierte, nur für Tests |
| Seitengröße | holt große Ergebnisse in Seiten dieser Größe. Active Directory liefert ohne das höchstens 1000 Einträge je Suche. Leer = aus |
Verbindung prüfen meldet sich mit den eingetragenen Werten an und sagt, ob es geklappt hat.
Unter dem Konnektor richten Sie den Benutzer-Export ein, der Benutzer und Gruppen regelmäßig in Tabellen spiegelt, siehe LDAP-Benutzer-Export.
Nur lesender Service-Account
Für Suche, Lookups und Export genügt ein Konto mit Leserechten. Einen schreibberechtigten Bind-Benutzer nur hinterlegen, wenn Skripte wirklich Einträge anlegen oder ändern sollen.
LDAP-Browser und LDAP-Test-Client¶
Zwei Werkzeuge, um ein Verzeichnis kennenzulernen, bevor Sie Filter in Skripte oder Lookups schreiben. Beide arbeiten über einen eingerichteten Konnektor und nur lesend.
LDAP-Browser zeigt das Verzeichnis als Baum ab der Basis-DN. Ein Klick auf ▸ klappt einen Zweig auf, ein Klick auf den Namen zeigt rechts alle Attribute des Eintrags. Bei sehr großen Zweigen kürzt der Browser die Liste und sagt es dazu; dann das Limit erhöhen.
LDAP-Test-Client führt eine Suche aus, wie ein Skript sie stellen würde:
| Feld | Eintrag |
|---|---|
| Konnektor | welcher Konnektor |
| Basis-DN | Startpunkt; leer = die des Konnektors |
| Filter | LDAP-Filter, z. B. (&(objectClass=inetOrgPerson)(sn=Müller)). Drei Knöpfe setzen gängige Filter ein (alle Benutzer, alle Gruppen, alle Objekte) |
| Scope | subtree (ganzer Teilbaum), onelevel (nur direkte Kinder), object (nur der Startpunkt selbst) |
| Limit | höchstens so viele Treffer (1 bis 1000) |
Das Ergebnis zeigt je Treffer die DN und alle Attribute. Was hier passt, passt auch in ein Skript, siehe LDAP-Zugriff.
HTTP-/WebService-Konnektoren¶
Ein Konnektor bündelt Adresse und Zugangsdaten eines fremden Dienstes unter
einem Namen. Skripte nutzen ihn mit ws.connect("name") oder
http.connect("name"); Passwörter und Tokens stehen so nicht im Skript.
| Feld | Eintrag |
|---|---|
| Name | Name für die Skripte, z. B. rest-crm |
| Basis-URL | Adresse des Dienstes; der Pfad im Skript wird angehängt |
| Authentifizierung | Keine, Basic (Benutzer und Passwort), Bearer-Token oder WS-Security UsernameToken (für SOAP) |
| SOAP-Version | 1.1 oder 1.2, nur für SOAP-Dienste von Bedeutung |
| Standard-Header | Kopfzeilen, die jeder Aufruf mitschickt |
| Timeout (ms) | wie lange auf eine Antwort gewartet wird; leer = 60 Sekunden |
Verbindung prüfen ruft die Basis-URL auf, auf Wunsch mit einem
Test-Pfad dahinter (etwa /health), und zeigt das Ergebnis.
Gespeicherte Passwörter und Tokens zeigt die Maske nie im Klartext.
Oben auf der Seite stehen die Erlaubten Ziel-Hosts (Allowlist). Aufrufe
an interne Adressen (etwa localhost oder 10.…) sind grundsätzlich
gesperrt, damit ein Skript nicht unbemerkt in das eigene Netz greift. Was
hier steht, ist davon ausgenommen. Siehe
HTTP-Client → Sicherheit.
System-Informationen¶
Zeigt auf einen Blick: Anwendung (Name, Version), Laufzeit (Java-Version, Prozessoren, Laufzeit seit Start, Speicher), Datenbank (Produkt, Version, Treiber, Adresse, Verbindungspool), Betriebssystem (inkl. Zeitzone) und die Zahl der aktiven Sitzungen. Hilfreich bei Support-Anfragen.
Log-Konfiguration und System-Logs¶
Log-Konfiguration stellt die Protokoll-Stufe einzelner Bereiche um
(z. B. DEBUG für die Fehlersuche). Diese Änderungen wirken sofort, gelten
aber nur bis zum nächsten Neustart. Darunter lässt sich die
Logback-Konfiguration (logback-spring.xml) bearbeiten — etwa um zusätzliche
Logdateien anzulegen; auch das wirkt ohne Neustart.
System-Logs zeigt die Protokolldateien: die allgemeinen Logs und die
Skript-Protokolle je Benutzer (by-user/). Skript-Ausgaben von log.info(…)
landen in script.log bzw. der Datei des Benutzers, nicht in der
Docker-Konsole.
Signatur-Sicherung¶
KCForms versiegelt jede Unterschrift mit einem Schlüssel (HMAC-SHA256) über die geschützten Feldwerte. Der Schlüssel liegt in der Datenbank.
- Schlüssel anzeigen (für DB-Umzug) — zum Sichern bzw. Übertragen.
- Schlüssel importieren (nach Umzug) — auf dem neuen System einspielen.
- Neuen Schlüssel erzeugen — nur im Notfall (etwa wenn der Schlüssel bekannt geworden ist).
Schlüssel beim Umzug mitnehmen
Ohne den bisherigen Schlüssel meldet KCForms alle bestehenden Unterschriften als manipuliert. Das gilt ebenso nach Neuen Schlüssel erzeugen. Vor einem Datenbank-Umzug den Schlüssel sichern und auf dem neuen System importieren.
DB-Client¶
Führt SQL direkt aus: gegen die KCForms-Datenbank oder, über die Auswahl
Datenquelle, gegen eine eingerichtete
externe Datenquelle. Eine Anweisung je Lauf
(SELECT, INSERT, UPDATE, DELETE oder DDL), ausgeführt mit
Ausführen oder Ctrl+Enter.
Ein SELECT zeigt das Ergebnis als Tabelle, höchstens 500 Zeilen; mehr
schneidet der Client ab und sagt es dazu. Leere Werte stehen als NULL.
Drei Knöpfe setzen Beispielabfragen ein (Tabellen, Benutzer, Formulare).
Sie sind in MySQL-Schreibweise geschrieben. Auf PostgreSQL, Oracle oder
SQL Server passen Sie sie an; SHOW TABLES etwa gibt es dort nicht.
Änderungen sind sofort wirksam
Es gibt keine Rückfrage und kein Rückgängig. Für Änderungen an Formular-Tabellen besser den Formular-Editor bzw. Skripte mit Transaktion nutzen. Für Abfragen mit Logik drumherum eignet sich die Skript-Konsole.