JavaScript-API (forms.js) #
Die zentrale Bibliothek forms.js stellt Hilfsfunktionen für alle internen Webseiten bereit. Sie wird per SSI automatisch eingebunden oder manuell geladen:
<script src="eulanda://./forms.js" charset="ISO-8859-1"></script>
Beim Laden initialisiert die Bibliothek automatisch die Host-Objekte und liest die URL-Parameter aus.
Host-Objekte #
Nach dem Laden stehen folgende globale Objekte zur Verfügung:
| Objekt | Quelle | Beschreibung |
|---|---|---|
client | context.client | Hauptschnittstelle zu EULANDA (SQL, Objekte, Registry) |
conn | client.connection | ADO-Connection zur Datenbank |
ellib | context.ellib | Bibliothek für Datums-, Datei- und String-Funktionen |
internlib | ellib.internlib() | Systemfunktionen (ProcessMessages, RecordsetToJSON) |
reslib | consts.reslib | UI-Texte und Übersetzungen |
weblib | context.weblib | Web-spezifische Funktionen (callURL, getAdminCommand) |
modules | context.modules | Modul-Konfiguration |
userlib | context.userlib | Benutzerbezogene Bibliothek |
Alle Objekte sind undefined, wenn die Seite außerhalb von EULANDA geöffnet wird.
Konfigurationsvariablen #
Diese Variablen müssen bei Bedarf von der jeweiligen Seite gesetzt werden:
| Variable | Typ | Standard | Beschreibung |
|---|---|---|---|
designLanguage | string | "DE" | Quellsprache der Seite für patchMsgUI. Auf "EN" setzen, wenn die Seite nativ englisch ist |
currentDOC | string | "" | Aktueller Dokumenttyp (z.B. "Eulanda.Artikel") |
currentId | number | 0 | Aktuelle Datensatz-ID |
URL-Parameter #
Beim Laden werden automatisch die folgenden Query-Parameter ausgelesen:
| Variable | Typ | Parameter |
|---|---|---|
urlPageName | string | pagename |
urlTitle | string | title |
urlId | number | id |
SQL-Zugriff #
executeSql(sql) #
Führt ein SQL-Statement aus und liefert das Ergebnis als Array von JavaScript-Objekten. Jede Zeile wird ein Objekt, dessen Properties die Spaltennamen sind.
var kunden = executeSql("select top 10 Match, Name1, Ort from Adresse");
for (var i = 0; i < kunden.length; i++) {
debugOut(kunden[i].Match + " - " + kunden[i].Name1);
}
Der Name ist analog zu Client.ExecuteSql aus der iScript-API, die ein ADO-Recordset zurückgibt. Die JavaScript-Variante liefert stattdessen direkt ein Array.
sqlString(val) #
Erzeugt ein SQL-String-Literal mit korrektem Escaping. Einfache Anführungszeichen werden verdoppelt, null wird zu ''.
var sql = "select * from Adresse where Match = " + sqlString(suchbegriff);
// Bei suchbegriff = "O'Brien" → "select * from Adresse where Match = 'O''Brien'"
Wichtig: Verwenden Sie immer
sqlString()für Benutzereingaben, um SQL-Injection zu vermeiden.
sqlFloat(val) #
Wandelt einen Zahlenwert oder einen Text im lokalen Format in ein SQL-Float-Literal um. Erkennt das Dezimaltrennzeichen automatisch.
sqlFloat(1234.56) // → "1234.56"
sqlFloat("1.234,56") // → "1234.56" (deutsches Format)
Übersetzung #
patchMsgUI(msg) #
Übersetzt einen UI-Text über die ResLib-Schnittstelle. Verwendet designLanguage als Quellsprache.
var titel = patchMsgUI(":578@1047");
var label = patchMsgUI("Artikel");
Wenn die Seite außerhalb von EULANDA läuft, wird msg unverändert zurückgegeben.
Datumsfunktionen #
| Funktion | Beschreibung |
|---|---|
formatDate(date) | Formatiert ein Date-Objekt als DD.MM.YYYY |
formatVbDate(d) | Wandelt ein OLE-Datum (von COM) in einen formatierten String |
setDateRange(Von, Bis, Range) | Setzt zwei Datumsfelder auf einen Bereich (z.B. "thismonth") |
initDateRange(fieldIdFrom, fieldIdTo) | Initialisiert Datumsbereichs-Felder mit automatischer Bereichserkennung |
// Datumsbereich-Felder initialisieren
initDateRange("datumVon", "datumBis");
// Benutzer tippt "thismonth" → Von = 01.03.2026, Bis = 31.03.2026
Formular-Handling #
| Funktion | Beschreibung |
|---|---|
initForm(form) | Enter-Taste springt zum nächsten Feld statt das Formular abzusenden |
initFormField(fl) | Registriert Change-Event, das den Host-Dialog über Änderungen informiert |
formChange() | Meldet dem Host-Dialog eine Änderung (external.Dialog.Modify()) |
DialogData() | Gibt external.Dialog.Data zurück (oder null außerhalb eines Dialogs) |
selectDirectory(el) | Öffnet einen Verzeichnisauswahl-Dialog |
initNumericField(fieldId) | Beschränkt die Eingabe auf Ziffern (0–9) |
// Formular initialisieren
initForm(g("meinFormular"));
initFormField("feld1");
initFormField("feld2");
initNumericField("menge");
DOM-Helfer #
g(name) #
Kurzform für document.getElementById(name).
g("meinElement").style.display = "block";
toggleElement(id) #
Blendet ein Element ein/aus und aktualisiert optional ein zugehöriges Toggle-Icon.
URL-Helfer #
makeUrlReport(DOC, ReportName, id, target) #
Baut eine eulanda://-URL für den Berichtsaufruf zusammen.
| Parameter | Typ | Beschreibung |
|---|---|---|
DOC | string | Dokumenttyp (z.B. "Eulanda.Auftrag") |
ReportName | string | Name des Berichts |
id | number | Datensatz-ID |
target | string | "preview" oder "print" |
var url = makeUrlReport("Eulanda.Auftrag", "cnsoft.Auftrag.Standard", 1544, "preview");
// → "eulanda://./DOC/Eulanda.Auftrag/1544?print&Reportname=cnsoft.Auftrag.Standard&Target=preview"
Debug und Logging #
debugOut("Seite geladen");
debugOut("meinModul", "Wert:", x, "von", y);
errorOut("Fehler bei Initialisierung");
Bei einem Argument wird "javascript" als Topic verwendet. Bei mehreren Argumenten ist das erste das Topic. Die Ausgabe erscheint im EULANDA-Debug-Log.