Pregunta

Estoy tratando de resolver esto, estaba haciendo esta pregunta en Foro de Liferay aquí - La última entrada.

Y lo único que se me ocurre es crear un Expanso Para FileEntry, que parece muy complicado. Quién sabe si tiene sentido. No me gusta la función de expansión ya que no pude consultarlos a través de Hibernate correctamente.

¿Alguien sabe la respuesta para mi pregunta en ese foro de Liferay?

El problema es ese,

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

No le permite almacenar ninguna información / propiedad adicional sobre el archivo. Como resultado, uno tendría que usar JackRabbit directamente, en lugar de usar Jcrhook de Liferay. Pero pierde todas las ventajas que trae la biblioteca de documentos.

¿Fue útil?

Solución

Sí, la única opción es utilizar el expanso, también conocido como propiedades/campos personalizados. En el caso de FileEntry, no necesita crear tabla y columnas programáticamente, pero puede configurarlo en el Panel de control> Campos personalizados.

Después de eso, tiene algunas opciones sobre cómo completar los valores de expansión.

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

o si obtiene las propiedades de la capa de vista

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

y entonces

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

ServiceContext se pobla por parámetros en ActionRequest y luego solo llamas

fileEntry.getExpandoBridge().setAttributes(serviceContext)

Finalmente, es posible que deba consultar para FileEntries con propiedades particulares

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);
}

Por supuesto, esta solución puede parecer un poco complicada, porque Liferay Document Library no es un repositorio de contenido de JCR, pero es literalmente una biblioteca de documentos que proporciona una capa de abstracción para implementaciones de repositorio concretas a través de ganchos, como Jcrhook (donde los archivos se almacenan en el repositorio de JackRabbit ), Soporte de CMIS, soporte de migración, etc. También maneja la verificación de permisos, la inversión de archivos, el flujo de trabajo de documentos y la gestión de activos.

Entonces, si tiene la intención de hacer algo más complicado y tendrá que consultar las propiedades/metadatos, cambiarlas y expandirlas. Debe considerar usar el repositorio de JCR directamente ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top