Translate

martes, 14 de junio de 2011

Importación masiva con Alfresco Bulk Filesystem import

La entrada de hoy es para explicar como funciona el módulo Alfresco Bulk Filesystem import desarrollado por Peter Monks. Este módulo nos va a permitir importar un conjunto de ficheros permitiendonos incorporar metadatos en el proceso.

Alfresco trae varios mecanismos para importar contenidos:

En todos los casos anteriores necesitamos crear reglas o los mecanismos necesarios usando la API para asignar los metadatos.

Mediante el módulo simplemente creando un fichero con el mismo nombre que el original pero con la extension metadata.properties hará que se lea su contenido y se incorporen los metadatos de forma dinámica.

Por ejemplo, tengo un documento que llamado Documentación.odf y otro Documentación.metadata.properties ubicado en el mismo directorio

Dentro del fichero properties se pondrá el tipo de contenido y cada uno de los metadatos:

  # tipo de contenido
  type=cm:content
  # Aspectos
  aspects=cm:versionable, custom:myAspect
  # Propiedades
  cm\:title=This is the value of the cm:title field.
  cm\:description=This is the value of the cm:description field.
  # Enlace a un tag (es necesario apuntar a la referencia)
  cm\:taggable=workspace://SpacesStore/3da6c395-3a4b-4a57-836d-8e5
  # Propiedad personalizada de nuestro modelo de datos:
  custom\:myProperty=This is the value of the custom:myProperty field.
  # Propiedad con multiples valores
  custom\:mvProperty=first value,second value,third value.
  # Fechas (sólo formato ISO8601)
  cm\:created=2011-06-15T10:00:01.234+01:00
  cm\:modified=2011-06-15T10:00:01.234+01:00
Otra de las ventajas de las que se habla es que la importación mediante este metodo es mucho más rápida, ya que nos ahorramos el overhead de los protocolos y estamos cargando los datos desde un disco local, así que me he decidido a comprobarlo por mi mismo

He subido a alfresco mediante FTP y utilizando Filezilla configurado para subir los ficheros de 1 en 1, (haciéndolo de 2 en dos tuve fallos en varios ficheros y fue más lento).

El tiempo para subir 1,4Gb de datos distribuidos en 679 ficheros fue de 4:24 segundos. Esto sin haber asignado ningún metadato.

A continuación y para poder realizar la prueba con metadatos de forma rápida me situé en la carpeta donde se habían subido los documentos (/opt/alfresco34/alf_data/contentstore/2011/6/14/12) y con un pequeño script cree los ficheros de metadatos introduciendo únicamente el tipo de contenido:

# for i in `find . -type f` ;do echo "type=cm:content" > $i.metadata.properties;done
De esta manera he podido crear  de una forma muy rápida todos los ficheros. He usado el contenido del contentstore porque sabemos que los nombres en el contenstore no tienen espacios, y el miniscript me dio algún problema con los ficheros que tenían espacios en los nombres. El módulo es muy sensible a fallos, si no existe algún fichero de metadatos no se ejecutará.

He comprobado además que en la carpeta del contentstore únicamente están los archivos cargados por FTP y que los nuevos se van a copiar en la hora siguiente.

Ya tenemos los ficheros a subir con sus metadatos. Con la importación del módulo se añade un web-script que nos ofrece una página desde donde podemos iniciar la importación masiva en Alfresco y monitorizar todo el proceso. En mi caso localhost (ojo de no poner barra al final!!):

http://localhost:8080/alfresco/service/bulk/import/filesystem


En esta pantalla pondremos donde se encuentran los ficheros que queremos importar. Esto ha de ser una ruta en el sistema de ficheros y puede ser local o estar montada de forma remota.

El siguiente campo es donde queremos que se ubiquen los ficheros. La página usa Ajax y nos ayudará a auto completar este campo, lo que resulta muy útil.

Una vez lanzada la importación veremos como va el progreso


El resultado fue que se subieron los ficheros en 2 minutos 39 segundos, casi la mitad de tiempo. No está nada mal.

Como nota final,  mencionar que es posible incorporar metadatos a ficheros que ya existen en Alfresco simplemente poniendo los ficheros de metadatos.

ACTUALIZACIÓN:

El formato del fichero de metadatos ya no es un fichero de texto plano, si no que se ha pasado al formato xml para dar un mejor soporte a carácteres unicode. El formato que sigue es:


  <?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
  <properties>
    <entry key="key1">value1</entry>
    <entry key="key2">value2</entry>
    ...
  </properties>


Más información

http://blogs.alfresco.com/wp/pmonks/2009/10/22/bulk-import-from-a-filesystem/
http://code.google.com/p/alfresco-bulk-filesystem-import/

12 comentarios:

  1. Hi Raul. This is Chris Vitti from Alfresco. Can you please change the "JLAN Alfresco server" link above from http://www.alfresco.com/products/aifs/ to http://sourceforge.net/projects/alfresco/files/JLAN/

    Thanks!

    ResponderEliminar
    Respuestas
    1. Thanks for reporting the broken link, is now pointing to the new URL

      Eliminar
  2. Hola, estoy empezando a trabajar con alfresco y tengo que mover una documentación desde un subversion a alfresco. Se puede utilizar la misma forma o existe algo más ortodoxo.

    Gracias y un saludo.

    ResponderEliminar
  3. Hola, hay la posibilidad de hacer esa importación pero teniendo un archivo .txt y q los campos se encuentren separados por comas?

    ResponderEliminar
  4. Hola Fernando. He actualizado la entrada puesto que el sistema indicado en el post original ha quedado obsoleto y ahora se realiza mediante un fichero xml.

    Esta herramienta en concreto no permite directamente la importación de metadatos en formato csv. Basicamente el problema radica en que aunque se pudiera importar se tendría que seguir una regla fija, y esto exigiria un tratamiento previo de reordenación del fichero separado por comas.

    Lo que se podría hacer en tu caso sería un tratamiento previo de tu fichero al formato xml.

    Aquí tienes mas información:
    http://code.google.com/p/alfresco-bulk-filesystem-import/wiki/PreparingTheFilesystem

    ResponderEliminar
  5. Hola! una pregunta! como hago para importar metadatos a archivos ya existentes dentro de afresco? porque cree el archivo de metadatos lo puse junto con los archivos ya cargados y no pasa nada, tal vez comprendí mal (creo que es eso)y debo correr algun proceso? desde ya muchas gracias y saludos!

    ResponderEliminar
  6. El funcionamiento del módulo se basa en cargar documentos y metadatos desde fuera de alfresco. Para cargar esos metadatos deberias ponerlos en el sistema de ficheros y desde ahi importarlos al espacio donde están los documentos. Recuerda además que debes usar el formato xml en esos ficheros tal como explica la documentación

    ResponderEliminar
  7. Saludos actualmente hice una personalización de Alfresco Bulk Filesystem Import Tool para alfresco 4.2.c, me permite importar varios tipos de contenidos con sus metadatos, un problema con esta solución es que necesita que la carga se ejecute centralizada en el servidor, alguien sabe de algún mecanismo en alfresco que me permita descentralizar la carga a cada estación de digitalización y no al servidor.

    Me explico mejor lo que quiero es que la aplicación me reconozca el sistema de archivos de cada estación de digitalización por usuario y no la del servidor, la solución de montar las carpetas compartidas en el servidor no me sirve.

    Alguien alguna idea, muchas gracias

    Saludos

    ResponderEliminar
  8. Hola, yo tengo los archivos subidos a Alfresco pero sin metadatos. Los metadatos los tengo en una base de datos Access, cómo podría pasarlos a Alfresco. Tengo "conocimientos" de programación en Delhi, php, ExtJS... no sé si eso podría ayudar.

    ResponderEliminar
  9. En tu caso veo 2 posibles opciones:

    - Exportar tus datos de access a un fichero para importarlo con bulk import con el formato xml
    - Mirarte la Api Rest y hacer la importación al vuelo: http://docs.alfresco.com/5.0/references/RESTful-Metadata.html

    ResponderEliminar
    Respuestas
    1. Hola Raúl. Me gusta más tu primer variante. Cómo sería eso paso a paso si no te es molestia... Gracias de antemano.

      Eliminar
  10. Gracias Raúl. Perdonen foro pero soy muy novato en Alfresco, me podrían señalar algún ejemplo más claro sobre el uso del bulk import, de las API Rest,y todo este tema dle trabajo con el Repositorio de ALfresco?

    ResponderEliminar