Comment ajouter le fichier avec des propriétés supplémentaires dans la bibliothèque de documents de Liferay

StackOverflow https://stackoverflow.com/questions/5357131

Question

Je suis en train de comprendre cela, je pose cette question dans Forum Liferay -. la dernière entrée

Et seule chose que je suis en mesure de trouver est la création d'un Expando pour FileEntry, qui semble très compliqué. Qui sait s'il est logique. Je ne aime pas la fonction expando puisque je ne pouvais pas les interroger par mise en veille prolongée correctement.

Quelqu'un sait-il la réponse à ma question dans ce forum Liferay?

Le problème est que,

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

ne vous permet pas de stocker des informations supplémentaires / propriétés sur le fichier. En conséquence, il faudrait utiliser JackRabbit directement, au lieu d'utiliser JCRHook Liferay. Mais vous perdez tous les avantages que la bibliothèque de documents apporte.

Était-ce utile?

La solution

Oui, la seule option est d'utiliser les propriétés personnalisées Expando AKA / champs. En cas de fileentry vous n'avez pas besoin de créer une table et des colonnes programme, mais vous pouvez le configurer dans le Panneau de configuration> champs personnalisés.

Après que vous avez quelques options comment remplir les valeurs expando.

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

ou si vous obtenez les propriétés de la couche de vue

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

et

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 requête 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 la couche d'abstraction pour les implémentations repo en béton par crochets, tels que JCRHook (où les fichiers sont stockés dans le référentiel de Jackrabbit), support CMIS, le soutien de la migration, etc. Il gère également permissionChecking, fileVersioning, flux de documents et de gestion d'actifs.

Donc, si vous avez l'intention de faire quelque chose de plus compliqué et vous devrez interroger les propriétés / métadonnées, de les modifier et de les développer. Vous devriez envisager d'utiliser directement référentiel JCR ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top