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:
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.
Einzelne Features über instance.UI.disableElements([‚tollesFeature‘]); deaktivieren
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.
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.
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.
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);