Externe Datenquellen¶
KCForms kann Wertelisten (Lookups), Such-Picker und Skripte nicht nur aus der
eigenen Datenbank speisen, sondern auch aus externen Datenbanken — z. B.
einem ERP-System, einem zentralen Adressbestand oder einer Spiegeltabelle. Die
Verbindungen werden einmal eingerichtet und stehen danach in Lookups, Pickern
und Skripten (db.on("name"), siehe db)
zur Verfügung.
Wo konfigurieren¶
System-Administration → Schnittstellen & Verteilung → Datenquellen. Links die Liste Externe Datenquellen, rechts der Editor. Über + Neu legst du eine Quelle an, Verbindung prüfen testet sie sofort (zeigt bei Erfolg Produkt und Version der Ziel-Datenbank), Speichern legt sie ab.
Oben zeigt der Kasten Haupt-Datenbank die Datenbank von KCForms selbst
(Produkt, Adresse, Benutzer, Treiber). Er ist nur zur Information: Die
Haupt-Datenbank wird über die Umgebungsvariablen SPRING_DATASOURCE_URL,
…_USERNAME und …_PASSWORD eingestellt, nicht hier — siehe
Datenbank.
Felder¶
| Feld | Bedeutung |
|---|---|
| ID | Eindeutiger Name, z. B. sap-export. Unter diesem Namen erscheint die Quelle in der Auswahl Datenquelle und wird in Skripten angesprochen (db.on("sap-export")). |
| Datenbank-Typ | MySQL, MariaDB, PostgreSQL, Microsoft SQL Server oder Oracle. Die Auswahl füllt Treiber-Klasse, URL-Vorlage und Validierungs-SQL passend vor. |
| Treiber-Klasse | JDBC-Treiber. Wird aus dem Typ vorbelegt; nur bei Sonderfällen ändern. |
| URL | JDBC-Verbindungs-URL. Die Vorlage zeigt das Format je Typ. |
| Benutzername / Passwort | Anmeldedaten. Das Passwort wird nie im Klartext zurückgeliefert (nur ein „gesetzt"-Hinweis). |
| Initiales SQL-Statement | Optional; wird bei jedem Verbindungsaufbau ausgeführt (z. B. ALTER SESSION …). |
| Validierung SQL-Statement | Prüf-Abfrage für die Pool-Gesundheit. Default select 1 — bei Oracle automatisch select 1 from dual. |
| Mindest-/Höchstanzahl Verbindungen | Pool-Größe (HikariCP minimumIdle / maximumPoolSize). |
| Maximum Wait (ms) | Wartezeit auf eine freie Verbindung, bevor abgebrochen wird. |
| Abandon Timeout (s) | Diagnose-Schwelle für hängende Verbindungen (Leak-Detection) + Keepalive-Takt. |
| Autocommit / Keep Alive | Autocommit-Modus bzw. periodisches Wachhalten von Leerlauf-Verbindungen. |
| Datenbank (Catalog) | Nur angeben, wenn statt der Default-Datenbank der Verbindung eine andere genutzt werden soll. |
| aktiviert | Deaktivierte Quellen sind nicht wählbar und liefern zur Laufzeit eine Fehlermeldung. |
JDBC-Treiber¶
KCForms bringt die Treiber für MySQL, MariaDB, PostgreSQL, Microsoft SQL
Server und Oracle mit. Für eine andere Datenbank muss das passende
Treiber-JAR in das Backend aufgenommen werden (pom.xml, neu bauen).
MySQL läuft dabei über den MariaDB-Treiber. Eine Datenquelle vom Typ „MySQL“
mit der Treiber-Klasse com.mysql.cj.jdbc.Driver funktioniert trotzdem
unverändert. Fehlt der Treiber von Oracle, verbindet KCForms automatisch über
MariaDB. Was das für die Verschlüsselung bedeutet, steht unter
Datenbank → Der Treiber für MySQL.
URL-Vorlagen (Platzhalter <…> ersetzen):
| Typ | URL-Vorlage |
|---|---|
| MySQL | jdbc:mysql://<HOST>:3306/<DATENBANK>?useUnicode=true&characterEncoding=UTF-8 |
| MariaDB | jdbc:mariadb://<HOST>:3306/<DATENBANK> |
| PostgreSQL | jdbc:postgresql://<HOST>:5432/<DATENBANK> |
| SQL Server | jdbc:sqlserver://<HOST>:1433;databaseName=<DATENBANK>;encrypt=true;trustServerCertificate=true |
| Oracle | jdbc:oracle:thin:@<HOST>:1521/<SERVICE> |
Nutzung in Lookups und Pickern¶
Im Formular-Editor hat jedes Feld mit einem Lookup
(kc:lookup) oder Picker (kc:picker)
in den Eigenschaften eine Auswahl Datenquelle:
- Interne KCForms-DB (Standard),
- eine eingerichtete externe Quelle — die Auswahl von Tabellen und Spalten zeigt dann die Tabellen dieser Quelle, und die Werte kommen zur Laufzeit von dort.
Im Schema steht die Quelle als dataSourceId im Lookup bzw. Picker:
"lieferant": {
"type": "string",
"kc:lookup": {
"dataSourceId": 4,
"table": "LIEFERANTEN",
"keyColumn": "NR",
"valueColumn": "NAME",
"orderBy": "NAME ASC"
}
}
dataSourceId ist die interne Nummer der Quelle — der Formular-Editor trägt sie bei
der Auswahl selbst ein. Von Hand geht auch der Name ("dataSourceId":
"sap-export"); das ist beim Transport zwischen Systemen robuster, weil die
Nummern dort verschieden sein können. Eine unbekannte Nummer oder ein
unbekannter Name ergibt einen Fehler. Ohne dataSourceId (oder mit 0 bzw.
"intern") wird die KCForms-Datenbank abgefragt.
Dialekt-Handling
Das Zeilen-Limit setzt KCForms passend zur Datenbank: MySQL, MariaDB und
PostgreSQL mit LIMIT, SQL Server mit TOP, Oracle mit ROWNUM. Freies
SQL (sql-Modus) muss ansonsten zur Ziel-Datenbank passen (Spaltennamen,
Funktionen; bei Oracle z. B. FROM DUAL).
LDAP als Lookup-Quelle¶
Neben Datenbanken kann eine Werteliste auch aus einem LDAP-Verzeichnis kommen — z. B. um in einem Workflow einen Bearbeiter/Genehmiger aus dem Verzeichnis zu wählen. Dieselbe Auswahl Datenquelle listet unter LDAP-Verzeichnisse alle aktivierten LDAP-Konnektoren (siehe LDAP-Zugriff).
Nach der Auswahl erscheinen statt Tabelle und Spalten vier LDAP-Felder:
| Feld | Bedeutung |
|---|---|
| Basis-DN | Suchwurzel, z. B. ou=Users,dc=firma,dc=de. |
| Filter | LDAP-Filter, z. B. (objectClass=inetOrgPerson) für Benutzer oder (objectClass=groupOfNames) für Gruppen. |
| keyAttr | Attribut, dessen Wert gespeichert wird — meist uid (oder sAMAccountName bei AD), dn ist auch erlaubt. |
| valueAttr | Attribut, das angezeigt wird — meist cn (voller Name). |
Im Schema:
"bearbeiter": {
"type": "string",
"title": "Zugewiesener Bearbeiter",
"kc:lookup": {
"ldapConnector": "kcads",
"ldapBase": "ou=Users,dc=kcforms,dc=test",
"ldapFilter": "(objectClass=inetOrgPerson)",
"keyAttr": "uid",
"valueAttr": "cn"
}
}
Gespeichert wird die uid (z. B. oliver), angezeigt der cn (z. B.
Anna Beispiel). Die Liste wird bei jedem Öffnen live aus dem Verzeichnis
geladen und alphabetisch nach Anzeigewert sortiert. Für Active Directory analog
mit sAMAccountName / displayName.
LDAP im Picker (Such-Dialog)¶
Auch der Picker (kc:picker — der „…"-Knopf mit Such-Dialog) unterstützt
LDAP als Quelle. Ideal, wenn viele Treffer möglich sind und man mehrere Felder
auf einmal füllen will (z. B. Bearbeiter-Login und Name und E-Mail). Im
Picker-Editor dieselbe „Datenquelle"-Auswahl; im LDAP-Modus gibst du an:
- Basis-DN und Filter wie beim Lookup,
- Anzeige-Attribute (Komma-Liste) — die Spalten im Dialog, z. B.
cn, uid, mail, - Suchattribute (Komma-Liste) — der Suchbegriff wird server-seitig als
(|(cn=*x*)(uid=*x*)…)in den LDAP-Filter gehängt, - set-Zuordnung — welches Formularfeld welches Attribut übernimmt.
"bearbeiter_pick": {
"type": "string", "title": "Bearbeiter suchen…",
"kc:picker": {
"ldapConnector": "kcads",
"ldapBase": "ou=Users,dc=kcforms,dc=test",
"ldapFilter": "(objectClass=inetOrgPerson)",
"columns": [{"column":"cn","title":"Name"},{"column":"uid","title":"Login"},{"column":"mail","title":"E-Mail"}],
"search": ["cn","uid","mail"],
"set": {"bearbeiter":"uid","bearbeiter_name":"cn","bearbeiter_mail":"mail"}
}
}
Die Pagination passiert nach der Verzeichnis-Suche in KCForms; die Treffermenge wird durch die Seitengröße des Konnektors gedeckelt.
Ausprobieren im DB-Client¶
System-Administration → Werkzeuge & Diagnose → DB-Client hat oben dieselbe Auswahl der Datenquelle. Damit setzt du SQL interaktiv gegen die gewählte Quelle ab — praktisch, um Tabellen, Spalten und Filter zu prüfen, bevor du sie in einen Lookup übernimmst.
Sicherheit¶
Die Verwaltung ist Administratoren vorbehalten. Jede Quelle verbindet sich
ausschließlich mit den dort hinterlegten Zugangsdaten. Gib dem
Datenbank-Benutzer einer externen Quelle möglichst nur Leserechte auf die
benötigten Tabellen — Skripte können über db.on(...) sonst auch schreiben.