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...