Secciones

Integrando Alfresco y Grails mediante CMIS

Una de las grandes ventajas que ofrece alfresco son sus capacidades de integración, permitiendo acceder al repositorio mediante por ejemplo servicios SOAP o Rest.

En esta entrada vamos a explicar como realizar una integración desde grails para modificar el estado de un documento utilizando los servicios Rest de CMIS.

El servicio que ofrece Alfresco para realizar esta modificación es:
  • /alfresco/service/cmis/i/
Este servicio necesita que se le envíe por put una cadena xml, y en el ejemplo siguiente, estamos indicando que modifique la propiedad factura:estadoProceso por el valor Pendiente Legalizar.

Para realizar esta llamada desde grails, debemos utilizar el siguiente código:
        try{  
            if (alfrescoIDs.size != 0){
                for (i in 0..alfrescoIDs.size - 1){
   
                    def httpAlfresco = new RESTClient(ALFRESCO_URL)
                       
                    def authString = USR_ALFRESCO + ":" + PSW_ALFRESCO
                    def authHash = authString.bytes.encodeBase64().toString()
                      
                    def idAlfresco = alfrescoIDs[i].toString()
                    idAlfresco = idAlfresco.replaceAll("urn:uuid:", "")
                      
                    def resp = httpAlfresco.put(
                        path: "/alfresco/service/cmis/i/${idAlfresco}",
                        requestContentType : 'application/atom+xml',
                        contentType: TEXT,
                        headers:[Authorization:"Basic ${authHash}"],
                        body : " " + status + ""
                        )
                        assert resp.status == 200
   
                }
                actualizaEstado = true
            }  
        } catch (Exception e){
            log.info(e.message)
        }
 Hay que prestar especial atención a dos temas:
  1. La autenticación se debe pasar como un parámetro en el header y codificarlo en base64, ya que utilizando el método auth de RestClient no funciona correctamente.
  2. Se debe establecer el requestContenType como application/atom+xml sino recibiremos un mensaje de error. Para más información podéis consultar esta entrada. https://forums.alfresco.com/en/viewtopic.php?f=45&t=37563.
  3. Se debe utilizar el cliente RESTClient ya que es el único que he encontrado que implementa el método put.
Saludos,

JK

2 comentarios:

  1. No son 2 temas, son 3 ;)

    Bonito post.. Necesitamos más!

    Saludos

    ResponderEliminar
  2. Gracias muy interesante, si tienes mas información al respecto estaría excelente

    Saludos

    ResponderEliminar