Max
June 10, 2026, 12:39pm
1
Bei uns werden die in Embedded Documents erstellten Unterschriften nicht gespeichert. Startet man den Client neu, sind die Unterschriften weg. Die beiden Interceptoren, welche ich hier schon gefunden habe, funktionieren bei uns leider nicht.
Wir haben enaio 10.10 und Embedded Documents 2.3.11
Vielen Dank im Voraus und VG
Max Benesch
rk
June 10, 2026, 1:46pm
2
Hallo @Max ,
Beziehst Du Dich auf dies?
Ich habe auf Basis einer Anfrage eines Kunden eine Variante erstellt, welche die Unterschriften per Custom Settings (AppConnector) benutzerspezifisch speichert und lädt. Diese Unterschriften sind dann Client unabhängig verfügbar.
signatureInterceptorAppConnector.js
/*
Signature Interceptor welcher die Signaturen in den Custom Settings des Benutzers speichert und lädt.
Details hierzu finden Sie in der AppConnector API unter https://help.optimal-systems.com/enaio_develop/pages/viewpage.action?p…
Hier wäre es zum Debugging nützlich, wenn wir (eventuelle) Fehler auf der Entwickler-Konsole sehen könnten. Für ältere enaio-Versionen steht dafür dieser Button zur Verfügung:
Spannend könnten dort Fehler in der Console sein:
Oder auch die Frage, ob der Interceptor überhaupt geladen wurde:
Max:
Wir haben enaio 10.10
(Wie bestimmt bekannt, wird diese Version von OS nicht mehr unterstützt.)
Max
June 10, 2026, 2:44pm
3
Hi @rk , danke für die schnelle Antwort. Ja ich beziehe mich auf diesen Beitrag. Der Interceptor wird geladen, was man in den DevTools auch sehen kann.
rk
June 10, 2026, 3:07pm
4
Danke @Max , sind denn (offensichtliche) Fehler in der Console zu sehen?
Max
June 11, 2026, 5:01am
5
Ja folgender Fehler ist zu sehen
Embedded Documents zeigt auch nichts mehr an wenn der Interceptor aktiviert ist.
1 Like
rk
June 11, 2026, 5:17am
6
Hoi @Max , Dankeschön. Das ist komisch, in meiner Kopie von diesem Beispiel-Interceptor kommt diese Zeile nicht vor.
Könnte ich nochmals die Quelle oder den ganzen Code sehen?
Max
June 11, 2026, 5:40am
7
Das ist der Quellcode und unter dem Punkt //Immer speichern wenn… taucht das signaturtool.on auf
var signatureInterceptor = {
// Beim starten der Editor Instanz
initEditorConfiguration(instance) {
const { documentViewer } = instance.Core;
// Signatur Tool holen
const signatureTool = documentViewer.getTool('AnnotationCreateSignature');
// Methode zum speichern der Signaturen definieren
const saveSignature = async () => {
const signatures = await signatureTool.exportSignatures();
window.localStorage.setItem("signatures", JSON.stringify(signatures));
};
// Immer speichern wenn eine Signatur erstellt oder gelöscht wird
signatureTool.on("signatureSaved", saveSignature);
signatureTool.on("signatureDeleted", saveSignature);
},
// Beim laden jedes Dokuments
async updateEditorConfiguration(instance, info, config) {
const { documentViewer } = instance.Core;
// Signatur Tool holen
const signatureTool = documentViewer.getTool('AnnotationCreateSignature');
// Holen der aktuellen Signaturen
const existingSignatures = await signatureTool.exportSignatures();
// Nur die gespeicherten Signaturen laden, wenn aktuell keine vorhanden sind
if(existingSignatures.length == 0){
// Laden der Signaturen aus dem LocalStore
const signatures = window.localStorage.getItem("signatures");
// Falls Signaturen gespeichert wurden
if (signatures) {
// Import der Signaturen in embedded documents
const result = await signatureTool.importSignatures(JSON.parse(signatures));
}
}
}
}
// Registrierung des Interceptors
window.ed.registerInterceptor(signatureInterceptor);
rk
June 11, 2026, 6:57am
8
Hoi @Max , okay, das signaturTool könnte eine race condition haben. Aber andere Frage zuerst: Nutzt Ihr den WebClient, wegen der Verwendung von windows.localStorage()? Im Rich-Client geht das glaube ich nicht.
Max
June 11, 2026, 7:59am
9
Nein wir nutzen nur den Rich-Client
rk
June 11, 2026, 3:11pm
10
OkayO
Okay, dann würde das Skript oben leider ohnehin nicht funktionieren, so weit ich weiss. Denn der enaio RichClient entfernt alle Einstellungen der Dashlets und löscht, soweit ich weiss, den LocalStorage.
Bei einer der enaio-Versionen war wiederum ein Wechsel, wie Settings gespeichert werden dürfen, im OSRest. Das muss ich nachschauen.
Max
June 12, 2026, 7:09am
11
Guten Morgen @rk , das wäre gut. Dann hätte ich auf jeden Fall Klarheit.
rk
June 12, 2026, 8:25am
12
Hallo @Max ,
ich habe es gerade mit dieser Anpassung in meinem „älteren“ 11.0-System getestet:
Der Beispielcode:
/*
Dieser Interceptor speichert und lädt die Custom Signaturen.
https://ecm.community/t/840
*/
class PersistSignatures {
signaturesLoaded = false;
tool = null;
STORAGE_KEY_CUSTOM = "ed-signatures-custom";
// Beim Starten der Editor Instanz
initEditorConfiguration(instance) {
const { documentViewer } = instance.Core;
// Signatur Tool holen
this.tool = documentViewer.getTool('AnnotationCreateSignature');
// Immer speichern wenn eine Signatur hinzugefügt oder gelöscht wird
this.tool.addEventListener('signatureSaved', () => {
this.saveSignatures();
});
this.tool.addEventListener('signatureDeleted', () => {
this.saveSignatures();
});
// Nachdem das Dokument geladen wurde, prüfen ob die gespeicherten Signaturen schon importiert wurden.
documentViewer.addEventListener('documentLoaded', () => {
// Nur einmal laden
if (this.signaturesLoaded) {
return;
}
this.loadSignatures();
this.signaturesLoaded = true;
});
}
// Methode zum Speichern der Signaturen
async saveSignatures() {
// Nur speichern, wenn das erste Dokument geladen wurde
if (!this.signaturesLoaded) {
return;
}
const signatures = await this.tool.exportSignatures();
const data = {
type: 80,
name: this.STORAGE_KEY_CUSTOM,
value: JSON.stringify(signatures),
};
const response = await fetch(`/osrest/api/session/settings/custom/save`, {
method: 'POST',
body: JSON.stringify(data),
headers: {
'Content-Type': 'application/json',
},
});
// Prüfen ob die Signaturen gespeichert werden konnten
if (response.status == 204) {
console.log('Signatures saved');
} else {
console.error(response);
}
}
// Methode zum Laden der Signaturen
async loadSignatures() {
const customSignaturesResponse = await fetch(`/osrest/api/session/settings/custom/load?type=80&name=${this.STORAGE_KEY_CUSTOM}`);
// Prüfen ob das Laden erfolgreich war
if (customSignaturesResponse.status == 200) {
const customSignatures = await customSignaturesResponse.json();
if (customSignatures.value) {
// Import der Signaturen in embedded documents
const customSignaturesValue = JSON.parse(customSignatures.value);
await this.tool.importSignatures(customSignaturesValue);
console.log('Custom Signatures loaded');
}
} else {
console.error(customSignaturesResponse);
}
}
}
// Registrierung des Interceptors
window.ed.registerInterceptor(new PersistSignatures());
Max
June 15, 2026, 10:04am
13
Folgende Werte sehe ich in der Console, aber die Signaturen werden nicht gespeichert. Sie werden jetzt sogar verworfen, wenn ich das Dokument wechsle ohne den Client neu zu starten
rk
June 15, 2026, 10:21am
14
Max:
Folgende Werte
Hallo @Max , hast Du uns ggf. noch einen Screenshot o. ä.?
Wenn das Problem hartnäckig bleibt, müsstest Du Dich vermutlich an den offiziellen Support von Deinem enaio-Partner wenden, gerne mit Verweis auf diese Unterhaltung, damit die sich das ggf. mit Euch und/oder uns anschauen können.
Max
June 15, 2026, 11:11am
15
Hallo @rk das sind die Einträge, die ich bekomme:
rk
June 15, 2026, 11:26am
16
Oh, das sieht eigentlich nicht so schlecht aus. Komisch, dass es im Ergebnis nicht funktioniert. Könnten wir den Web via enaio-Partner bestreiten, um das in geregelten Bahnen untersuchen zu lassen?
Max
June 15, 2026, 12:49pm
17
Ja in der Console steht dass es keine Fehler gibt und alles exportiert und geladen wird. Ich werde jetzt ein Ticket beim Support aufmachen, um das ganze mal genau anschauen zu lassen
1 Like