2 Stimmen

Wie füge ich eine Datei mit zusätzlichen Eigenschaften in die Dokumentenbibliothek von Liferay ein

Ich versuche das herauszufinden, ich habe diese Frage im Liferay-Forum hier gestellt - der letzte Eintrag.

Und das Einzige, was mir einfällt, ist das Erstellen eines Expando für FileEntry, was sehr kompliziert erscheint. Wer weiß, ob es Sinn macht. Ich mag die Expando-Funktion nicht, da ich sie nicht korrekt über Hibernate abfragen konnte.

Weiß jemand die Antwort auf meine Frage in diesem Liferay-Forum?

Das Problem ist, dass

DLAppLocalServiceUtil.addFileEntry(...);
DLLocalServiceUtil.addFile(....);

es Ihnen nicht erlaubt, zusätzliche Informationen/Eigenschaften über die Datei zu speichern. Daraus folgend müsste man direkt JackRabbit verwenden, anstatt Liferay's JCRHook zu nutzen. Aber dann verliert man alle Vorteile, die die Dokumentenbibliothek bietet.

3voto

lisak Punkte 20709

Ja, die einzige Option besteht darin, Expando AKA benutzerdefinierte Eigenschaften/Felder zu verwenden. Im Falle von fileEntry müssen Sie keine Tabelle und Spalten programmgesteuert erstellen, sondern können diese im Steuerfeld > benutzerdefinierte Felder einrichten.

Danach haben Sie einige Möglichkeiten, wie Sie die Expando-Werte befüllen können.

fileEntry.getExpandoBridge().setAttribute("propName", "propValue")

oder wenn Sie die Eigenschaften aus der Ansichtsebene abrufen

und dann

ServiceContext serviceContext = ServiceContextFactory.getInstance(
            DLFileEntry.class.getName(), actionRequest);

serviceContext wird durch Parameter in actionRequest befüllt und Sie rufen einfach

fileEntry.getExpandoBridge().setAttributes(serviceContext)

Abschließend müssen Sie möglicherweise nach fileEntries mit bestimmten Eigenschaften suchen

public Hits search() {
     Map attributes = new HashMap();
     attributes.put("propertyName", "propertyValue");

     SearchContext searchContext = new SearchContext();
     searchContext.setAttributes(attributes);
     Indexer indexer = IndexerRegistryUtil.getIndexer(FileEntry.class);
     return indexer.search(searchContext);
}

Natürlich mag diese Lösung etwas kompliziert erscheinen, da die Liferay-Dokumentenbibliothek kein JCR-Inhaltsrepository ist, sondern buchstäblich eine Dokumentenbibliothek, die eine Abstraktionsebene für konkrete Reproimplementierungen über Hooks bereitstellt, wie z.B. JCRHook (wo Dateien in das Jackrabbit-Repository gespeichert werden), CMIS-Unterstützung, Migrationsunterstützung usw. Sie kümmert sich auch um die Berechtigungsprüfung, Dateiversionierung, Dokumenten-Workflow und Asset-Verwaltung.

Also, wenn Sie etwas Komplizierteres vorhaben und die Eigenschaften/Metadaten abfragen, ändern und erweitern müssen, sollten Sie in Betracht ziehen, das JCR-Repository direkt zu verwenden...

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X