Angezeigten Dateinamen im Variantenbaum konfigurieren

Bei uns wird ein sehr seltsamer “Dateiname” im Variantenbaum von ED angezeigt (vermutlich sind es die Werte aller möglichen DB-Felder hintereinandergehängt):

Ich habe keinen Ort gefunden, wo ich das konfigurieren kann.
Die Apryse-WebViewer Doku hilft dabei auch nicht weiter (wie auch - ist ja ED-spezifisch).

Habe ich etwas übersehen? Kann ich das ggf. per Interceptor anpassen?

Hallo @hajoh,

der einfachste Weg ist über einen Interceptor.
Die Embedded Documents Interceptoren unterstützen auch die Funktion onObjectInfo welche das folgende Interface bietet.

onObjectInfo(settings: Settings,objectInfo: ObjectInfo): Promise<void>;

Hier ein minimales Beispiel wie die API an sich funktioniert:

class ChangeFileName {
  async onObjectInfo(settings, objectInfo) {
    console.log(settings, objectInfo);
    objectInfo.filename = "Neuer Dateiname.pdf";
  }
}
window.ed.registerInterceptor(new ChangeFileName());

Vermutlich müsste man in diesem Fall per Metadaten per DMS-API
abrufen und passend zusammenbauen. Leider bietet enaio aktuell zentrale Stelle in denen man den Aufbau des Titels/Dateinamens für den jeweiligen Objekttypen definieren kann.

Die ObjectInfo hat folgende Eigenschaften:

export interface ObjectInfo {
    id: string;
    typeId: string;
    version: string;
    type: ObjectTypes;
    fileCount: number;
    title: string;
    filename: string;
    extension: string;
    mimetype: string;
    isPdf: boolean;
    url: string;
    archived: boolean;
    link: boolean;
    lockstatus: LockStatus;
    lockUsername: string;
    permissions: ObjectPermissions;
    typeless: boolean;
    // @deprecated Only available for Interceptors
    mode?: Mode;
    isPdfa?: boolean;
    pdfaCompliance?: string;
    signaturePermissions?: number;
    signatureAnnotationsAllowed?: boolean;
    signatureFormFillingAllowed?: boolean;
    signatureSigningAllowed?: boolean;
    signatureEditingAllowed?: boolean;
}

Wichtig ist, dass Änderungen an Eigenschaften wie Permissions zwar das Verhalten des Editors beeinflussen, aber am Ende trotzdem die enaio Rechte greifen. Daher können Änderungen an diesem Objekt zu undefinierten Fehlern auf der Client-Seite führen. Daher bitte mit Vorsicht und genug Tests die Anpassungen durchführen.

Liebe Grüsse
Uli

1 Like

Danke sehr. Das sieht einfach aus.

Habe das direkt mal ausprobiert, aber der objectInfo.title scheint vom Variantenbaum unabhängig zu sein. Denn dieser bleibt von der Änderung unberührt:

@uw die Dateinamen im Variantenbaum sehen so aus, als ob die Werte aller Felder hintereinandergehängt als Variantennamen verwendet werden. Ist das eine Client-Einstellung, welche Felder dafür verwendet werden oder können wir irgendwo auf ED-Seite konfigurieren, welche Werte ausgelesen werden sollen?

da ich jetzt mal einen ganz neuen Objekttyp mit nur einem Feld angelegt. Jetzt werden auch nur zwei INhalte angezeigt:

kann ich irgendwo beeinflussen, welche Felder in den Titel des Vatriantenbaums übernommen werden?

Hallo @hajoh,

das Thema beschäftigt mich auch gerade. Ich versuche, die Antwort auf unsere Frage intern zu recherchieren.

Liebe Grüße
Patrick

1 Like

Hallo @hajoh,

in der aktuellen Version wird der Interceptor nur für das Dokument selbst ausgelöst, aber nicht für den Variantenbaum. Wir arbeiten an einer neuen Version, die den Interceptor auch für den Variantenbaum auslöst und veröffentlichen diese in den nächsten Tagen.

Liebe Grüße
Patrick

1 Like

Hallo @hajoh,

Version 2.4.10 ist nun verfügbar. Hier ein Beispiel, wie die Benennung jetzt per Interceptor gesteuert werden kann:

class FileNameInterceptor {
  async onObjectInfo(settings, objectInfo) {
    // Lade die Metadaten
    const response = await fetch(`/api/dms/objects/${objectInfo.id}`);
    const metadata = await response.json();
    const objectMetadata = metadata.objects[0];
    const internalName = objectMetadata.properties["system:objectTypeId"].localName;

    // Objekttyp spezifische Regeln für den Titel und Dateinamen der Datei
    if(internalName == "ClientContract"){        
        objectInfo.title = `[Vertrag] ${objectMetadata.properties.Title.value}`;
        objectInfo.filename = `${objectMetadata.properties.Title.value}.${objectInfo.extension}`;
    }
  }
}
window.ed.registerInterceptor(new FileNameInterceptor());

Dazu wird jetzt auch der Downloadname der Datei hierüber gesteuert. Bisher war dieser auf {Object_Id}.pdf festgelegt.

Kannst du es testen und wenn möglich Rückmeldung geben, ob alles so klappt, wie du es dir vorgestellt hast?

Liebe Grüße
Patrick

1 Like

ich lasse die neue Version mal installieren und teste es dann

1 Like

So habe ich es jetzt umgesetzt:

// Variant Tree adjustments
// 2026-08-03 HH038 

// class for setting the data displayed in the variant tree
class AdjustVariantTreeInterceptor {
	
	config_fields_for_tree = new Map([
		["WobisDokument", ["Betreff"]], 	// Wohngeldakte @ Dokument
		["object3", ["MAIL_SUBJECT"]],  	// Akte @ Dokument
		["object52", ["feld10", "feld9"]],	// SGB II Fallakte @ Dokument
	]);
 
	getFieldsForType(typeName) {
		return this.config_fields_for_tree.get(typeName);
	}
 
	// search properties for field names - coalesce to "" if not found
	// concatenates all field values separated by " - ", but filters out empty items
	buildTitleFromFields(properties, fieldNames) {
		return fieldNames
			.map(fieldName => properties[fieldName]?.value ?? "") 
			.filter(value => value !== "")
			.join(" - ");
	}
 
  async onObjectInfo(settings, objectInfo) {

	console.debug("Starting AdjustVariantTreeInterceptor ...");

    // ask API for object details 
	// and load type from object data
    const response = await fetch(`/api/dms/objects/${objectInfo.id}`);
    const response_data = await response.json();
    const object_data = response_data.objects[0];
    const typeName = object_data.properties["system:objectTypeId"].localName;
	
	console.debug("Object Type name: ", typeName);

    // check whether this type has a field configuration 
	// and build the new title from the configured fields
    const fields = this.getFieldsForType(typeName);	
	if (fields) {
      const new_title = this.buildTitleFromFields(object_data.properties, fields);
      if (new_title) {
        objectInfo.title = new_title;
		console.debug("New Title set: ", new_title)
      }
    }
  }
}	
	
window.ed.registerInterceptor( new AdjustVariantTreeInterceptor() );


Und so sieht es dann z.B. aus:

1 Like