Integración Alfresco con Drupal (o viceversa) con CMIS

La integración entre diferentes aplicaciones es, hoy en día, el caballo de batalla de los productos, clientes e integradores. Cuando hablamos de Open Source, esto se convierte casi en una obligación.

Gracias al estándar CMIS adoptado por Alfresco, las tareas de integración, independientemente del lenguaje de programación utilizado, son mucho más sencillas.

Sobre la integración de Alfresco y Drupal se ha hablado mucho, Jeff Potts ha hecho algunos screencasts, Roger Carhuatocto hizo una presentación sobre el tema en la Drupal Camp 2010, Optaros hizo el conector CMIS para Drupal y mucho antes, Sergio Martin junto a Manuel Recena hicieron un conector vía WebServices. Es decir, el tema trae cola y sólo basta con hacer una búsqueda en Google para dar cuenta de ello.

¿Qué nos puede aportar una integración de este tipo? (extraído de la presentación de Roger)

  • Flexibilidad:
    • Incorporar nuevas funcionalidades, Web 2.0.
    • Cambiar el Look&Feel.
  • Escalabilidad:
    • Búsqueda de ficheros PDF, SWF, Doc, PPT, etc.
    • Tengo muchos usuarios simultáneos.
  • Interoperabilidad:
    • Tengo MS Sharepoint, Documentum y tengo mis ficheros en el HD, …cómo los centralizo?
  • User Experience:
    • El usuario necesita productividad: Espacio colaborativo, gestión de conocimiento, repositorio documental corporativo, workflows/gestión de expedientes, etc.

En este artículo quiero mostrar un ejemplo sobre la configuración de Drupal para conseguir la integración con Alfresco vía CMIS y poder mostrar contenido que está en el repositorio dentro de un contenido en Drupal. En mi caso Alfresco 3.3 y Drupal 6.17. No voy a hablar de la sincronización entre ambos entornos, que permitirá que los contenidos creados en Drupal o Alfresco sean contenidos del primero. No obstante, el conector CMIS si soporta esa opción (cmis_sync).

Debemos tener instalado, configurado y funcionando Drupal y Alfresco. El conector CMIS puedes descargarlo de aquí; en mi caso ha sido la versión cmis-6.x-3.01. En Alfresco no hay que instalar ningún tipo de módulo, para eso soporta CMIS ;)

  1. Descomprime el fichero “cmis-6.x-3.01.tar.gz” y copia la carpeta “cmis” en el directorio “modules” de Drupal.
  2. En Drupal, vamos a “Admin -> Administer -> Site building -> Modules” y activamos los módulos “cmis“, “cmis_common“, “cmis_browser” y “cmis_query“.
  3. En Alfresco creamos un usuario llamado “cmisuser” con permisos de administrador (lo incluimos en el grupo ALFRESCO_ADMINISTRATORS).
  4. Configuramos un repositorio CMIS, en este caso, nuestro Alfresco añadiendo las siguientes líneas en el fichero “sites/default/settings.php“:
$conf['cmis_repositories'] = array(
'default' => array(
'user' => 'cmisuser',
'password' => 'contraseña',
'url' => 'http://servidor:8080/alfresco/s/cmis'
)
);

Hecho esto, podemos probar la integración. En la sección Admin veremos tres nuevas opciones:

  • CMIS Information” que nos mostrará la información CMIS del repositorio.
  • CMIS Query” donde podemos ejecutar consultas, por ejemplo, prueba la siguiente sentencia para ver los contenidos del repositorio: select * from cmis:document
  • CMIS Repository” donde veremos el contenido del repositorio de Alfresco y podremos navegar por él. En la opción “Actions” podemos crear carpetas, contenidos y actualizar documentos.

No conozco muy bien Drupal, así que no he podido hacer más de lo aquí descrito, pero he visto que se puede usar un Block con contenido CMIS y muchas cosas más que podéis ver en el screencast de Jeff Potts mencionado anteriormente.

Alfresco Hack: Las consolas “escondidas” de Alfresco

Los que conocéis Alfresco en profundidad sabéis que éste guarda algunas sorpresas interesantes. Entre ellas se encuentran las consolas. Básicamente son herramientas que nos permiten acceder a información o hacer tareas de bajo nivel con Alfresco vía web, destinado principalmente a programadores o administradores.

Vamos a ver que consolas tenemos disponibles y en qué nos pueden ayudar cada una de ellas.

Nota 1: para acceder a estas consolas previamente hay que estar logueado como usuario “admin” en Alfresco Explorer (http://localhost:8080/alfresco).
Nota 2: para ejecutar comandos en estas consolas hay que escribir el comando y pinchar en “Submit”, si escribimos el comando y pulsamos “Enter” no ejecutará el comando.

La “Consola del Repositorio” es una alternativa al cliente web (Alfresco Explorer) y nos permite desplegar, recargar, activar y desactivar modelos en caliente. Podemos hacer lo mismo con ficheros .properties relacionados con idiomas. Un comando de ejemplo podría ser “deploy model alfresco/extension/exampleModel.xml“.

Permite cargar los cambios realizados en el fichero “web-client-config-custom.xml” sin necesidad de reiniciar el servidor. Relmente recarga toda la información modificada que contenga el bean webClientConfigSource en el archivo “alfresco/web-client-application-context.xml” de ahí que digamos que recarga los cambios en “web-client-config-custom.xml“. Más información aquí. Hacer esa tarea es tan fácil como escribir “reload” y hacer clic en “Submit“. Veremos algo como lo siguiente:

<Built-in evaluators> ---> OK
classpath:alfresco/web-client-config.xml ---> OK
classpath:alfresco/web-client-config-dialogs.xml ---> OK
classpath:alfresco/web-client-config-wizards.xml ---> OK
classpath:alfresco/web-client-config-properties.xml ---> OK
classpath:alfresco/web-client-config-navigation.xml ---> OK
classpath:alfresco/web-client-config-wcm.xml ---> OK
classpath:alfresco/web-client-config-actions.xml ---> OK
classpath:alfresco/web-client-config-forum-actions.xml ---> OK
classpath:alfresco/web-client-config-wcm-actions.xml ---> OK
classpath:alfresco/web-client-config-workflow-actions.xml ---> OK
classpath:alfresco/extension/web-client-config-custom.xml ---> Skipped - not available
workspace://SpacesStore/app:company_home/app:dictionary/app:webclient_extension/cm:web-client-config-custom.xml ---> OK

Esta consola nos permite hacer tareas de bajo nivel sobre la AVM (Advanced Versioning Manager), sistema usado por Alfresco WCM, posiblemente la consola más desconocida y compleja de utilizar. AVM Console cuenta con una ayuda (http://localhost:8080/alfresco/faces/jsp/admin/avm-console-help.txt) aunque tenemos más información aquí y aquí.

Este es el más conocido ya que es accesible desde la “Consola de Administración”. Es una herramienta muy útil para desarrolladores y administradores. Permite hacer búsquedas y localizar información extendida sobre los contenidos del repositorio. Soporta búsquedas de varios tipos:

  1. noderef, por ejemplo workspace://SpacesStore/3d9b49aa-54b5-41b7-8842-eecde41a9b73
  2. xpath
  3. lucene
  4. fts-alfresco (full text search)
  5. cmis-strict
  6. cmis-alfresco
  7. selectnodes.

Posiblemente el mejor amigo de un programador de workflows. Esta consola es una caja de herramientas completa para depurar nuestros workflows. Más info y sintaxis aquí.

Consola para gestión, creación y borrado, activación/desactivación, exportación e importación de tenants. Recuerda que para activar el multitenant en Alfresco hay que renombrar sin .sample los ficheros en tomcat/shared/classes/alfresco/extension/mt y reiniciar el servidor.
Otras URLs interesantes dentro de nuestro sistema:

Aquí no voy a explicar nada, ejecútala espera unos segundos y mira. ¿Interesante verdad?

Esta nos sirve para ver todos los WebScripts disponibles, información de uso de cada uno de ellos y además podremos desplegar nuevos WebScripts.

¡Que curioso! Cuando he terminado de escribir el artículo he hecho una búsqueda en Google y me encuentro esto, un post del gran Jeff Potts sobre esto mismo…

Actualización 27 Mayo 2014:

A esos que cito habría que añadir:

http://localhost:8080/alfresco/service/enterprise/admin -> Consola de Administración desde 4.2 (configuración de cluster, ldap, mail, etc. via web). Solo Alfresco Enterprise.

http://localhost:8080/share/service/index -> web scripts de Alfresco Share

http://localhost:8080/alfresco/activiti-admin -> Activiti Admin para Alfresco Enterprise

http://localhost:8080/share/page/modules/deploy -> Despliegue y control de módulos en Share

http://localhost:8080/alfresco/service/cmis/index.html -> CMIS panel

Adicionalmente para Alfresco Enterprise desde la 4.2 hay un módulo muy útil que se llama Alfresco Support Tools, se puede encontrar aquí:

https://addons.alfresco.com/addons/support-tools-admin-console

Alfresco Hack: cómo sacar un informe rápido de los contenidos del repositorio

Ya lo vi hace tiempo en Think Alfresco y sabía que algún día lo iba a necesitar, ahora quiero compartirlo con vosotros. Sabemos lo que ocupa el repositorio, sería tan fácil como hacer un du -sh contentstore, pero ¿qué tipo de archivos almacena ese repositorio y cuantos de cada tipo? Saber ese dato es importante al hacer migraciones, optimizar Lucene, etc. Es tan fácil como ejecutar el siguiente comando desde el directorio superior al contentstore de turno:

$ find ./contentstore -type f -exec file -inb {} \;| sort |uniq -c|sort -nr

Este comando nos dará como resultado algo parecido a lo siguiente:

    378 application/msword
    147 application/pdf
     72 text/plain; charset=us-ascii
     58 text/x-c++; charset=iso-8859-1
     12 text/plain; charset=utf-8
      8 text/html
      2 application/x-zip
      2 text/plain; charset=iso-8859-1
      2 image/jpeg
      2 application/x-empty
      2 text/x-c; charset=utf-8
      1 text/x-c++; charset=utf-8
      1 image/png

Fácil ¿no? Claro que también se puede hacer con un JavaScript y ejecutarlo como acción pero pienso que así es más rápido, además es el “Sys Admin way”.