Max
10. Juni 2026 um 12:39
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
10. Juni 2026 um 13:46
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
10. Juni 2026 um 14:44
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
10. Juni 2026 um 15:07
4
Danke @Max , sind denn (offensichtliche) Fehler in der Console zu sehen?
Max
11. Juni 2026 um 05:01
5
Ja folgender Fehler ist zu sehen
Embedded Documents zeigt auch nichts mehr an wenn der Interceptor aktiviert ist.
1 „Gefällt mir“
rk
11. Juni 2026 um 05:17
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
11. Juni 2026 um 05:40
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
11. Juni 2026 um 06:57
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
11. Juni 2026 um 07:59
9
Nein wir nutzen nur den Rich-Client
rk
11. Juni 2026 um 15:11
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
12. Juni 2026 um 07:09
11
Guten Morgen @rk , das wäre gut. Dann hätte ich auf jeden Fall Klarheit.
rk
12. Juni 2026 um 08:25
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
15. Juni 2026 um 10:04
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
15. Juni 2026 um 10:21
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
15. Juni 2026 um 11:11
15
Hallo @rk das sind die Einträge, die ich bekomme:
rk
15. Juni 2026 um 11:26
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
15. Juni 2026 um 12:49
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 „Gefällt mir“