martes, 10 de julio de 2012

Acceder a un fichero subido a una Document Library

Para aquellos que como yo están trabajando con la "parte CMS" de Liferay 6.1.0 (aclaro siempre la versión porque las diferentes versiones suelen conllevar algunos cambios) y necesitan mostrar en un contenido web (o WebContent) un campo definido en la estructura (XSD-XML) como "document_library" hoy he encontrado una forma para acceder al elemento (DLFileEntry). Cabe destacar que en la estacada final me ayudó un compañero, asi como también en el proceso de razonamiento de los pasos a seguir cuando estamos trabajando con los CMS Templates.

Bueno basta de parrafadas y a lo importante!!!

Subimos un documento a la Document Library, a través del portlet o desde la administración de liferay.
No solicitará el Titulo o Title (Este valor se utiliza como clave para identificar al documento entonces deberá ser único por cada carpeta de la librería), supongamos que escribimos como titulo el valor "titulo del documento"
Una vez subido y publicado el documento podremos utilizarlo desde nuestro contenido web que poseerá una estructura con un campo como el siguiente

<dynamic-element name="DOCUMENTO" type="document_library" index-type="" repeatable="false"/>

Sabemos que:

Si hacemos $DOCUMENTO.data el resultado será la url (sin el host) del documento:

/documents/12004/0/titulo+del+documento


La url que nos presenta significa lo siguiente:

* documents            --> Directorio donde se alojan los documentos
* 12004                --> Group ID
* 0                    --> Folder ID
* titulo+del+documento --> Título asignado al subir el documento a la librería (e identificador único del documento)

para recuperar cada una de las partes haremos un split de aquellas que nos interesan:



por lo que tendremos en cada una de las variables definidas los valores por separado para utilizarlos en la llamada a el método que necesitemos

Para poder recuperar el DLFileEntry (DocumentLibraryFileEntry) vamos a hacer uso del serivicio:

com.liferay.portlet.documentlibrary.service.persistence.DLFileEntryPersistence

por lo tanto lo instanciamos de la siguiente forma:


#set ($dlService = $serviceLocator.findService("com.liferay.portlet.documentlibrary.service.persistence.DLFileEntryPersistence"))


Una vez instanciado el servicio lo que hacemos es recuperar el fichero por medio del método fetchByG_F_T(long groupId, long folderId, String title)

#set ($document = $dlService.fetchByG_F_T($gid,$fid,$fileTitle))

y ahora en el objeto $document contaremos con los metodos necesarios para recuperar los valores que queramos (ver clase DLFileEntry) como por ejemplo la descripción.

Como mención final cabe destacar lo curioso que es el hecho de que la url del documento se genere con el titulo que le hayamos asignado al subirlo a la document library.

Ya saben, consultas, dudas y sugerencias son bienvenidas!

No hay comentarios:

Publicar un comentario