Alfresco + Bonita

cancel
Showing results for 
Search instead for 
Did you mean: 
Highlighted
alex_gr
Member II

Alfresco + Bonita

Hola,

estoy intentando subir un archivo a Alfresco a traves de Bonita y no lo consigo. He visto un video de Bonita que explica la parte de configuracion del proceso para poder subir el fichero. Lo que no he visto es si tengo que configurar algo en Alfresco para que sea capaz de recibir ese fichero.

El entorno de pruebas es un Windows Server 2003, Bonita 5.6 y Alfresco 3.4 Enterprise. En el proceso de Bonita uso el conector Alfresco "upload by path" y lo configuro segun el video-tutorial: http://www.youtube.com/watch?v=93fLcoKlCgk

La unica excepcio es que con Bonita 5.6 no puedo usar la expresion
file.getFilePath()
y en su lugar uso este codigo:


import org.ow2.bonita.facade.*;
import org.ow2.bonita.facade.impl.StandardAPIAccessorImpl;
import org.ow2.bonita.facade.runtime.AttachmentInstance;
import org.ow2.bonita.util.AccessorUtil;

QueryRuntimeAPI queryRuntimeAPI = new StandardAPIAccessorImpl().getQueryRuntimeAPI();
AttachmentInstance attachment = queryRuntimeAPI.getLastAttachment(processInstance.getProcessInstanceUUID(),file.getName());

byte[] contents = queryRuntimeAPI.getAttachmentValue(attachment);
File file = new File(attachment.getFileName());
file.createNewFile();
if (contents != null) {
    OutputStream os = new FileOutputStream(file);
    os.write(contents);
    os.close();
}
return file.getAbsolutePath()

En el video dice que se suba el directorio destino sea /Users Home/. He creado ese directorio en la raiz del repositorio pero no recibe el fichero.

Gracias por la ayuda
9 Replies
wgonzalez
Active Member

Re: Alfresco + Bonita

Hola, Alex.
Perdón por tardar en responder, no habia entrado aqui hace tiempoya resolviste tu problema?

Te comento que estamos planeando un taller de integración de Alfresco+Bonita para dentro de unas semanas.
Estate pendiente.
lvasquez15
Member II

Re: Alfresco + Bonita

Hola wgonzalez ,

Estoy desarrollando un proceso con bonita y tengo que integrarlo con Alfresco 4 estado viendo el video que subieron pero no consigo ver  bien ,usted que cree que pueda subir los códigos o en tal caso algún ejemplo para integrarlo??

Gracias por anticipado!!
hwong23
Member II

Re: Alfresco + Bonita

Saludos.

Para subir un archivo desde Bonita 5.7.2 el proceso es parecido al del video. Pero con las siguientes diferencias:
En las propiedades del conector:
file to upload: c:\alfresco\${archivo.getFileName()}
file name: ${archivo.getFileName()}
dest. folder: /User%20Homes/

Le aseguro que funciona.
HWO
hwong23
Member II

Re: Alfresco + Bonita

Alguien ha podido descargar un archivo de Alfresco (ver 4 preferible)?

La idea es obtener el ID del archivo para pasarselo luego a un conector, pero ningun ejemplo me funciona.
Gracias.
sati
Member II

Re: Alfresco + Bonita

Buenas, acabo de ver este mensaje, contestare por si alguien tiene las mismas dudas. para subir un archivo desde bonita 5.6 a alfresco 3.4 solo basta con seguir este tutorial:

http://www.bonitasoft.com/resources/documentation/bos-56/connectivity/connectors-bonita-open-solutio...

ahi dice "byPath" no se preocupen, solo adjuntes la variable tipo attachment.

file name den un nombre a su variable pueden usar lo sgte:
suponiendo que trabajamos con una variable de nombre "archivo" de tipo "attachment" editamos con el groovy editor y lo dejamos como  ${archivos.getFileName()}

mime type (tipo de dato) si suben un .txt lo dejan como esta, si suben una foto busquen a que mimetype corresponde un .jpg, aca tienen una lista con los mimetype http://www.feedforall.com/mime-types.htm

destination folder, lo explicare de la sgte forma:
yo cree en alfresco una carpeta de nombre "bonita repository" (Espacio de empresa > bonita repository) entonces para decirle a bonita que me guarde mis archivos ahi le indico la direccion de la carpeta, seria asi: /bonita%20repository ("%20" indica un espacio)

al terminar de configurar el conector nos pide parametros de vuelta podemos perfectamente eliminarlos todos (el archivo igual se sube a alfresco), o crear las variables para recibir esos datos, lei por ahi que bonita tenia un bug y no adjuntaba "responseType" a la variable de destino, se puede editar la expresion en groovy editor copiando esto:
"import org.apache.abdera.model.Entry;
import org.apache.abdera.model.Document;
import org.apache.abdera.model.Element;
Document<Element> doc = (Document<Element>)responseDocument;
Entry entry = (Entry)doc.getRoot();
return entry.getId().toString();" (asi tal cual, copien y peguen) esto les entragara el uuid (identificador unico universal) de su documento.
todos estos datos de vuelta que nos ofrece el conectos son de tipo string, statusCode de tipo number (Integer).

sobre el usuario, se lo entrgas en la configuracion del conector, por ejemplo user: admin pass: ***** eso significa que el usuario que adjunta el archivo es el administrador.

espero que les sea de ayuda. saludos!

(ahora si alguien sabe como descargar archivos que me diga xDDD)
etchegaray
Member II

Re: Alfresco + Bonita

Trabajo con bonita 5.6 y Alfresco 4.0.
Tengo interés en crear una copia de trabajo de un documento, bajar esa copia de trabajo a Bonita, editar ese documento y volver a subirlo. Para eso tengo dos proyectos en Bonita que me permiten bloquear y desbloquear un documento, recogiento el ID de bloqueo (id de la copia de trabajo).

Todo me funciona sin problemas si los type mime son text/plain. En cambio si utilizo application/msword o application/vnd.openxmlformats-officedocument.wordprocessingml.document (Microsfot Word 2007) al ejecutar el conector de Bonita de "actualizar archivo bloqueado" me da el siguiente error

org.ow2.bonita.facade.exception.BonitaInternalException: Unexpected Exception arrived in Bonita: java.lang.NullPointerException

org.apache.abdera.protocol.client.ClientException: java.lang.NullPointerException
java.lang.NullPointerException

¿alguna idea?. Gracias.
etchegaray
Member II

Re: Alfresco + Bonita

HWONG23, acabo de conocer este foro buscando un solución a otro problema. ¿Has conseguido solucionar el problema de descargar un archivo de Alfresco?. Yo he conseguido bajarme un archivo conociendo el ID del mismo.
edmon
Member II

Re: Alfresco + Bonita

Saludos, yo les comentaria que los conectores de alfresco que posee bonita son muy estaticos y no dejan aprovechar mucho la funcionalidad de la integracion entre el BPM y Alfresco.

Lo mejor opción segun mi criterio es crearme mi propio conector en bonita tipo java definir variables para los metadatos que deseo adjuntar al documento, y utilizar el API cliente de webservices

les comparto el codigo para subir un documento y el tema de la descarga es totalmente similar, una ventaja es que para descargar documentos no necesitas entrar a alfresco para saber el ID del nodo sino que puedes buscar el documento por cualquiera de los metadatos

Codigo:

public  void addContent(DocumentoClase documentoClase, byte[] filebytes, String URL_SERVER,String usuario, String password,String nameFile,String tipeFile,String title,String description,String rutaAlfresco) throws Exception
   {      
      setServerUrl(URL_SERVER);      
      
      // Iniciamos la sesión
      AuthenticationUtils.startSession(usuario,password);

      try
      {   
         
         // Creamos la referencia del nodo padre, donde se añadira el contenido en este caso el nodo padre es company_home
         Store storeRef = new Store(Constants.WORKSPACE_STORE, "SpacesStore");
         
         //ParentReference companyHomeParent = new ParentReference(storeRef, null, "/app:company_home/cmSmiley TongueRUEBA",Constants.ASSOC_CONTAINS, null);
         ParentReference companyHomeParent = new ParentReference(storeRef, null, rutaAlfresco, Constants.ASSOC_CONTAINS, null);
         
         // Asignamos un nombre para el nodo que vamos a crea en company_home         
         companyHomeParent.setChildName("cm:" + nameFile);

         // Comienza la construcción de nodo
         NamedValue[] contentProps = new NamedValue[1];
         contentProps[0] = Utils.createNamedValue(Constants.PROP_NAME, nameFile);
         
         CMLCreate create = new CMLCreate(
               "1",
               companyHomeParent,
               null,
               null,
               null,
               "{http://www.empresa.com/modelos/contenido/1.0}documentoModelo}"
               contentProps);

         // Aadimos aspectos al nodo
         NamedValue[] titledProps = new NamedValue[3];                  
         
         titledProps[0] = Utils.createNamedValue(Constants.PROP_TITLE, title);
         titledProps[1] = Utils.createNamedValue(Constants.PROP_DESCRIPTION,   description);
         titledProps[2] = Utils.createNamedValue("http://www.empresa.com/modelos/contenido/1.0}numeroSolicitud',documentoClase.getNumeroSolicitud());
         CMLAddAspect addAspect = new CMLAddAspect(Constants.ASPECT_TITLED,titledProps, null, "1");

         // Contruimos CML Block, con el nodo y sus aspectos
         CML cml = new CML();
         cml.setCreate(new CMLCreate[] { create });
         cml.setAddAspect(new CMLAddAspect[] { addAspect });

         // Creamos y recuperamos el contenido vía Repository Web Service
         UpdateResult[] result = WebServiceFactory.getRepositoryService().update(cml);
         Reference content = result[0].getDestination();

         // Escribimos el contenido
         ContentServiceSoapBindingStub contentService = WebServiceFactory.getContentService();
         ContentFormat contentFormat = new ContentFormat(tipeFile, "UTF-8");
         contentService.write(content, Constants.PROP_CONTENT, filebytes, contentFormat);

      }catch(Exception e){         
         e.printStackTrace();
      }finally {
         // Finalizamos la sesión
         AuthenticationUtils.endSession();
      }
   }
   
   /**
    * Metodo para fijar la URL del servidor e alfresco
    * @param AlfrescoServerUrl
    */
   public  void setServerUrl(String AlfrescoServerUrl) {
      try {
         WebServiceFactory.setEndpointAddress(AlfrescoServerUrl);
      }catch(Exception e){
         GeneracionLog.error("Error " + e.getMessage());
      }
   } 


Saludos.
cristinamr
Intermediate

Re: Alfresco + Bonita

Muchas gracias por compartir el código EDMON, seguro que a más de uno le viene bien.

Un saludo!

PD: Por cierto un consejo si quieres escribir código y que salga "bonito" ponlo entre los tags
 y 
Smiley Wink