Frage

Ich versuche das herauszufinden, ich habe diese Frage gestellt Liferay's Forum hier - Der letzte Eintrag.

Und das einzige, was ich mir einfallen lassen kann, ist, eine zu erstellen Expando Für FileEntry, was sehr kompliziert erscheint. Wer weiß, ob es Sinn macht. Ich mag die Expanceo -Funktion nicht, da ich sie nicht über Hibernate ordnungsgemäß abfragen konnte.

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

Das Problem ist, dass,

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

Sie können keine zusätzlichen Informationen / Eigenschaften über die Datei speichern. Infolgedessen müsste man Jackrabbit direkt verwenden, anstatt Liferays JCrhook zu verwenden. Sie verlieren jedoch alle Vorteile, die die Dokumentbibliothek mit sich bringt.

War es hilfreich?

Lösung

Ja, die einzige Option ist die Verwendung von Explosions -AKA -benutzerdefinierten Eigenschaften/Feldern. Im Falle von FileEntry müssen Sie keine Tabelle und Spalten programmgesteuert erstellen, können sie jedoch in Bedienfeld> benutzerdefinierte Felder einrichten.

Danach haben Sie einige Optionen, wie Sie die Expansionswerte füllen können.

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

oder wenn Sie die Eigenschaften von der Sichtschicht erhalten

<liferay-ui:custom-attributes-available className="<%= DLFileEntry.class.getName() %>">
    <liferay-ui:custom-attribute-list
        className="<%= DLFileEntry.class.getName() %>"
        classPK="<%= (fileVersion != null) ? fileVersion.getFileVersionId() : 0 %>"
        editable="<%= true %>"
        label="<%= true %>"
        />
</liferay-ui:custom-attributes-available>

und dann

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

serviceContext wird durch Parameter in actionRequest bevölkert und Sie rufen dann einfach an

fileEntry.getExpandoBridge().setAttributes(serviceContext)

Schließlich müssen Sie möglicherweise nach FileEntries mit bestimmten Eigenschaften abfragen

public Hits search() {
     Map<String, Serializable> attributes = new HashMap<String, Serializable>();
     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 ein wenig kompliziert erscheinen, da die Liferay -Dokumentenbibliothek kein JCR -Inhaltsrepository ist, aber buchstäblich eine Dokumentbibliothek, die eine Abstraktionsebene für konkrete Repo -Implementierungen über Hooks wie JCRhook bietet (wo Dateien in Jackrabbit Repository gespeichert werden ), CMIS -Unterstützung, Migrationsunterstützung usw. Es wird auch die Berechnungsprüfung, Fileversioning, Dokument -Workflow und Asset Management behandelt.

Wenn Sie also beabsichtigen, etwas komplizierteres zu tun und die Eigenschaften/Metadaten abfragen, sie ändern und erweitern. Sie sollten in Betracht ziehen, JCR -Repository direkt zu verwenden ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top