Interceptor für Unterschriften: Unterschriften werden nach Client Neustart gelöscht

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

Hallo @Max,

Beziehst Du Dich auf dies?

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:

image

Oder auch die Frage, ob der Interceptor überhaupt geladen wurde:


(Wie bestimmt bekannt, wird diese Version von OS nicht mehr unterstützt.)

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.

Danke @Max, sind denn (offensichtliche) Fehler in der Console zu sehen?

Ja folgender Fehler ist zu sehen

Embedded Documents zeigt auch nichts mehr an wenn der Interceptor aktiviert ist.

1 Like

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?

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);

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.

Nein wir nutzen nur den Rich-Client

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.

Guten Morgen @rk , das wäre gut. Dann hätte ich auf jeden Fall Klarheit.

Hallo @Max,

ich habe es gerade mit dieser Anpassung in meinem „älteren“ 11.0-System getestet:

Logging

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());

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

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.

Hallo @rk das sind die Einträge, die ich bekomme:

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?

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