Oui, la seule option est d'utiliser les propriétés/champs personnalisés Expando AKA. Dans le cas de fileEntry, vous n'avez pas besoin de créer une table et des colonnes par programme, mais vous pouvez le configurer dans Panneau de configuration> Champs personnalisés.
Après cela, vous avez quelques options pour remplir les valeurs expando.
fileEntry.getExpandoBridge().setAttribute("propName", "propValue")
ou si vous obtenez les propriétés de la vue couche
<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>
puis
ServiceContext serviceContext = ServiceContextFactory.getInstance(
DLFileEntry.class.getName(), actionRequest);
ServiceContext se peuplé par des paramètres dans actionRequest et vous alors il suffit d'appeler
fileEntry.getExpandoBridge().setAttributes(serviceContext)
Enfin, vous devrez peut-être interroger pour fileEntries avec des propriétés particulières
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);
}
Bien sûr, cette solution peut sembler un peu compliqué, parce que Liferay bibliothèque de documents n'est pas un référentiel de contenu JCR, mais il est littéralement une bibliothèque de documents qui fournit Couche d'abstraction pour les implémentations concrètes de repo via Hooks, comme JCRHook (où les fichiers sont stockés dans le référentiel jackrabbit), support CMIS, support de migration, etc. Il gère également permissionChecking, fileVersioning, workflow de document et gestion des assets. Par conséquent, si vous avez l'intention de faire quelque chose de plus compliqué et que vous devrez interroger les propriétés/métadonnées, changez-les et développez-les. Vous devriez envisager d'utiliser JCR repository directement ...
J'adore certaines de ces solutions de contournement que vous êtes obligé d'utiliser pour Liferay;) – Jakub
Eh bien, il a besoin de modifier la bibliothèque de documents LR pour qu'il puisse ajouter un fichier avec des métadonnées supplémentaires. Liferay n'est pas un référentiel de gestion de contenu. Il a un référentiel intégré, mais il a également une couche d'abstraction pour quelques autres dépôts. Il doit juste avoir une interface qui convient à tous. Et par cette "solution de contournement" vous étendez dynamiquement un modèle de base de données, avec toutes ces propriétés en recherche fulltext et il couvre également les conséquences sur la couche vue ... Cette fonction expando est bonne, mais seulement si on ne va pas plus loin c'est les propriétés – lisak