Interceptor für das Ein-/Ausschalten einzelner Features je ENAIO Schrank

Hallo ECM-Community,

ich möchte gerne EmbeddedDocuments bei uns Schrankweise einführen. Auch möchte ich das bestimmte Features z.B. der RubberStamp nicht in allen Schränken aktiv ist. Ich würde das gerne per Interceptor lösen, allerdings stoße ich hier an meine Grenzen.

Meine Idee war die Folgende:

  1. Ermitteln ob das geöffnete Objekt zum Schrank gehört.
    Ich habe gesehen dass der Doctype ja mit in der URL steht bzw auch ausgelesen wird. Das heißt man könnte auch pro Schrank eine Liste von Doctypes anlegen.

  2. Einzelne Features über instance.UI.disableElements([‚tollesFeature‘]); deaktivieren

  3. Falls zu Öffnendes Dokument keinen „erlaubten“ DocType aufweist. Embedded Documents „ausschalten“.

class EDCabinetActivator {
	
    initEditorConfiguration(instance) {
    
        /* Definieren einer Variable pro Schrank die alle Dokumententypen enthaelt */
        const sFallaktenschrankSozial = [262177,393221];
        const sASV = [252134,332325,185456];

        /* TODO: wie kann ich auf den doctype dies aktuellen dokumentes zugreifen? */
        if (sFallaktenschrankSozial.includes(sessionStorage.getItem('doctype'))){   
            /* Aktiviere / deaktivere einzelne features hier */
            instance.UI.disableElements(['header']);
		    instance.UI.disableElements(['downloadButton']);
		    instance.UI.disableElements(['printButton']);
		    instance.UI.disableElements(['highlightToolGroupButton']);

		
        }else if (sASV.includes(sessionStorage.getItem('doctype')) )
        {
            /* individuelle Einstellungen fuer den Schrank */
        }else{
            /* TODO: ED soll nicht starten (oder nur Anzeige), darf aber gerne eine anwenderfreundliche Fehlermeldung zeigen */
            instance.shutdown;
        }
   

	}
	
}

window.ed.registerInterceptor(new EDCabinetActivator);

Unklar ist mir wie ich auf den Dokumententyp zugreifen kann und wie ich ED deaktiviere für den Fall das dass ausgewählte Dokument nicht einem „freigeschalteten“ Schrank liegt.

Danke euch schonmal im voraus :slight_smile:

Gruß

Alex

Hallo Alex (@cherryPie),

sorry für die späte Rückmeldung.

Die Methode disableElements erlaubt auch mehrere Elemente. Du kannst auch folgendes schreiben:

instance.UI.disableElements(['header', 'downloadButton', 'printButton', 'highlightToolGroupButton']);

Wenn du auf den Dokumenttypen bzw. auf das Dokument reagieren willst, musst du die Methode updateEditorConfiguration: async (instance, info, config) verwenden. Diese wird beim Wechsel des Dokuments oder des Modus ausgelöst. Der Parameter Info enthält die Informationen zum aktuellen Objekt.

Details zum Info Objekt:

export interface ObjectInfo {
    id: string;
    typeId: string;
    version: string;
    type: ObjectTypes;
    fileCount: number;
    title: string;
    filename: string;
    extension: string;
    mimetype: string;
    isPdf: boolean;
    archived: boolean;
    link: boolean;
    lockstatus: LockStatus;
    lockUsername: string;
    permissions: ObjectPermissions;
    typeless: boolean;
    mode?: Mode;
    isPdfa?: boolean;
    pdfaCompliance?: string;
}

export enum LockStatus {
    self = "self",
    others = "others",
    unlocked = "unlocked"
}

export interface ObjectPermissions {
    read: boolean;
    edit: boolean;
    createVariant: boolean;
    showVariant: boolean;
}

// Beim Interceptor zur Zeit immer document, da ansonsten der Details Viewer angezeigt wird.
export enum ObjectTypes{
    document = "document",
    collection = "collection"
}

Der Config Parameter entält z.B. die Sprache, den Benutzernamen etc.

Bitte denke daran, dass die Methoden initEditorConfiguration und updateEditorConfiguration ein Promise zurück geben sollen. Im Zweifel markiere einfach deine Methode mit async.


async updateEditorConfiguration(instance, info, config) {
...

Hilft dir das weiter?

Gruss Uli

Hallo @uw,

ich habe den Interceptor etwas überarbeitet. Danke für die Objektdefinitionen.
Was mir jetzt noch nicht gelungen ist, ist dass ich je nach Objekttyp den ED in den „Lesemodus“ setze. Ähnliches passiert zum Beispiel wenn Dokumente archiviert sind und es erscheint mir für meinen Anwendungsfall ebenfalls eine gute Idee zu sein.

Dazu habe ich in der Doku die Methode Core.documentViewer.enableReadOnlyMode() aufgetan. Allerdings funktioniert diese nicht wie erwartet. Sie wird zwar ausgeführt setzt aber nicht den Viewer in den ReadOnly Mode. Was mache ich verkehrt?

class EDCabinetActivator {
	
    async updateEditorConfiguration(instance, info, config) {
        
        const { documentViewer } = instance.Core;
        /* Definieren einer Variable pro Schrank die alle Dokumententypen enthaelt */
        const sFallaktenschrankSozial = [262177];

        /** Wenn Objekt nicht aus SGBII Schrank, dann in Read-Only-Mode wechseln */
        if ( !sFallaktenschrankSozial.includes(info.typeId) ){   
            documentViewer.enableReadOnlyMode();
        } 
           
	}
	
}

window.ed.registerInterceptor(new EDCabinetActivator);
1 „Gefällt mir“