1.3 Events
Allgemeines
Die Events des enaio® webclient lassen sich dahingehend unterscheiden, ob sie objekttypspezifisch oder global ausgeführt werden.
Globale Events
Mit Einführung von Version 9.00 SR5 wurde ein globales Event hinzugefügt, welches das Verhalten des Webclient direkt nach der Anmeldung steuern lässt:
Eventname | Verfügbar ab | Beschreibung |
|---|---|---|
AfterWebClientLogin | 9.00 SR5 | Das AfterWebClientLogin-Event wird ausgeführt nachdem der Benutzer sich am enaio® webclient über das Gateway angemeldet hat und bevor enaio® webclient final dargestellt wird. In dem Skript zu diesem Event kann der Skripter Objekttypen entfernen und somit für den gegebenen Nutzer unzugänglich machen, oder dem Nutzer gänzlich den Zugang zu enaio® webclient verwehren. Dieses Skript ist asynchron und erfordert den Aufruf einer "done" Funktion damit enaio® webclient weiterarbeiten kann. Dem Skript werden folgende Parameter zur Verfügung gestellt:
Bsp. 1 - Objekttypen ausblenden: Objekttypen entfernen data.objectTypesToIgnore = ["iKunde", "internalVertrag", "17"];
done();Es ist relativ einfach Objekttypen auszublenden, indem man dem Objekt "objectTypesToIgnore" ein Array an Werten zuweist, die der Nutzer nicht sehen darf. Sollte eine der ObjectTypes zu einem Schrank gehören, werden zusätzlich alle dem Schrank untergeordneten Objekttypen ebenfalls ausgeblendet. Der Nutzer hat danach keine Möglichkeit mehr auf diese Objekttypen zuzugreifen. Weder im Desktop, noch über gespeicherte Anfragen, Workflow-Akten oder Einsprungszenarien aus Drittsystemen. data.objectTypesToIgnore akzeptiert hierbei ausschließlich Strings für die ObjectTypeIds oder den internen Namen der Objekttypen. Bsp. 2 - Zutritt zu enaio® webclient verwehren: Zutritt verwehren if(data.session.username == "BOB"){
done(-1, "I don't like Bob anymore!")
}else{
done()
}Mit dem Returncode -1 signalisiert man, dass der Nutzer den enaio® webclient nicht nutzen darf. Optional kann man der "done" Funktion eine Zeichenkette übergeben, die den Grund beinhaltet, warum der Nutzer nicht mit enaio® webclient arbeiten darf. Die optionale Meldung erscheint auf dem Bildschirm und der Nutzer hat die Möglichkeit sich erneut anzumelden oder einen anderen Account zu verwenden. Rückgabewerte:
|
Inhalt:
- 1 Allgemeines
- 2 Globale Events
- 3 Objekttypspezifische Events
- 4 Warten auf asynchrone Ausführung
- 5 Warten auf mehrere asynchrone Ausführungen
- 6 Events
- 7 Objekttypspezifische Events mit weiteren Parametern
- 7.1 OnShow
- 7.2 BeforeStartQuery
- 7.3 BeforeCancel
- 7.4 BeforeOpen (DMS)
- 7.5 BeforeValidate
- 7.6 AfterValidate
- 7.7 AfterSave
- 7.8 OnAddLocation
- 7.9 OnCreateCopy
- 7.10 OnMove
- 7.11 BeforeDelete
- 7.12 AfterDelete
- 8 Feldspezifische Events
- 9 Mehrsprachige Events
Objekttypspezifische Events
Einige Eventskripte werden in enaio® webclient asynchron ausgeführt.
Asynchrone Events sind:
DMS | Workflow |
|---|---|
OnShow | BeforeOpen |
BeforeCancel | BeforeCancel |
BeforeOpen |
|
BeforeValidate | BeforeForward |
AfterSave |
|
AfterValidate |
|
BeforeDelete |
|
AfterDelete |
|
Um die Skriptausführung eines asynchronen Eventskriptes zu beenden, muss die Funktion done aufgerufen werden.
Wird das Skript ohne Aufruf der Funktion done beendet, so arbeitet der enaio® webclient nicht weiter. Dies wirkt sich z. B. bei 'OnShow' einer Indexdatenmaske dahingehend aus, dass die Indexdatenmaske nicht dargestellt wird. Beim Workflow-Event 'BeforeForward' würde der Workflow nicht weitergeleitet werden.
Funktion | Beschreibung |
|---|---|
done | Löst das Promise der Skriptfunktion auf. enaio® webclient setzt seine Ausführung fort. |
Optionaler Parameter:
Parameter | Beschreibung |
|---|---|
resultCode | Bestimmt den weiteren Verlauf der oben aufgelisteten Events nach Beendigung des Skriptes. Mögliche Werte 1 und 0. Standard ist 1. Der Wert 1 oder das Weglassen des Parameters signalisiert, dass alles in Ordnung ist und z. B. beim Skript 'BeforeSave' das DMS-Objekt gespeichert werden kann. Ein abweichender Wert (z.B. -1) verhindert hingegen das weitere Vorgehen, sodass z. B. das DMS-Objekt nicht gespeichert wird und der Benutzer weiterhin auf dem DMS-Formular bleibt. Nachfolgend im Detail beschriebene Events haben ggf. abweichende result codes. |
Beispiel:
done({resultCode});Warten auf asynchrone Ausführung
Oftmals kommt es vor, dass ein Vorgang angestoßen wird und die done-Funktion des Eventhandlers erst aufgerufen werden soll, wenn der asynchrone Vorgang abgeschlossen ist.
Nachfolgend wird hierfür ein Beispiel gegeben.
Beispiel:
var promise = new Promise(function(resolve, reject) {
var search = {
query: {
objectTypeId: "6488101",
osid: "7882"
}
};
formHelper.dms.search(search).then(function(result) {
resolve(result);
}, function(error) {
reject(error);
});
});
promise.then(function(result) {
alert("Erfolgreich");
done(1);
}, function(error) {
alert("Fehlerhaft");
done(0);
});Im oben aufgeführten Codebeispiel wird zu Beginn ein Javaskript Promise erzeugt. Die Funktion innerhalb des Promise beinhaltet den asynchronen Ladevorgang. In diesem Fall eine ECM-Suche in enaio®. Unterhalb des ersten Blocks, der den asynchronen Ladevorgang beinhaltet findet sich ein promise.then, welcher zwei Funktionen als Parameter entgegen nimmt. Wird nun innerhalb des Blockes des asynchronen Ladevorganges die resolve-Funktion aufgerufen, so wird die erste Funktion des promise.then aufgerufen. Wird die reject-Funktion im Block aufgerufen so wird passend dazu die zweite Funktion des promise.then aufgerufen. Die done-Funktion wird somit erst aufgerufen, wenn der asynchrone Ladevorgang samt Ergebnisverarbeitung vollendet worden ist.
Warten auf mehrere asynchrone Ausführungen
Soll auf mehrere parallele asynchrone Vorgänge gewartet werden, so bietet sich die Promise.all-Funktion von Javaskript an.
Beispiel:
var search = {
query: {
objectTypeId: "6488101",
osid: "7882"
}
};
var promise1 = new Promise(function(resolve, reject) {
formHelper.dms.search(search).then(function(result) {
resolve(result);
}, function(error) {
reject(error);
});
});
var promise2 = new Promise(function(resolve, reject) {
formHelper.dms.search(search).then(function(result) {
resolve(result);
}, function(error) {
reject(error);
});
});
Promise.all([promise1, promise2]).then(function(resultArray) {
alert("Alle Promises waren erfolgreich");
done(1);
}, function(error) {
alert("Mindestens ein Promise wurde rejected");
done(0);
});Über Promise.all kann auf alle asynchron gestarteten Vorgänge gewartet werden. Die erste Funktion von Promise.all wird aufgerufen, sobald alle asynchronen Vorgänge erfolgreich abgeschlossen wurden und bei all diesen die resolve-Funktion aufgerufen wurde. Als Parameter wird ein Array zurückgeliefert. Jedes Element entspricht einem Ergebnis eines der asynchronen Ladevorganges. Schlägt hingegen einer der asynchronen Vorgänge fehl und wird dessen reject-Funktion aufgerufen, so wird die zweite Funktion von Promise.all aufgerufen.
Events
Alle Events für den enaio® webclient verfügen mindestens über folgende Parameter:
formHelper
globals
scriptingStorage (9.00-SR4)
Über den Parameter formHelper ist die Skripting-API des enaio® webclients erreichbar. Auf den Parameter formHelper wird in den nachfolgenden Kapiteln detailliert eingegangen. Der globals-Parameter beinhaltet alle Methoden, die in den globalen enaio® webclient-Skripten von Ihnen definiert wurden.
Der scriptingStorage ist ein Objekt, das in allen Events existiert, aber im Gegensatz zu den globals den Zustand nicht verliert. Speichert man in diesem Objekt Informationen zwischen, kann man sie auch in jedem anderen Skript wieder abrufen. Es steht ab enaio WebClient 9.00 SR4 zur Verfügung.
Beispiel:
(function(formHelper, globals, scriptingStorage) {
globals.globalEventFunction();
scriptingStorage.tmp = "data for another script";
alert("Event fired...");
});Neben den Parametern 'formHelper' ,'globals' und dem 'scriptingStorage' stehen in enaio® webclient für folgende Events zusätzliche Parameter zur Verfügung. Dabei ist zu beachten, dass in Abhängigkeit vom Eventtyp das Script entweder objekttyp- oder feldspezifisch definiert werden kann.
Objekttypspezifische Events mit weiteren Parametern
Eventname | Verfügbar ab | Beschreibung |
|---|---|---|
OnShow | 8.50 | Das OnShow-Event wird ausgeführt, wenn der Nutzer ein Formular öffnet. Der Skripter hat in dem Skript die Möglichkeit, die anzuzeigenden Formularfelder und Werte zu verändern. Dieses Skript ist asynchron und erfordert den Aufruf einer "done" Funktion. Dem Skript werden folgende Parameter zur Verfügung gestellt:
Rückgabewerte:
|
BeforeStartQuery | 9.00 SR5 | Das BeforeStartQuery-Event wird ausgeführt, nachdem der Nutzer eine Suchform ausgefüllt hat und diese abschickt. Das Event wird auch für den Quickfinder, aber nicht für gespeicherte Suchen ausgeführt. Der Skripter hat in dem Skript die Möglichkeit, die erstellte Suchanfrage des Users anzupassen. Dieses Skript ist asynchron und erfordert den Aufruf einer "done" Funktion damit enaio® webclient weiterarbeiten kann. Dem Skript werden folgende Parameter zur Verfügung gestellt:
Bsp. 1 - Feldwert ändern: Feldwert ändern let fields = query.query.fields;
if (fields.title == void 0) {
fields.titel = { internalName: "title" };
}
// Keep in mind, that you have to set autostars manually, if you script a field value in the script.
fields.title.value = "my favorite title*";
done();
Rückgabewerte:
|
BeforeCancel |
| Das BeforeCancel-Event ermöglicht die Ausführung einer Aktion, nachdem ein Formular verlassen wurde. Dem Eventhandler wird der boolesche Wert isSave übergeben. Der Wert gibt an, ob das Skript aufgerufen wurde, weil das Formular gespeichert oder abgebrochen werden soll. Beispiel: (function(formHelper, globals, scriptingStorage, isSave, done) {
alert("BeforeCancel");
done();
}); |
BeforeOpen (DMS) | 9.00 SR5 | Das BeforeOpen-Event ermöglicht es, das Öffnen von Ordner, Registern oder Inhalten von Dokumenten zu verhindern oder eine weitere Logik auszuführen (z.B. Standortwechsel). Dieses Skript ist asynchron und erfordert den Aufruf einer "done" Funktion, damit enaio® webclient weiterarbeiten kann. Das Event wird in folgenden Fällen ausgelöst:
Dem Skript werden folgende Parameter zur Verfügung gestellt:
Bsp. 1 - Öffnen von Register mit Feld "einregister = block" verhindern: Feldwert ändern (async () => {
const doc = await formHelper.dms.searchById(objectId)
if (doc.model.fields.einregister == "block") {
done(0);
} else if (doc.model.fields.einregister == "noredirect") {
done(-2);
} else {
done(-1);
}
})();
Rückgabewerte:
|
BeforeValidateAfterValidate |
| Das AfterValidate-Event wird ausgeführt, nachdem die Indexdaten validiert worden sind. Vor dem Absenden des Formulars ist es an dieser Stelle möglich, noch Änderungen vorzunehmen, welche nicht durch die Validierung geprüft werden. Dieses Skript ist asynchron und erfordert den Aufruf einer "done" Funktion damit der WebClient weiterarbeiten kann. Dem Skript werden folgende Parameter zur Verfügung gestellt:
Rückgabewerte:
|
AfterSave | 8.50 | Das AfterSave-Event wird ausgeführt, nachdem die Indexdaten erfolgreich gespeichert worden sind. Dieses Skript ist asynchron und erfordert den Aufruf einer "done" Funktion damit der WebClient weiter arbeiten kann. Dem Skript werden folgende Parameter zur Verfügung gestellt:
|
OnAddLocation | 9.00 SR5 | Das OnAddLocation-Event wird ausgeführt, bevor der Nutzer zu einem Dokument einen weiteren Standort hinzufügt. Der Skripter hat in dem Skript die Möglichkeit, diesen Vorgang zu unterbinden. Dieses Skript ist asynchron und erfordert den Aufruf einer "done" Funktion, damit der WebClient weiterarbeiten kann. Dem Skript werden folgende Parameter zur Verfügung gestellt:
Achtung: Im scriptData-Objekt kann es vorkommen, dass der currentParent nicht angegeben wurde den Wert "null" hat. Das kann passieren wenn der Nutzer ein Dokument aus einer Trefferliste, einem Workflow oder dem Desktop in die Zwischenablage kopiert. Sollte es dazu kommen, ist es Aufgabe des Skripters, die Standorte des Dokuments selbst herauszufinden. Rückgabewerte:
|
OnCreateCopy | 9.00 SR5 | Das OnCreateCopy-Event wird ausgeführt, bevor der Nutzer von einem Dokument eine Kopie anlegt. Der Skripter hat in dem Skript die Möglichkeit, diesen Vorgang zu unterbinden. Dieses Skript ist asynchron und erfordert den Aufruf einer "done" Funktion damit enaio® webclient weiterarbeiten kann. Dem Skript werden folgende Parameter zur Verfügung gestellt:
Achtung: im scriptData Objekt kann es vorkommen, dass der currentParent nicht angegeben wurde den Wert "null" hat. Das kann passieren wenn der Nutzer ein Dokument aus einer Trefferliste, einem Workflow oder dem Desktop in die Zwischenablage kopiert. Sollte es dazu kommen, ist es Aufgabe des Skripters die Standorte des Dokuments selbst herauszufinden. Rückgabewerte:
|
OnMove | 9.00 SR5 | Das OnMove-Event wird ausgeführt, bevor der Nutzer ein Dokument von einem Standort an einen anderen verschiebt. Der Skripter hat in dem Skript die Möglichkeit, diesen Vorgang zu unterbinden. Dieses Skript ist asynchron und erfordert den Aufruf einer "done" Funktion damit der WebClient weiterarbeiten kann. Dem Skript werden folgende Parameter zur Verfügung gestellt:
Rückgabewerte:
|
BeforeDelete | 10.10 SR2 | Das Event BeforeDelete wird asynchron ausgelöst nachdem der Benutzer eine Ein- oder Mehrfachauswahl entweder von Ordnern, Registern und Dokumenten oder einer inaktiven Variante durch den Löschdialog bestätigt hat sowie beim Aufruf der Skriptfunktion formHelper.dms.delete. Über den Rückgabewert des Skriptes kann der Löschvorgang abgebrochen werden. Das Entfernen von Objekten aus einer Workflow-Akte, vom Desktop, endgültiges Löschen aus dem Papierkorb o. ä. löst dieses Event nicht aus. Wird ein Ordner oder Register gelöscht, so wird das Event nur dafür jedoch nicht für dessen Kindobjekte ausgelöst. Dem Event-Skript werden folgende Parameter zur Verfügung gestellt:
Rückgabewerte:
|
AfterDelete | 10.10 SR2 | Das Event AfterDelete wird asynchron ausgelöst nachdem der Benutzer ein oder mehrere Dokumente, Register, Ordner oder inaktiven Varianten in den Papierkorb gelöscht hat sowie beim Aufruf der Skriptfunktion formHelper.dms.delete. Das Entfernen von Objekten aus einer Workflow-Akte, vom Desktop, endgültiges Löschen aus dem Papierkorb o. ä. löst dieses Event nicht aus. Wird ein Ordner oder Register gelöscht, so wird das Event nur dafür jedoch nicht für dessen Kindobjekte ausgelöst. Dem Event-Skript werden folgende Parameter zur Verfügung gestellt:
Rückgabewerte: keine |
Feldspezifische Events
Eventname | Verfügbar ab | Beschreibung |
|---|---|---|
OnBeforeAddRow |
| Das OnBeforeAddRow-Event wird ausgelöst, bevor eine neue Tabellenzeile hinzugefügt wird. Dem Eventhandler wird mit dem Parameter field die Tabelle übergeben, auf dem das Event ausgelöst wurde. Beispiel: (function(formHelper, globals, scriptingStorage, field, done) {
alert("BeforeAddRow");
done();
}); |
OnBeforeDeleteRow |
| Das OnBeforeAddRow-Event wird ausgelöst, bevor eine Tabellenzeile gelöscht wird. Dem Eventhandler wird mit dem Parameter field die Tabelle übergeben, auf dem das Event ausgelöst wurde. Beispiel: (function(formHelper, globals, scriptingStorage, field, row, done) {
alert("BeforeDeleteRow");
done();
}); |
OnCellFocusGained |
| Das OnCellFocusGained-Event wird ausgelöst, wenn eine Zelle der hinterlegten Tabelle fokussiert wird. Dem Eventhandler wird mit dem Parameter field die Tabelle übergeben, auf dem das Event ausgelöst wurde. Beispiel:(function(formHelper, globals, scriptingStorage, field, cell) {
alert("CellFocusGained: " + cell.api.getValue());
}); |
OnCellValueChanged |
| Das OnCellValueChanged-Event wird ausgelöst, wenn Änderungen an einer sichtbaren Zelle der hinterlegten Tabelle vorgenommen werden. Dem Eventhandler wird mit dem Parameter field die Tabelle übergeben, auf dem das Event ausgelöst wurde. Beispiel:(function(formHelper, globals, scriptingStorage, field, cell) {
alert("ValueChanged: " + cell.value);
}); |
OnEnterPage |
| Das OnEnterPage-Event wird ausgelöst, wenn die Seite eines Pagecontrols dargestellt wird. Dem Eventhandler wird mit dem Parameter field das PageControl übergeben, auf dem das Event ausgelöst wurde. Beispiel:(function(formHelper, globals, scriptingStorage, field, page) {
alert("EnterPage");
}); |
OnFocusGained |
| Das OnFocusGained-Event wird ausgelöst, wenn das hinterlegte Feld fokussiert wird. |