bonitasoft-logo-900-387-blanc

Bonita Open Solution, una solucion potente y libre para el desarrollo de programas de BPM

1 Star2 Stars3 Stars4 Stars5 Stars6 Stars7 Stars8 Stars9 Stars10 Stars (7 votes, average: 8,29 out of 10)
Loading ... Loading ...

En este post vamos a ver como iniciarnos en el uso de las herramientas y del entorno de Bonita Open Solution(Bonita OS) para la gestión de procesos de negocio(BPM), si se quiere seguir el ejemplo es recomendable tener instalado el Bonita Studio.

Lo primero que vamos a hacer es repasar las herramientas principales que nos ofrece el entorno de Bonita para desarrollar nuestras aplicaciones.

  • Bonita Studio: nos permite modelar el proceso, es decir, definir las tareas , definir el flujo del proceso, definir grupos de usuarios, asignar conectores definir el look & feel y un largo etcétera.
  • Bonita Form Builder: forma parte del Bonita Studio, es el modulo en el que se definen los formularios que habrán de ser rellenados por los usuarios y se declaran validadores para el formulario entero o para los campos del mismo.
  • Bonita User Experience: Es una aplicacion encargada de desplegar y gestionar los procesos ya desplegados así como las instancias de cada proceso.
  • APIs: contamos con 4 APIs distintas para poder comunicarnos con el motor de Bonita(aunque, de momento, no entraremos a ver en detalle estas APIs), una API java, una api para acceder mediante un servidor REST y por ultimo 2 APIs para acceder mediante EJB (una para EJB2 y otra para EJB3).

Conceptos:

Antes de empezar a trabajar con Bonita hay una serie de conceptos que conviene tener claros:

Primero, ¿Qué es un proceso? : un proceso es un conjunto ordenado de fases o tareas para conseguir un objetivo, esto incluye desde el montaje de un coche a la tramitacion de una licencia de pesca.

ProcessDefinition(proceso): Se trata de la definición del proceso, con su flujo, sus conectores, sus actividades etc.

ProcessInstance(Instancia de proceso): Los procesos no suelen realizarse una única vez, por eso, cada instancia de proceso corresponde con una ejecución diferente del mismo, con su estado(terminado, en ejecución,…), sus variables y todo lo necesario para que se ejecute el proceso.

ActivityDefinition(Actividad): Es la definición de una actividad, es decir, como serán los formularios(si los tiene), que usuarios deben realizarla, cuales son sus conectores…

ActivityInstance(Instancia de actividad): A medida que una instancia de proceso se va ejecutando por cada actividad que ejecuta se crea una instancia de actividad que recoge valores como el momento en el que fue iniciada, que usuario la inició, el estado de un ficheros tras justo antes de finalizar ese activity, etc.

Creación de un proceso:

La creación de un proceso comienza en el Bonita Studio . Lo primero es añadir un evento de inicio:

Tenemos 4 tipos de inicio:

  • El normal, inicia la instancia de proceso y da paso a la primera actividad sin hacer nada más.
  • Inicio con mensaje: inicia un proceso y envía un mensaje.
  • Inicio Programado: inicia la instancia del proceso en función de una fecha u hora.
  • Inicio de señal: inicia una instancia de proceso al recibir una señal.

Una vez iniciado el proceso debemos definir las tareas y la transición entre ellas.

esquemaMini

Ejemplo de flujo de un proceso en el Bonita Studio

Bonita Studio incluye una serie de ejemplos de procesos para familiarizarse con el entorno y descubrir las posibilidades que ofrece, estos procesos de ejemplo se pueden encontrar y cargar en nuestro workspace desde la opción Examples del menú principal.

Añadir un formulario:

Para añadir un formulario necesitamos una tarea humana (existen tareas automáticas , tareas humanas y subprocesos). Al crearla veremos que nos solicitará que le se la asignemos a un grupo de usuarios, para ello la seleccionamos para ver su menú de opciones.

y desde la pestaña de actores podremos crear un nuevo usuario, introduciendo su nombre, o un nuevo grupo de usuarios definiendo si se cargan de una base de datos, a través de LDAP, etc.

Una vez tenemos los usuarios vamos a crear el formulario. Para ello accedemos a la ventana formulario y seleccionamos “agregar”, tras lo cual se nos abrirá una ventana para elegir el tipo de widgets que podremos utilizar en el formulario, seleccionamos los que creamos que vamos a usar y finalizamos la creación del formulario.

Ahora se nos abrirá el Bonita Form Builder desde el que podremos crear nuestro formulario con los campos que deseemos de una forma sencilla e intuitiva.

Con lo visto hasta ahora podremos crear procesos sencillos y asignar tareas con formularios a distintos grupos de usuarios.

En el siguiente post explicaré como desplegar nuestro proceso en un servidor de aplicaciones y en el bonita experience así como a generar conectores para enviar correos o conectar con la base de datos y validadores para nuestros formularios utilizando para ello groovy.

  • afernandez

    Un post muy entretenido y muy bien explicado. Jamás había oído hablar de este tipo de herramientas y para una primera vez ha sido agradable de leer.

    Un saludo

  • Jon

    Gran producto y gran post! esperamos más pronto ;)

  • http://theinit.com jordi

    Ruben, muy bueno el post. Muy completo. Seguro que en los foros de bonita te lo agradecen :)

  • Oscar

    Hola, muy interesante… sabes hasta donde puede uno profundizar en la interface a cliente para facilitar el trabajo a los usuarios finales? por ejemplo temas como web 2.0? además, sabes donde se pueden ver ejemplo de implementaciones?

    Gracias…

    • rzornoza

      Hola Oscar. Para cambiar la apariencia y personalizar los formularios es posible cambiar las plantillas de todo el proceso si quieres que el cambio sea general .En este link lo esplican muy bien( http://www.bonitasoft.org/blog/video/exploring-bonita-open-solution-change-default-web-app-template-and-customize-confirmation-messages/ ), con un video incluso(en perfecto inglés). Además de las plantillas predeterminadas es posible crear una propia, la forma más sencilla es descargar la plantilla por defecto (Download default…) y editarla a nuestro gusto.

      También es posible cambiar la plantilla de cada formulario de manera independiente desde la pestaña “General” del Form Builder(de nuevo, lo más facil es una vez terminado el formulario descargar la plantilla por defecto).

      No es facil entrar a los detalles de todas las opciones en un simple comentario sin imagenes y sin alargarlo demasiado, creo que este tema se merece un post para él solito :P , de todos modos si tienes alguna duda especifica no dudes en hacernosla saber, será un placer contestar.

      Un saludo, y gracias a ti por comentar.

      • jmarti

        Yo añadiría el hecho de que si los formularios no son lo suficientemente flexibles, siempre puedes hacerte una aplicación adhoc que haga luego llamadas a la API para enviar los datos introducidos por el usuario. (el formulario de bonita podría hacer un redirect a esta pantalla)

  • jairo

    hola, estoy interesado en aprender a utilizar bonitasoft, pero se me está haciendo complicada la conectividad con mysql.

    ya hice algunos ejercicios pero sin conectarme a ninguna db, y me pareció muy interesante, ahora lo que necesito es:

    1- cargar información desde mysql (pedidos por ejemplo)
    2- darle seguimiento a esos pedidos a través de BOS

    Para el efecto necesito tanto cargar información desde mysql así como vaciar la información relativa a la situación actual del proceso.

    He buscado como hacerlo por todos lados y no he obtenido información relevante.

    Gracias por la ayuda.

    • rzornoza

      Hola Jairo,

      Si te he entendido bien necesitas configurar la base de datos de Bonita, para ello lo primero que tienes que saber es que por cuestion de eficiencia, bonita utiliza 2 bases de datos de forma simultanea, una para almacenar todos los datos de los procesos ya terminados (bonita_history) y otra para todo los procesos que siguen activos (bonita), si no las tienes tendrás que crearlas y al conectarse a ellas por primera vez bonita generará las tablas que necesite.

      Para usar una base de datos que no sea la H2 que viene predeterminada hay que modificar varios ficheros,

      primero el bonita-journal.properties y el bonita-history.propertes que podrás encontrar en :BONITA_HOME/server/default/conf

      En la seccion comentada como “Database Connection” hay una lista de configuraciones para las distintas bases de datos.
      Asegurate de comentar la configuracion de h2 y busca la configuracion de MySql y descomentalá de modo que quede algo similar a esto:

      hibernate.dialect org.hibernate.dialect.MySQL5InnoDBDialect
      #hibernate.connection.shutdown true
      bonita.hibernate.interceptor org.ow2.bonita.env.interceptor.MySQLDescNullFirstInterceptor

      esta operación hay que realizarla en los dos ficheros.

      Despues tenemos que editar el fichero
      conf/context.xml
      donde nuevamente tenemos que comentar los datos de la conexion h2 y descomentar el ejemplo de MySql que debería estar debajo.

      despues de descomentarlo tenemos que configurar los datos de nuestra base de datos.

      Debe quedar algo similar a esto(asegurate de tener la librería c3p0):

      Resource
      name="bonita/default/journal"
      auth="Container"
      type="com.mchange.v2.c3p0.ComboPooledDataSource"
      factory="org.apache.naming.factory.BeanFactory"
      description="DB Connection"
      driverClass="com.mysql.jdbc.Driver"
      jdbcUrl="jdbc:mysql://localhost:3306/bonita?dontTrackOpenResources=true"
      user="root"
      password="password"
      initialPoolSize="1"
      maxPoolSize="15"
      minPoolSize="3"
      maxConnectionAge="0"
      maxIdleTime="1800"
      maxIdleTimeExcessConnections="120"
      idleConnectionTestPeriod="30"
      testConnectionOnCheckout="true"
      acquireIncrement="3"/>
      ResourceLink
      global="bonita/default/journal"
      name="bonita/default/journal"
      type="javax.sql.DataSource" />
      Resource
      name="bonita/default/history"
      auth="Container"
      type="com.mchange.v2.c3p0.ComboPooledDataSource"
      factory="org.apache.naming.factory.BeanFactory"
      description="DB Connection"
      driverClass="com.mysql.jdbc.Driver"
      jdbcUrl="jdbc:mysql://localhost:3306/bonita_history?dontTrackOpenResources=true"
      user="root"
      password="password"
      initialPoolSize="1"
      maxPoolSize="15"
      minPoolSize="3"
      maxConnectionAge="0"
      maxIdleTime="1800"
      maxIdleTimeExcessConnections="120"
      idleConnectionTestPeriod="30"
      testConnectionOnCheckout="true"
      acquireIncrement="3"/>
      ResourceLink
      global="bonita/default/history"
      name="bonita/default/history"
      type="javax.sql.DataSource" />
      /Context>

      (En los comentarios no permite etiquetas xml dejo solo el nombre de la etiqueta pero verás la estructura en el fichero de configuración)

      Si no tienes problemas con el inglés la página de bonita donde explican este proceso es :
      http://www.bonitasoft.com/resources/documentation/bos-56/system-administration/installation/prepare-databases-use-bos/configure-mysql-and-postgresql

      pero necesitas estar registrado para poder leer algo relevante.

      Un saludo y espero que te sea de ayuda.

      • Jairo

        Gracias rzornoza, me es de mucha ayuda tu info.

        • rzornoza

          De nada Jairo, un placer. :)

  • Natalia

    Hola, buscando información sobre este producto llegué a este blogg. Junto con un compañero de la facultad estamos desarrollando una herramienta y lo que necesitamos saber es si existe alguna forma de exportar, por ejemplo a un formato XML, una instantánea (snapshot) de un proceso en algún momento dado? Necesitamos obtener información (pensamos en obtenerla en xml) para poder generar estadísticas parecidas a las que muestra el “Bonita User Experience”.
    Consultamos en el foro de BonitaSoft y nos dicen que existe algo parecido en el BonitaSoft-SP. El problema es que nosotros estamos trabajando con la versión open source.
    Desde ya muchas gracias.

    • rzornoza

      Hola Natalia,
      Si quieres el resultado directamente en xml puedes hacer uso de la API rest. El agregar el servicio rest puede ser un poco lio pero aquí lo explican bastante bien.

      http://www.eintel.com.au/content/bonita-using-rest-api

      Está en perfecto inglés y es de la versión 5.3, espero que no haya cambiado mucho este proceso en las últimas versiones.
      Otra alternatiba sería utilizar la API java, pero esto ya implicaría crear una aplicacion que se conectara a nuestro bonita y una vez tenemos los objetos en java puedes hacer las estadisticas sin necesidad de formatear el xml.
      Y por último, si tienes acceso a la base de datos toda la información que maneja bonita se guarda ahí. Quizá asuste un poco al principio pero los nombres de la mayoría de las tablas son bastante descriptivos y una vez que la conoces puedes acceder directamente a cualquier cosa.

      Si analizamos las 3 opciones tenemos que:

      -El acceso directo a la base de datos no es recomendable si tienes previsto cambiar de versión de Bonita ya que la estructura puede cambiar y habría que modificar las SQLs. Además, no hay ningún control de usuarios ni nigun tipo de filtro o ayuda (tienes acceso a las tablas con todos los datos y si buscas datos especificos de un proceso o usuario tienes que filtrar mediante los ids de las tablas). Si sólo se quieren sacar unos cuantos datos puede ser lo más rápido y directo, sólo hace falta saber SQL y ver donde se guardan los datos, pero no vas a encontrar documentación de ningún tipo y no te recomiendo hacer ningun tipo de insert, delete o update.

      -El acceso mediante la API rest te devuelve los datos en XML y despues puedes tratarlos desde donde quieras; PHP, java, .net e incluso android o iOS. Además es un proceso documentado y puedes encontrar ayuda si te atascas.

      -Si vas a usar la API java hay que desarrollar otra aplicacion que se conecte a Bonita. A cambio, tienes acceso directo a toda la API y una vez montado resulta relativamente facil consultar o incluso modificar o lanzar cualquier proceso y es quizás la forma más habitual de acceso y por tanto, la mejor documentada.

      Sea cual sea la forma que elijais mucho ánimo y suerte con el proyecto y si teneís cualquier duda por aquí estaremos encantados de ayudar en lo posible.

      Un saludo

      • jmarti

        Nosotros en un proyecto cogemos la instantánea de un proceso mediante la API y luego lo mostramos en plan “bonito”.

        La API de java es muy completa.

        • Natalia

          rzornoza y jmarti Muchas Gracias por respondernos tan rápido!!! Estaba perdiendo las esperanzas de encontrar opciones fuera de BonitaSoft Subscription Pack. En breve nos ponemos a trabajar en ello.
          El acceso mediante la API rest me parece muy interesante!
          Lo de la API java, aun no me imagino cómo obtener los datos de bonita pero analizaremos bien las propuestas y veremos que podemos hacer. Seguramente los estaré molestando con alguna nueva duda!
          Nuevamente Mil Gracias!!! Saludos.

          • rzornoza

            De nada Natalia,

            Obtener los datos de Bonita mediante la API java es posible mediante el Bonita Runtime que sería algo así como el motor de bonita, te dejo un par de links de por si quieres echarle un vistazo al proceso de conectar una aplicación con Bonita.

            http://www.bonitasoft.org/blog/tutorial/building-your-applications-with-bonita-runtime-part-2/
            http://www.bonitasoft.org/blog/tutorial/building-your-applications-with-bonita-runtime-%E2%80%93-part-3/

            La parte 1 de la guía es teoría más general, no está de más conocerla (de hecho es recomendable que al menos te suene si empiezas a trabajar con la API) pero no es necesaria para ver cómo funciona.

            Te cuentan sobre todo qué es lo que puedes configurar y tienes un ejemplo de aplicacion.

            La forma en la que lo hacen no es la que más me gusta pero lo bueno es que al final tienes el ejemplo para descargar y puedes tenerlo conectado en poco tiempo.

            Utilizan maven para la gestion de dependencias por que la verdad es que son bastantes pero básicamente valdría con tener el bonita-server.jar en el classpath y despues usar la API (Pero obviamente, sin las dependencias el bonita server no funcionará).

            Un saludo, y pregunta sin miedo, no es molestia alguna.

            P.S: por cierto, cuidado con el ejemplo si tienes más procesos desplegados. Si no me equivoco la última instruccion borra todos los procesos.

            P.P.S: veo que en los comentarios dejan un link con las dependencias de maven:
            http://maven.ow2.org/maven2/org/ow2/bonita/bonita-distrib/5.2.2/bonita-distrib-5.2.2.zip

            es bonita 5.2.2 no se si será compatible con la versión que esteis usando, pero seguro que jugando con la URL de maven podeis encontrar las librerías de vuestra versión ;) .

  • Diego Armando Muñoz

    Un post muy completo. Felicitaciones!

    En estos momentos estoy intentando hacer una aplicación web que se comunique con el Motor de procesos de Bonita usando la API java, y que los valores que ingrese el usuario por el formulario web de mi aplicación se graben adecuadamente en las BD de Bonita((bonita_journal y bonita_history)) en mi caso configuradas en Oracle, sin embargo estoy un poco confundido al usar la API de java :(

    Podrías por favor explicar como usar algunos de los métodos de cada uno de los “componentes principales” de la API como ManagementAPI, RuntimeAPI, QueryRuntimeAPI y QueryDefinitionAPI??

    La única información que tengo es la que ofrece Bonita: http://www.bonitasoft.org/docs/javadoc/bpm_engine/5.6/ y el ejemplo desarrollado en http://www.bonitasoft.org/blog/tutorial/building-your-applications-with-bonita-runtime-part-2/ y la parte 3

    Pero como dije anteriormente me tiene un poco confundido.

    Infinitas Gracias por la ayuda. Saludos :)

    • rzornoza

      Perdon por tardar en responder estos días ando bastante liado.

      A ver, lo básico:
      ManagementAPI: se utiliza para desplegar procesos y definir permisos.
      QueryDefinitionAPI: gestionar las definiciones de procesos y tareas como por ejemplo consultar la última version de un proceso.
      QueryRuntimeAPI: es una de las que más usaremos, nos permite consultar procesos, sus variables, ficheros ,activities… y practicamente cualquier cosa que esté en una instancia de proceso en nuestro Bonita.
      RuntimeAPI: nos permite arrancar nuevas instancias de un proceso, nuevas tareas, establecer variables…

      Algunos ejemplos:
      //iniciar una instancia de proceso
      AccessorUtil.getRuntimeAPI().instantiateProcess(new ProcessDefinitionUUID(processUUID));

      De modo similar a como hemos obtenido el RuntimeAPI del AccesorUtil pueden obtenerse el resto de APIs.

      //Obtener un proceso
      final ProcessDefinition process = queryDefinitionAPI.getProcess(processName, processVersion);
      //Obtener todas las tareas “Ready” de una instancia de proceso
      Collection taskInstances =queryRuntimeAPI.getTaskList(processInstance, ActivityState.READY);

      Te recomendaría que consultaras los métodos de las cuatro APIs en los sigueintes links:

      http://www.bonitasoft.org/docs/javadoc/bpm_engine/5.6/org/ow2/bonita/facade/ManagementAPI.html

      http://www.bonitasoft.org/docs/javadoc/bpm_engine/5.6/org/ow2/bonita/facade/QueryDefinitionAPI.html

      http://www.bonitasoft.org/docs/javadoc/bpm_engine/5.6/org/ow2/bonita/facade/QueryRuntimeAPI.html

      http://www.bonitasoft.org/docs/javadoc/bpm_engine/5.6/org/ow2/bonita/facade/RuntimeAPI.html

      Si tienes alguna otra duda más especifica no dudes en comentar, y espero poder responderte antes.

      • Angel Ramón

        processUUID es el nombre del proceso?

        • rzornoza

          El ProcessDefinitionUUID incluye el nombre del proceso y la versión (hay que decirle a Bonita que versión del proceso quieres que arranque). Si conoces la version que tienes que utilizar y el nombre del proceso puedes obtenerlo mediante
          final ProcessDefinition process = queryDefinitionAPI.getProcess(processName, processVersion);

          y despues pedirle al ProcessDefinition su UUID.

          Y si sólo conoces el nombre del proceso o quieres que siempre utilice la última versión disponible puedes utilizar el método getLastLightProcess(String processName) de la misma API.

          Espero haber respondido a tu pregunta :) .

          Un saludo

  • Alejandra

    Hola, estoy utilizando BonitaSoft para un proyecto y necesito saber si es posible generar actores a partir de usuarios cargados en una base de datos MySQL.
    Seria de gran ayuda tu pronta respuesta.

    Muchas Gracias! Excelente Post

    Saludos

    • rzornoza

      Hola Alejandra,
      Si lo que quieres es añadir nuevos usuarios a la base de datos de bonita a partir de otra base de datos puedes utilizar la API: Interface IdentityAPI. En esta, cuentas con los métodos para añadir usuarios y gestionar los grupos.
      Puedes generar un proceso que recoja los datos de los usuarios de la base de datos y añadirlos mediante “addUser(String username, String password) “.
      Despues para asignarle roles y añadirle a grupos puedes usar setUserMemberships(String userUUID, Collection membershipUUIDs) estos membersips identifican tanto los roles como los grupos y se pueden obtener mediante getMembershipForRoleAndGroup(String roleUUID, String groupUUID).
      No se si me he explicado bien, si te queda alguna duda pregunta sin miedo.

      Otra cosa que se puede hacer es que bonita utilice los usuarios de otra base de datos, pero perderías los usuarios que tubieses en bonita y es un poco más complicado. Y aunque no estoy muy seguro y tendría que mirarlo creo que también puedes hacer que bonita busque los usuarios en 2 bases de datos distintas. Si te interesa alguna de estas 2 alternativas hazmelo saber para explicarlas más al detalle.

      Un saludo y muchas gracias a ti, por comentar.

  • Alejandra

    Hola, nuevamente consultando…
    estoy creando formularios, y en uno de ellos necesito cargar una campo lista con diferentes valores que voy seleccionando desde una lista desplegable, pero no encuentro eventos para crear desde botones, y no se me ocurre otra manera de hacerlo. Es posible encontrarle una solucion a este problema??

    Muchas Gracias! Saludos

    • rzornoza

      Hola de nuevo Alejandra.
      Si te he entendido bien lo que quieres es rellenar una lista a partir de otra. Lo más parecido son las checkbox list, aunque visualmente sean checkboxes recibe de entrada una lista o un map y la salida es una nueva lista o map con los checkboxes seleccionados y creo que esa es la funcionalidad que intentas implementar.
      Funcinalmente la única pega que veo es que sólo se puede añadir un elemento de cada tipo, aunque si fuese necesario se podría solucionar con una lista gemela donde se indicasen las unidades, o una simple lista de unidades donde 0 sería que no está seleccionado, pero creo que me estoy desviando…

      De todas formas, si quieres que visualmente se muestren dos listas y que se vayan moviendo elementos de una a otra creo que no habría más remedio que hacerlo mediante javascript.

      Si no he entendido bien la pregunta o tienes alguna otra duda pregunta sin miedo.
      Un saludo y gracias por tu comentario.

      • Alejandra

        Ante todo gracias por tu pronta respuesta.
        La idea es la siguiente, tengo un select list desplegable y necesito que a medida que el usuario vaya seleccionando diferentes valores del mismo, éstos se copien a un campo list, luego recorreria todo el list y guardaria dichos valores en una db. A esta forma de trabajar llegue, debido a que se me hizo realmente dificil poder manejar una matriz editable o tabla. Si tienen informacion sobre esto ultimo te agradeceria.

        • rzornoza

          Entonces me parece que entendí bien la idea.

          Lo único que se me ocurre para poder mostrar una matriz editable es o bien desarrollar una aplicacion paralela en java que se comunique mediante la API con bonita, que de este modo se puede hacer practicamente cualquier cosa.

          O bien si los campos son siempre los mismos se podria hacer un “apaño” generando la matriz a base de campos de texto sin label y jugando un poco con los estilos para que quedasen juntos.

          Personalmente no conozco ningun elemento del formbuilder con el que se pueda hacer lo que necesitas de una forma elegante.

          Espero que sirva de ayuda y de nuevo gracias por tu comentario.

  • Alejandra

    Hola, he cambiado la idea de un list ya que no hay manera de que funcione…
    Opte por cargar todos los datos en un checkbox y ahi selecciono los elementos que necesito. El problema que se me presento es como guardo dichos elementos seleccionados en una nueva variable.

    • rzornoza

      Hola Alejandra,
      desde el form builder(donde diseñas el formulario), al seleccionar el checkboxlist en la seccion “data”, tienes la opcion, “guardar en”. Ahí debes poner la nueva variable.

      Un saludo.

  • aitor

    Hola, tengo instalado un bonita 5.6.2 con jboss y accedo perfectamente, pero pasado un tiempo, no superior a media hora, no 8 horas como he leido por ahí que hay problemas, parece que pierdo conexión y no tengo otra manera de acceder que reiniciar. Los errores que me dan son de este tipo. ¿Puedes ayudarme?

    type Informe de Excepción

    mensaje

    descripción El servidor encontró un error interno () que hizo que no pudiera rellenar este requerimiento.

    excepción

    java.lang.reflect.UndeclaredThrowableException
    $Proxy531.generateTemporaryToken(Unknown Source)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    java.lang.reflect.Method.invoke(Method.java:597)
    org.ow2.bonita.facade.interceptor.ClientRemoteAPIInterceptor.invoke(ClientRemoteAPIInterceptor.java:136)
    $Proxy532.generateTemporaryToken(Unknown Source)
    org.bonitasoft.console.security.server.api.impl.CredentialsEncryptionAPIImpl.generateTemporaryToken(CredentialsEncryptionAPIImpl.java:157)
    org.bonitasoft.console.security.server.CredentialsEncryptionServlet.doPost(CredentialsEncryptionServlet.java:127)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    org.bonitasoft.forms.server.filter.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:122)
    org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)

    causa raíz

    java.io.IOException: The hierarchy of org.hibernate.exception.JDBCConnectionException is different in your current classPath
    org.jboss.serial.classmetamodel.StreamingClass.readStream(StreamingClass.java:80)
    org.jboss.serial.objectmetamodel.ObjectDescriptorFactory.readObjectDescriptionFromStreaming(ObjectDescriptorFactory.java:381)
    org.jboss.serial.objectmetamodel.ObjectDescriptorFactory.objectFromDescription(ObjectDescriptorFactory.java:82)
    org.jboss.serial.objectmetamodel.DataContainer$DataContainerInput.readObject(DataContainer.java:845)
    org.jboss.serial.persister.RegularObjectPersister.readSlotWithFields(RegularObjectPersister.java:353)
    org.jboss.serial.persister.RegularObjectPersister.defaultRead(RegularObjectPersister.java:273)
    org.jboss.serial.persister.RegularObjectPersister.readData(RegularObjectPersister.java:241)
    org.jboss.serial.objectmetamodel.ObjectDescriptorFactory.readObjectDescriptionFromStreaming(ObjectDescriptorFactory.java:412)
    org.jboss.serial.objectmetamodel.ObjectDescriptorFactory.objectFromDescription(ObjectDescriptorFactory.java:82)
    org.jboss.serial.objectmetamodel.DataContainer$DataContainerInput.readObject(DataContainer.java:845)
    org.jboss.serial.io.MarshalledObjectForLocalCalls.get(MarshalledObjectForLocalCalls.java:60)
    org.jboss.ejb3.remoting.IsLocalInterceptor.invokeLocal(IsLocalInterceptor.java:93)
    org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:72)
    org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
    org.jboss.aspects.remoting.PojiProxy.invoke(PojiProxy.java:62)
    $Proxy533.invoke(Unknown Source)
    org.jboss.ejb3.proxy.impl.handler.session.SessionProxyInvocationHandlerBase.invoke(SessionProxyInvocationHandlerBase.java:207)
    org.jboss.ejb3.proxy.impl.handler.session.SessionProxyInvocationHandlerBase.invoke(SessionProxyInvocationHandlerBase.java:164)
    $Proxy531.generateTemporaryToken(Unknown Source)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    java.lang.reflect.Method.invoke(Method.java:597)
    org.ow2.bonita.facade.interceptor.ClientRemoteAPIInterceptor.invoke(ClientRemoteAPIInterceptor.java:136)
    $Proxy532.generateTemporaryToken(Unknown Source)
    org.bonitasoft.console.security.server.api.impl.CredentialsEncryptionAPIImpl.generateTemporaryToken(CredentialsEncryptionAPIImpl.java:157)
    org.bonitasoft.console.security.server.CredentialsEncryptionServlet.doPost(CredentialsEncryptionServlet.java:127)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    org.bonitasoft.forms.server.filter.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:122)
    org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)

    • rzornoza

      Hola Aitor
      nunca he montado bonita sobre jboss pero quizá por el error se me ocurren dos posibles causas.
      1ª algún conflicto de librerías o de versiones de hibernate.

      2ª la configuracion de la base de datos del journal o del histórico tiene algún error, si fuese esto, revisa los ficheros bonita-hournal y bonita-history. Quizá este post te pueda ser util http://www.bonitasoft.org/forum/viewtopic.php?id=5211.

      Siento no poder ser de más ayuda, pero al no haber montado nunca este entorno no estoy familiarizado con los errores que pueda dar bonita en jboss.

      Un saludo y gracias por tu comentario.

      • Angel Ramón

        Saludos a mi me pasa algo parecido a lo que describe aitor yo configure el jboss para autenticarse con LDAP agregando al archivo \server\default\conf\login-config.xml
        las siguientes lineas

        ldap://uci.cu:389
        simple
        OU=UCI Domain Users, DC=uci, DC=cu
        uci\ad.search

        (sAMAccountName={0})
        SUBTREE_SCOPE
        false
        true
        DC=uci, DC=cu
        (sAMAccountName={0})
        memberOf
        true
        CN
        follow

        sin embargo el servidor se cae cada cierto tiempo y no permite autenticarse de nuevo por unos minutos. Estoy usando Jboss porque nunca logre configurar el bundler del Tomcat para el bonita
        estoy usando el bundler de JBOSS para la version del bonita 5.6
        gracias de antemano a cualquier ayuda que me puedan brindar

        si alguien ha logrado configurar el bundler del tomcat para LDAP por favor seria bueno que lo compartiese pues no he encontrado un ejemplo que resulte bien hasta el momento.

        • rzornoza

          Como ya he dicho no estoy familiarizado con el entorno de JBoss y la validación contra LDAP suelo realizarla mediante JAAS, pero me sucedio un error similar al que comentas sólo que a mi lo que me fallaba era el pool de conexiones con la base de datos (al estar mucho tiempo inactiva se cerraba el socket). Te lo comento por que igual te pasa lo mismo y es la comprobacion contra tu base de datos y no contra el LDAP la que falla.

          Lamento no poder ser de más ayuda. Un saludo.

          • Angel Ramón

            estoy intentando migrar a Tomcat que es mucho mas rapido y no da ese error, lo malo es que no tengo ni idea de como configurar el LDAP para este bundler

          • rzornoza

            Hola Angel
            En tomcat la autenticación contra LDAP siempre la he realizado sobre jaas.

            El bundle ya viene preparado para utilizarlo así que lo único que hay que hacer es implementar una clase con la interfaz loginModule, te dejo un par de ejemplos :Un ejemplo descargable y otro ejemplo más.

            Estos ejemplos sólo implementan el modo de autenticar, pero no tiran contra LDAP.
            Si quieres autenticar contra LDAP, en el método “login” tendrías que implementar algo parecido a esto.

            una vez tengas la clase(o clases, si quieres dividirlo) lista, la empaquetas en un jar y dejas este jar en la carpeta “lib” del tomcat.

            Por último, vamos al fichero tomcat/external/security/jaas-estandard.cfg y le indicamos que el BonitaAuth se realizará mediante nuestra clase en vez de esta “org.ow2.bonita.identity.auth.BonitaIdentityLoginModule” (cambiando la ruta de la clase).

            Son unas cuantas cosas si no estas familiarizado, asi que ánimo, y un saludo.

  • Alejandra

    Hola nuevamente, estoy intentando asignarle un valor true o false a una variable de tipo boolean, he creado un conector en la tarea pero no me funciona correctamente.
    Tiene idea de como hacerlo?

    • rzornoza

      Un placer tenerte de nuevo aquí Alejandra.

      Si tratas de modificar una variable dentro del proceso basta con poner “nombre_variable”=”valor”, pero el conector necesita ver esa variable, si has declarado una variable en una actividad sólo esta puede acceder a esa variable, si quieres utilizarla en otra actividad debes declarar la variable como variable de proceso (para probar siuna actividad tiene acceso a una variable puedes darle un valor por defecto y comprobar el comportamiento del proceso).

      Si estas haciendo uso de la API de java para modificar una variable necesitas hacer uso de la RuntimeAPI.

      Existen 2 tipos de variables, de proceso y de actividad, según sea una u otra tienes que utilizar un método distinto; setProcessInstanceVariable o setActivityInstanceVariable. Cómo la actividad pertenece a un proceso, si no sabes si es una variable de actividad o de proceso también existe el método setVariable. Pero como te he dicho arriba, asegurate de que el conector tiene acceso a la variable o cambiar esta no servirá de mucho

      Para llamar a estos métodos vas a necesitar:
      1º ActivityInstanceUUID o ProcessInstanceUUID, según a qué método llames.
      2º el id de la variable (suele ser parecido al nombre que se le da pero sin caracteres especiales, puede verse en el BonitaStudio (o quizá sea esactamente el mismo nombre, no lo recuerdo bien, no suelo utilizar caracteres especiales en mis variables))
      3º el objeto con el nuevo valor de la variable, en este caso necesitarias un Boolean.

      Un saludo

  • Alejandra

    Hola, es posible cargar un objeto de tipo “list” a un widget “table”? sin que aparezcan los corchetes tipicos del array y que me asigne cada elemento de la lista a una fila de la tabla?.
    Actualmente lo estoy haciendo, pero me copia todo el objeto a una fila sin tener en cuenta las necesidades que te anote en el parrafo anterior.

    • rzornoza

      Hola Alejandra, perdona por no haberte respondido hasta ahora pero por diversos motivos no he podido hacerlo antes.

      Nunca me he encontrado ese caso, debería funcinar simplemente con poner en el Set values la List<String> si es simple o List<List<String>> para las tablas multiples.

      Se me ocurre que quizá estes intentando asignar una dimension más de listas de la que necesita. Es decir, una lista de listas en la simple o una lista de listas de listas en la múltiple.

      te dejo el link de la documentacion del table widget por si puede ayudarte.

      http://www.bonitasoft.com/resources/documentation/bos-56/form-field-design/use-widgets-define-form-data-fields-and-form-buttons/add-table-field

      Un saludo

      • Alejandra

        Muchas Gracias por tu respuesta, al final he encontrado el inconveniente, yo trabajaba con la opcion “set celdas” y lo que necesitaba hacer era definir los valores de la tabla en general, no los de cada celda en particular, por lo que utilizando la opcion “set valores” al campo valores de tabla le asigno el objeto de tipo list que tengo y todo funciona perfectamente.

        Saludos

        • rzornoza

          Ya me parecía a mi raro jeje.

          Me alegro de que lo hayas podido solucionar.

          Un saludo.

  • Diego Armando Muñoz

    Hola muy buenos días.

    Tengo un problema con el conector de JDBC.

    El problema que tengo es que realizo un select a mi BD para determinar si un usuario esta en mora con el banco o no (simulando una central de riesgo), los posibles valores que retorna el select son “S” o “N”.

    En el ultimo paso del wizard del connector recomiendan settear el valor que retorna el select a una variable del proceso, y exactamente eso fue lo que hice.

    Quedo algo como:

    Salida del conector: va a Variable Destino
    rowSet.getValues() mora_cliente

    Lo siguiente que necesito es que dependiendo de lo que este en esa variable “mora_cliente” tomo un camino u otro por un XOR. Y ahi esta el problema, que nunca esta cumpliendo ninguna de las condiciones por que lo que le esta llegando a la variable es algo asi: [[S]] o [[N]].

    Por faaaaaaaavor ayudenme a saber que esta mal o como solucionar eso.

    Espero haber sido claro.

    Muchas Gracias y quedo atento a la respuesta! :)

    • rzornoza

      Hola Diego,

      sin ver el código no puedo estar del todo seguro, pero parece que estas enviando toda el resultado de la query a la variable, por eso tienes una coleccion de colecciones, filas* columnas (concretamente una lista de listas, que es lo que devuelve el método getValues()).
      Si es el caso se me ocurren2 soluciones, la 1ª hacer un workarround un tanto feo cambiando las condiciones del XOR de “S” y “N” a “[[S]]” y “[[N]]” y la segunda acceder a los valores de linea y columna, lo que creo que puede hacerse a lo bestia con rowSet.getValues().get(0).get(0) pero mejor si lo separamos un poco y checkeamos errores tal que:
      List<List<String>> resultado=rowSet.getValues();
      if(resultado==null||resultado.size()==0)return error;
      List<String> linea=resultado.get(0);//supongo que seran Strings, sin Blobs,Byte[] ni cosas raras
      if(linea==null||linea.size()==0)return error;
      String mora=linea.get(0);

      El código no está probado, pero no creo que ande muy lejos de funcionar.

      Espero que te ayude, un saludo y gracias por el comentario.

      Edito: el blog interpreta los tipos de las colecciones como tags xml y me las borra… (FIX)

      • Diego Armando Muñoz

        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA :’) jajajajaja muchisimas gracias rzornoza me salvaste la vida, y muy rapidamente :) muchisimas gracias de verdad y eso que no probaste el codigo :O

        • rzornoza

          Un placer Diego,
          leí tu comentario en el momento justo y pude contestarlo al momento :) .

          Me alegra que te haya sido de ayuda, un saludo.

  • Jairo Salguero

    Diego que tal.

    Leyendo tu post veo que estas en el negocio de riesgo crediticio en el cual también estoy desde hace mas de 10 años.

    Ahora bien he visto la herramienta bonita soft y me parece sumamente interesante para todo el proceso de colocación, pero no logro entender como funciona del todo. o si es necesario comprar la suscripción para que funcione correctamente.

    Entonces me podrás facilitar información de como empezar, que hacer y que no para desplegar procesos con apache tomcat y mysql-
    ya trate de encontrar informacion en la página de bonitasoft, pero no me ha funcionado.

    jairo_plus@hotmail.com

    Gracias.

    • rzornoza

      Hola Jairo,
      1º perdona por tardar en aceptar el comentario, el viernes me pillo ya desconectado y los fines de semana no suelo revisar el blog.
      2º A la espera de lo que te pueda contestar Diego yo mismo puedo resolverte alguna duda (aunque ya se que no me preguntabas a mi ^_^).

      Respecto a lo de comprar el suscription pack, no es necesario. Si es cierto que aporta una serie de ventajas pero con la versión community puede hacerse exactamente lo mismo (aunque algunas cosas costará más hacerlas, es cuestión de analizar el coste y la rentabilidad que se le pueda sacar a la versión suscriptor).
      Por otro lado, el entorno que comentas de tomcat+MySql es muy comun y por ejemplo, aqui, en la seccion de paquetes tienes un bundle con un tomcat+ bonita listo para funcionar con la última versión de Bonita.
      Respecto a conectarse con MySql existen infinidad de tutoriales, y…creo que yo mismo postearé uno por aquí dentro de poco, no obstante si tienes algún problema al montar el entorno puedes preguntarnos.

      Un saludo y gracias por el comentario.

  • Jairo Salguero

    Gracias rzornoza, tomaré en cuenta tu ayuda.

    Una primera duda que me resulta al implementar la versión de bonita que incluye tomcat, es que al levantar el servidor apache me deja abierta una ventana de consola, al parecer solo lo carga en memoria… entonces no se si esto debe ser así o si estoy haciendo algo incorrecto.

    Gracias de nuevo es bueno saber que hay gente en el mundo que se toma su tiempo para ayudar.

    • rzornoza

      De nada Jairo, un placer ayudar.
      Si lo arrancas desde el startup, es normal.

      ¿Tu duda es con respecto a guardar los datos en la base de datos?

      Si es así el bundle viene por defecto con H2, y hay que configurarle la conexión con la BBDD.

      Un saludo.

      • Alejandra

        yo tengo el mismo problema que Jairo, unicamente me corre el proyecto en el servidor si lo levanto desde el startup. De que forma lo puedo hacer para que no sea necesario ese paso y no me aparezca la consola?

        • rzornoza

          Hola Alejandra, ¿Desde donde quieres arrancarlo? ¿desde un eclipse?, ¿que se arranque como servicio… ?

          No entiendo exactamente cual es la pregunta, un saludo.

    • Jairo Salguero

      Saludos de nuevo, avanzando con el tema, realicé los siguientes cambios:
      a) context.xml (para que apunte a mysql)
      b) bonita-history y bonita-journal (también para que apunten a mysql)
      c) Creé las bases bonita_core y bonita_history en mysql
      e) Creé el usuario bonita
      f) agregué la ruta JRE_HOME= en el startup.bat

      y al ejecutar startup.bat me devuelve un error que no entiendo de que se trata.

      se lee: “org.apache.catalina.core.aprlifecynclelistener init” La bibrioteca nativa de apache tomcat basada en ARP … no ha sido hallada en java.library.path

      Agradezco la ayuda, saludos desde Guatemala.

      • rzornoza

        Nunca me ha pasado eso, por lo que he visto es como si te faltase esa librería en el sistema.
        en este post parece que le ocurrió lo mismo, quizá pueda servirte.

        Un saludo.

  • Jairo Salguero

    Vale decir que si levanta el servicio puesto que si me muestra el login y acepta las credenciales en http://localhost:8080/bonita
    pero lo que intento es que no de ningún error para estar seguro de poner en producción algún proceso.

  • Diego Armando Muñoz

    Buena noche..

    Tengo una duda con la que posiblemente me pueden ayudar.

    Termine todo mi proceso en su totalidad y le definí roles a cada participante del proceso. Cuando ejecuto el proceso de manera local todo sale perfectamente, pero cuando despliego el .bar en el Tomcat y le doy “iniciar caso” al proceso revienta y muestra la siguiente excepcion:

    ADVERTENCIA: Activity will be put in the state FAILED due to: org.ow2.bonita.facade.exception.BonitaWrapperException: org.ow2.bonita.facade.exception.RoleMapperInvocationException: Bonita Error: be_TRT_2

    Exception caught while executing role mapper: org.ow2.bonita.facade.def.InternalConnectorDefinition@1159a6b

    • Diego Armando Muñoz

      De nuevo yo…

      Entre lo que averigue decian que:

      if you get this error you are probably deploying a process involving a Role that does not exist in Bonita.

      Pero yo si cree estos roles, con exactamente el mismo nombre que los tenia en el local y tampoco! Basta con dejar como rol unico el Initiator para que el proceso si funcione cuando lo despliego en el tomcat.

      Gracias por la pronta respuesta y saludos desde Cali, Colombia :)

      • rzornoza

        Hola de nuevo Diego.

        Internamente Bonita hay una serie de referencias con respecto a los roles que no crea hasta que se le asigna ese rol a un usuario, así que prueba a asignar todos los roles.

        Otro motivo puede ser el group resolver que estes utilizando(el encargado de asgnar la tarea al grupo), prueba a crear uno solo y asegurate de que funciona.

        Por último puedes probar a añadir un solo rol y probar de nuevo el proceso.

        Como ves pueden ser bastantes cosas y no tenemos mucha info, hay que acotar ese error :) .

        Un saludo.

  • Hugo

    Estoy incursionando en el mundo de la automatización de procesos.
    Para esto un cliente me ha pedido que le muestre como funciona el BAM con Bonita, pero esta funcionalidad solo biene con el suscription pack.
    Como puedo yo lograr obtener esta funcionalidad para hacer una demo sin comprar esta suscripción??? o como podría implementar solo este módulo

    • rzornoza

      Hola Hugo,
      parece que no hay una solución facil, como bien dices ese módulo es del suscription pack.
      En este hilo preguntan lo mismo
      http://www.bonitasoft.org/forum/viewtopic.php?id=4306
      y le sugieren que se ponga en contacto con bonita. (Puedes hacerlo aqui), aunque no te regalaran un suscription pack es posible que tengan demos en video y capturas de lo que puede hacer el módulo.

      Otra opción sería probar con la BAMAPI, pero no la he probado sin suscription pack y seguramente sea excesivo para una demo (hay que programar una aplicacion paralela que se conecte al engine y que tras consultar mediante la API pinte medianamente bonitos los gráficos… es bastante trabajo).

      Suerte con lo que decidas y un saludo.

      • Hugo

        Estimado rzornoza.

        Gracias por responder, me queda claro.
        Adicionlmente quisiera consultarte algo, Que tanto expertiz tienes tu con la herramienta Bonita BPM, te pregunto esto es por que necesito técnicos que conozcan a profundidad esta herramienta para una capacitación en Ecuador he implementaciones. por favor me escribes a segovia_hugo@hotmail.com y conversamos.

  • aitor

    HOla, he visto tu post en el foro de Bonita:

    http://www.bonitasoft.org/forum/viewtopic.php?id=8734

    me ocurre exactamente lo mismo, no puedo eliminar un proceso .bar y me da el siguiente error:

    [DefaultCommandService] exception while executing command org.ow2.bonita.facade.APIInterceptor$APIInterceptorCommand@520bbe8b: Unexpected Exception arrived in Bonita: Cannot access http://127.0.0.1:9990/xcmis/rest/cmisatom?repositoryId=default: Connection refused

    ERROR [[/bonita]] Exception while dispatching incoming RPC call
    com.google.gwt.user.server.rpc.UnexpectedException: Service method ‘public abstract org.bonitasoft.console.client.ItemUpdates org.bonitasoft.console.client.processes.ProcessService.deleteProcesses(java.util.Collection,org.bonitasoft.console.client.ProcessFilter,boolean) throws org.bonitasoft.console.client.exceptions.SessionTimeOutException,org.bonitasoft.console.client.exceptions.ConsoleSecurityException,org.bonitasoft.console.client.exceptions.ConsoleException’ threw an unexpected exception: java.lang.RuntimeException: Unable to delete process.

    Has encontrado la solución? Que puedo hacer?

    Salu2 y muchas gracias.

    • rzornoza

      Hola Aitor,
      por los sintomas parece ser un problema con el XCMIS, lo malo es que la informacion de las excepciones que arroja es insuficiente cuando no confusa. Por mi parte aun no he tenido tiempo de revisar bien lo que me ocurrio ya que la misma configuracion funcionaba en desarrollo (así que hay que replicar el entorno, y hacer pruebas de configuración hasta dar con lo que no le gusta).

      De todos modos, tu caso parece diferente, todo apunta a que también se debe a xcmis pero ese connection refused parece indicar que no puedes conectar con el puerto o que no se ha desplegado bien (aunque como dije antes, la información de la excepción puede apuntar hacia donde no es).

      Te sugiero además que compruebes si se generan las tablas en la base de datos (si es que has quitado el h2), que si borras la carpeta de Data la vuelve a crear(renombrala o haz backup, por si acaso) y que puedes acceder directamente a /xcmis.

      Revisa sobre todo si has editado la configuración del xcmis o incluso de la autenticación…

      Un saludo y ya nos contarás si consigues arreglarlo.

      • aitor

        Aupi Rubén,

        Te sugiero además que compruebes si se generan las tablas en la base de datos (si es que has quitado el h2),
        ¿a que tablas te refieres?

        que si borras la carpeta de Data la vuelve a crear(renombrala o haz backup, por si acaso) y que puedes acceder directamente a /xcmis.
        ¿como compruebo que puedo acceder directamente a xcmis?¿que carpeta data?

        Revisa sobre todo si has editado la configuración del xcmis o incluso de la autenticación…
        No he tocado nada de la config

        No controlo nada de xcmis, tienes por ahí alguna referencia útil??

        Un saludo y muchas gracias.

        • rzornoza

          Hola Aitor, perdona por ser tan escueto, te comento.

          XCMIS utiliza una base de datos, por defecto es una H2 pero se recomienda que para entornos que no sean de pruebas se utilice una base de datos más… comun, por así decirlo, como x ej MySQL.
          Esto se configura en el path /external/xcmis/ext-exo-conf/ en los ficheros:
          exo-configuration-XXX.xml
          cmis-jcr-configuration-XXX.xml
          donde XXX sería tu base de datos, por defecto vienen MySQL y hsql (que sería H2).
          Por defecto como ya he dicho, utiliza h2, si quieres cambiar el fichero de referencia tienes que editar dentro de tomcat/bin/ el script de setenv (el sh sobre linux y el bat sobre windows) de modo que la variable CMISConfig apunte al fichero exo-configuration-XXX.xml

          La carpeta Data es donde almacena los datos cmis, y se por defecto será /external/xcmis/ext-exo-data
          Comprueba que existe.
          Y por último, para acceder a xcmis ve a localhost:¿8080?/xcmis/cmisws, por defecto con usuario “root” y pass “exo”.

          De todas formas si no has hecho modificaciones considerables en el entorno el bundle debería funcionar sin ningún problema (y montarlo puede ser la solución más rapida y facil y segura).

          Por cierto, he supuesto que estas sobre un tomcat y con una version no muy antigua de bonita, si no es así sería bueno conocer el entorno.

          Un saludo.

          • aitor

            Hola Rubén, tengo montado el bundle de jboss BOS-5.6.2-JBoss-5.1.0.GA.

            Esto se configura en el path /external/xcmis/ext-exo-conf/ en los ficheros:
            exo-configuration-XXX.xml
            cmis-jcr-configuration-XXX.xml
            donde XXX sería tu base de datos, por defecto vienen MySQL y hsql (que sería H2).
            Por defecto como ya he dicho, utiliza h2, si quieres cambiar el fichero de referencia tienes que editar dentro de tomcat/bin/ el script de setenv (el sh sobre linux y el bat sobre windows) de modo que la variable CMISConfig apunte al fichero exo-configuration-XXX.xml

            DE ESTO no he tocado nada, lo he dejado como venía.

            La carpeta Data es donde almacena los datos cmis, y se por defecto será /external/xcmis/ext-exo-data
            Comprueba que existe.

            Esta carpeta si que existe.

            Y por último, para acceder a xcmis ve a localhost:¿8080?/xcmis/cmisws, por defecto con usuario “root” y pass “exo”.

            Creo que aquí está el problema, yo lo tengo en el puerto 9999 y este no está levantado en máquina. NO puedo acceder, esto se levanta automático o lo tengo que levantar yo??

            UN saludo y muchisimas gracias.

          • rzornoza

            segun la traza del error que habías pegado lo está buscando en
            http://127.0.0.1:9990/xcmis/rest/cmisatom?repositoryId=default:
            9990, y no 9999
            comprueba el puerto en el fichero bonita-server.xml

            y revisa además el log que se genera al arrancar, puede que ahí esté arrojando algun error que indique donde se encuentra el fallo.

            Un saludo.

  • aitor

    El puerto lo había probado en los dos, te he pasado una traza anterior, ya lo he verificado en el bonita-server.xml.

    Pero lo que te decía antes, no veo el puerto levantado en la máquina, se debe levantar solo? lo tengo que levantar yo?

    He mirado el log de arranque de arriba a abajo mil veces y no veo nada que haga referencia a eso.

    Muchas gracias de nuevo

    • rzornoza

      Hola Aitor,

      si lo tienes configurado para que el xcmis se levante en el puerto 9990 lo normal es que se pusiese a la escucha ahí, pero yo en jboss no he montado nada así que no sabría decirte.

      Si puedes prueba a restaurar el puerto y comprobar si así te funciona, de funcionarte en el puerto original tendríamos localizado el problema, y si tampoco se levanta en ese habría que mirar por que no se levanta y si es problema de la configuracion del jboss o del propio xcmis.

      Un saludo.

  • aitor

    Aupa Rubén, no tendrás algún manual de configuración de puertos de bonita y xcmis….(o alguna url) Es que no encuentro nada en la web y hay algunas cosas que no controlo…
    Sigo sin poder levantar el puerto…

    Muchas gracias por todo.

  • Natalia

    Hola gente!! Aca estoy molestando nuevamente. Una consulta: existe alguna forma en bonita de exportar un proceso de negocio en formato XPDL? e importar algún proceso de negocio XPDL superior a la version 1.0?
    Saludos.

    • rzornoza

      Hola, perdón por el retraso, acabo de volver de una larga ausencia.

      Respecto a tu pregunta, aunque es información del 2011 lo último que sé de Bonita es esto:
      For the moment you can only import XPDL version 1.0 in Bonita Studio.
      Also, you can only export Bonita processes to BPMN v2.0

      Un saludo.

  • aitor

    HOla Rubén, al final después de muchas vueltas he conseguido arreglar el problema. El tema es que tenía el puerto de jboss por un lado y el de xcmis por otro, uno el 8080 y otro el 9999. Poniendo el xcmis en el 8080 ya funciona :)

    Muchisimas gracias x tu ayuda :)

    • rzornoza

      Perdon por el retraso he estado ausente una temporada.
      Me alegro que al final encontraras el problema, ya me parecía a mi un tema de puertos :) .

      Un saludo

  • Luis

    Hola rzornoza estoy desarrollando una aplicación en Bonita , la cual tiene que autenticar con LDAP (este código ya lo tengo en java e inclusivo trae los datos del como Nombre , grupo , email ,etc) mi consulta es como hago para que al principio pueda cambiar la pagina por defecto de logeo que tiene bonita y ponerle una pagina que tengo en java(logueo.jsp) .Bueno la aplicación está con base de datos oracle y servidor : JBOSS ??

    Gracias!!

  • Alejandra

    Hola, como estas tanto tiempo sin molestarte jeje…

    Estoy desarrollando un proyecto en BOS version Comunnity y necesito que en la primer tarea se cargue un archivo adjunto y al finalizar el proceso dicho adjunto se guarde en un directorio dentro de la PC.
    Me comentaron que a traves del conector Groovy puedo lograrlo, pero no se exactamente que codigo utilizar.
    Conoces algo al respecto? existe otra alternativa para lograr guardar el archivo adjunto?
    Muchas Gracias

    Saludos

    • rzornoza

      Hola Alejandra,
      por lo que me dices creo que necesitarías una variable de tipo attachment. Así se crea.
      Por lo que me cuentas supongo que sabes como adjuntar el fichero y asignarlo a una variable.

      Para guardarlo en el servidor tendrías que 1º acceder al contenido de la variable mediante los métodos de la clase attachment que puedes consultar aquí y puedes acceder al contenido del fichero mediante el método “getAttachmentValue” de la queryRuntimeAPI

      Una vez que tienes toda la información del fichero puedes guardarlo en el sistema mediante java o groovy

      un ejemplo de java sería:
      File fichero= new File("fileName");
      FileOutputStream fos = new FileOutputStream(fichero);
      fos.write( myByteArray);
      fos.flush();
      fos.close();

      Si tienes alguna duda pregunta sin miedo.

      Un saludo.

      • Alejandra

        Primero gracias por la respuesta…
        Si, he creado una variable de tipo attachment a la cual le paso el archivo que se adjunta al proceso para que lo vean los usuarios de las tareas posteriores.
        Tengo una duda, todo eso que me has dicho lo tengo que agregar en un conector groovy? Porque no me queda claro la primer parte de tu explicacion.
        Tengo un codigo que me han facilitado en el foro de Bonita pero no se bien donde ubicarlo, te lo paso a continuacion

        import org.ow2.bonita.search.DocumentCriterion;
        import org.ow2.bonita.search.DocumentSearchBuilder;

        import org.ow2.bonita.search.DocumentResult;
        import org.ow2.bonita.search.index.DocumentIndex;

        import org.ow2.bonita.facade.APIAccessor;
        import org.ow2.bonita.facade.BonitaApplicationAccessContext;
        import org.ow2.bonita.facade.QueryRuntimeAPI;
        import org.ow2.bonita.facade.impl.StandardAPIAccessorImpl;
        import org.ow2.bonita.facade.runtime.ProcessInstance;
        import org.ow2.bonita.facade.uuid.DocumentUUID;
        import org.ow2.bonita.services.Document;

        // Implementation de l’API Bonita
        StandardAPIAccessorImpl apiAccessorImpl = new StandardAPIAccessorImpl();

        // Get an instance of the query runtime API (allow to get information about running instance of processes)
        QueryRuntimeAPI queryRuntimeAPI = apiAccessorImpl.getQueryRuntimeAPI();

        // Create a search query to get the document attach to the process (latest version attached to the current process instance)
        DocumentSearchBuilder builder = new DocumentSearchBuilder();
        builder.latestVersion();
        builder.criterion(DocumentIndex.PROCESS_INSTANCE_UUID).equalsTo( processInstance.getUUID().getValue());

        // Run the search query
        DocumentResult documentResult = queryRuntimeAPI.searchDocuments(builder, 0, 2);
        // Get the document UUID
        DocumentUUID documentUUID = documentResult.getDocuments().get(0).getUUID();

        String path=”The/path/for/your/file/”+documentResult.getDocuments().get(0).contentFileName;
        byte[] documentRawContent = queryRuntimeAPI.getDocumentContent(documentUUID);
        FileOutputStream FOS = new FileOutputStream(path);
        FOS.write(documentRawContent);
        FOS.close();
        return path;

        • rzornoza

          Como bien indicabas el código debe ir en un conector de tipo groovy. Para añadirlo seleccionas la actividad donde quieres que se ejecute este proceso, vas a la seccion conectores->scripting->groovy y te saldrá un wizard para generarlo. Lo 1º es elegir si quieres que se ejecute al iniciar o al teminar el activity (hay más casos pero creo que estos 2 son los que podrías necesitar).

          Por cierto, un código muy completo :) . Lo único ten cuidado con el criterion que esta buscando todos los ficheros del proceso (aunque sólo la última versión) y despues se queda con el primero. Este código supone que sólo hay una variable de tipo file en el proceso y que además va a estar siempre subido el fichero si esto es así, no hay problema pero si hay más de un fichero sólo cogerá uno y si no hay ficheros para esa instancia de proceso dará un error.

          Te dejo un pequeño tutorial de conectores groovy aquí y uno más amplio de groovy en bonita aquí.

          Un saludo

          • Alejandra

            Estoy probando el codigo en el conector Groovy y no me esta guardando el archivo.
            Le agregue la ruta a la cual lo quiero enviar pero no responde… tampoco me tira un error el registro el motor.
            Respecto al criterion, existe una sola variable de tipo attachment en el proceso, no deberia existir problema

          • rzornoza

            Hola Alejandra,

            asegurate de que el código se está ejecutando. Una forma facil es crearte una variable externa al controlador e irla actualizando desde el mismo a modo de log(y despues puedes consultar el valor de la variable desde el userXP).

            Si el código se ejecuta lo siguiente es comprobar si recibes bien los datos del fichero, si no los recibes comprueba si se ha subido el fichero correctamente (mediante un elemento file de un form puedes descargar el fichero).

            Si todo el código se ejecuta y el fichero está bien subido el problema podría estar en la busqueda (aunque si la busqueda no devuelve nada debería dar un nullPointer…) o a la hora de guardar el fichero (¿permisos?) y podríamos mirar otra forma de acceder al fichero o de guardarlo.

            El primer paso para arreglar algo es averiguar que es lo que se ha roto :) .

            Un saludo.

          • Alejandra

            Anda perfectamente, espero que el codigo pueda servirle a otra gente que visite el foro asi puedo sentir que contribui con ustedes que me ayudaron tanto =)

            Muchas Gracias!!

            Saludos!!

          • rzornoza

            Un placer poder ayudarte y que todo haya funcionado bien.
            Y muchas gracias por el código, es una gran aportación que seguro a más de uno le resultará muy util.

            Un saludo.

  • Luis

    Hola rzornoza gracias por la información me!

    Tengo otra duda como puedo autenticarme con el Active Directory estoy con la versión Comunnity , tu comentaste que habías logrado hacerlo con tomcat verdad? en tal caso tendrás algún ejemplo de como hacerlo?? gracias por anticipado!!

    • rzornoza

      Hola Luis,

      básicamente lo que necesitas es 1º hacerte tu propio login module que se conecte con el AD mediante java, y despues configurar la autenticación de bonita para que utilize JAAS con el login module que hayas creado.

      Aquí tienes un tutorial de login module.

      Y aquí un ejemplo de conexión con un AD.

      Y por último un tutorial de configuración de JAAS en Bonita.

      Un saludo.

      • Fidel

        rzornoza pudiera darme un modulo ya hecho para autenticar Bonita con ldap

  • luis

    Hola gracias por el aporte me sirvió de mucho!

    sabes algún código el cual me pueda subir un archivo a alfresco desde BonitaSoft (Comunnity)? estado con diferentes códigos de hecho hay un video el cual indica como pero no se ve bien …
    como utilizo alfresco 4 estoy utilizando CMIS

    Gracias por anticipado!

    • rzornoza

      Hola Luis, me alegro de que te haya sido util.

      Respecto a lo que comentas de Alfresco nunca he trabajado con la integración de estos sistemas.
      El video que me comentas creo que es este
      http://www.bonitasoft.org/blog/video/how-to-upload-a-file-on-alfresco/

      y lo que está utilizando es un conector de tipo AlfrescoUploadfileByPath, el video se ve bastante mal y aunque algunas cosas cuesta verlas la mayoría he podido entenderlas poniendo el video a full screen.

      Siento no poder ayudarte más, pero es algo que no he hecho nunca.

      Un saludo.

  • rafael

    Hola que tal perdon mi ignorancia,pero no logro desplegar un proceso y visualizarlo en bonita user experience, estoy utilizando wso2 de server

    • rzornoza

      Hola Rafael

      lo que tienes que hacer es:
      1º Exportar el proceso que quieras desplegar en forma de archivo .bar.
      2º Acceder al user experience con un usuario que tenga el rol de administrador
      3º Acceder a la vista de administración, veras un link rojo arriba a la derecha.
      4º Dentro de la vista administración hay una opción del menú de la izquierda que es “procesos”, accedes a él y seleccionas desplegar un nuevo proceso, buscas el fichero .bar y lo subes.

      Con esto ya tendrías desplegado el proceso, para arrancar instancias del mismo tendrías que volver a la vista de usuario y a la izquierda verás el nombre del proceso, haces click en él y te aparecerá una pantalla con todas las variables globales del proceso y un boton para arrancar el proceso.

      Un saludo.

  • Patricia

    Hola, muy interesante el block. Felicidades!!!

    Me gustaría saber como funciona el Versioning en BONITA. Me explico:
    Si tenemos un proceso funcionando en producción con instancias en curso, si cambiamos algo en el proceso debido a que hay algún error, o simplemente cambiamos añgo en un formulario o añadimos alguna nueva actividad, ¿ Cómo maneja esto BONITA? Actualiza las instancias en curso con los nuevos cambios por lo que en producción solo tendremos una única version, o genera tantas versiones como cambios hagamos?

    • rzornoza

      Hola Patricia.

      Los procesos en Bonita funcionan por versiones independientes, de modo que las instancias de proceso ya iniciadas en una version continuan con la misma versión hasta que se terminan de modo que se mantiene una versión del proceso por cada versión que despleguemos.
      Los cambios de una versión a otra del proceso pueden ser enormes tanto a nivel de estructura del proceso, como de variables o conectores. No parece facil garantizar una migración teniendo en cuenta todos los cambios que puede haber.
      Por eso es recomendable un entorno de desarrollo y probar bien los procesos antes de desplegarlos en producción, para al menos evitar errores.

      Un saludo.

      • Patricia

        Hola, Gracias por contestar tan pronto.
        Estoy de acuerdo que hay que pasar a producción aquellos procesos que han sido muy probados en un entorno de desarrollo, pero te voy a poner un ejemplo:
        Tenemos un proceso de gestion de gastos de viajes con una ultima etapa donde realizamos una contabilizacion automatica en nuestro RDP (SAP). Como sabras acaba de haber un cambio de tipo de impuesto, por lo que hay que modificar algunas cosas en el proceso. Si esto es así, evidentemente las instancias creadas con la nueva version harán la contabilizacion correcta ya que está el cambio hecho, ¿ pero que pasa con las instancias en curso? no vamos a poder realizar esta contabilizacion automatica ya que continua con el impuesto erróneo no? Supongo que este tipo de casos habrá que programar o hacer algún programilla de migración aparte. Saludos

        • rzornoza

          Hola de nuevo,
          si tuvisteis la precaución de parametrizar el valor de ese impuesto podeis editar esas variables con los valores en la base de datos. Si por el contrario está hardcodeado la cosa se puede complicar bastante y habría que ver si sale mejor tratar de corregir las instancias de los procesos ya desplegados o tratar de migrarlos.

          Un saludo.

          • Patricia

            Hola de nuevo,

            ¿ Es muy complejo corregir instancias de los procesos ya desplegados? ¿ Cómo se haría?
            Saludos

          • rzornoza

            Depende de la versión de Bonita y de qué es lo que haya que cambiar
            pero básicamente todo está en la base de datos, desde las condiciones para el control de flujo a los conectores.

            Es cuestión de encontrar lo que se quiere cambiar y de tener mucho cuidado de con que se toca y probarlo bien en desarrollo (hacer copias de las tablas antes de modificarlas puede ser una buena idea, incluso en desarrollo. Es más, si es posible hacer un back up de la base de datos entera no estaría de más).

            Si el cambio es sólamente un número como es el caso no creo que supusiera un problema
            y por ejemplo los datos de los scripts en Bonita 5.6.2 se almacenan en la tabla bn_dataf_def.

            Personalmente nunca he tenido que modificar nada más complejo que el valor de una variable para alguna instancia de proceso, pero aunque puede ser algo arriesgado la posibilidad sigue estando ahí y si todo va bien puede ahorrar mucho tiempo.

            Un saludo

  • http://www.binamics.com.ar Raul Borda

    Hola…
    Es posible filtrar el tipo de archivo que deberia aceptar el objeto fichero???
    Es decir que al elegir un archivo con el widget fichero o attachement solo deje elegir del tipo *.txt por ejemplo???

    • rzornoza

      Hola Raul.

      Si que es posible y existen varias formas, la más facil es mediante un regex validator.

      Te dejo un mini tutorial de validadores (como siempre en Bonita necesitas estar logueado para ver el cómo se hace).

      Y expresiones regulares para comprobar la extensión de un excel hay muchisimas, por ejemplo (aunque no la he probado):
      /^.*\.(csv|xls|xlsx)$/i

      Un saludo.

      • http://www.binamics.com.ar Raul Borda

        Excelente. Ya funciona!!! Muchas gracias, rápido y conciso.

        • rzornoza

          Me alegro de que funcionase.

          Un saludo.

  • Luis

    Hola rzornoza una consulta sabes que jar utilizo para poder cambiar la base de datos de bonita con oracle yo seguí un tutorial que está con BOS-5.6 que es con ojdb6.jar pero cuando deseo realizar ese mismo procedimiento con BOS-5.6.3 no funciona como puedo saber con que jar puede funcionar yo estoy ahorita con oracle 10g Express Edition

    Gracias por anticipado!!!

    • rzornoza

      Hola Luis

      es este el tutorial que has seguido?

      ¿Seguro que es un problema del driver? ¿que error te da?

      Un saludo.

  • David

    Hola rzornoza, me gustaría saber si es posible que me expliques de manera detallada como debo hacer una conexión de BOS con Access, ya que quiero que los datos que sean ingresados por lo usuarios vayan a dar a una base de datos. Te cuento que es para mi proyecto de tesis de ingeniero civil industrial por lo mismo te agradecería fueses muy detallado en la explicación ya que mis conocimientos informáticos son bastante limitados. Te estaría muy agradecido por tu ayuda.
    Desde ya gracias

    • rzornoza

      Hola David

      Access? tiene que ser access…?
      Supongo que puede valer…
      (es broma, pero en la informatica muchos no consideran una base de datos seria a access :D )

      Depende de lo que necesites, si tan solo tienes que persistir algunos datos puedes utilizar un access conector que te ejecuta una query en una base de datos access. How to, como siempre hace falta registrarse en Bonita para ver algo, pero está descrito paso a paso (en inglés, pero con imagenes. muy facil de seguir).
      Desconozco la formación informática que se imparte en ingeniaria civil industrial, pero lamento decirte que como necesites algo medianamente complicado o que se salga de lo normal te metes en terreno de programación y administración de bases de datos, y puede tener una complicación considerable incluso para estudiantes de informática, según lo que necesites.
      Este caso es sencillo pero necesitas mínimo algo de SQL para guardar la información y seguramente algo de programación en java/groovy para acceder a las variables del proceso y generar la query mediante una expresión groovy (aunque con un poco de suerte y si la información es simple sólo tendrás que sumar strings).

      Como otros comentarios del post te dejo un pequeño tutorial de conectores groovy aquí y uno más amplio de groovy en bonita aquí.

      Si por el contrario necesitas que sea Bonita la que se ejecute sobre un access… no se si será posible, la verdad.

      Si es esto último lo que necesitas piensa en la posibilidad de utilizar MySql. Está muy extendida, existe muchisima información, es facil de instalar y existen muchos programas de acceso mediante interfaz gráfica.

      Ánimo y mucha suerte con tu tesis.

  • http://no rulo

    Saludos

    Veo que tienes un conocimiento muy extenso en relacion a BOS, y ademas agradezco el tiempo que te tomas para darle seguimiento a tu blog.

    Estoy incursionando en BOS y tengo una duda. Estoy haciendo lo siguiente:

    1. Tengo un proceso humano que contiene dos checkbox (chkbox1 y chkbox2).
    2. Chkbox1 esta habilitado y chkbox2 esta inhabilitado (solo lectura)
    3. Lo que deseo que haga es que al eleguir una opcion de chkbox1, se habilite chkbox2.

    He estado ingresando javascript ha la parte html attributes, pero no me reconoce mis variables, algo asi:

    Esto lo ingreso en chkbox1 para afectar a chkbox2 (solo lectura)
    onclick=”chkbox2.disabled=true”

    Agradezco tu atencion y apoyo.

    Buen dia.

    • rzornoza

      Hola Rulo, muchas gracias por tu comentario.

      Si he entendido bien tu caso creo que lo que más se ajusta a lo que quieres sería un contingent, en vez de desabilitar el campo lo que hace es mostrarlo o no. Si no te sirve esta funcionalidad comentanos y vemos como agregar un javascript que modifique el disabled.

      La documentación de Bonita para este caso puedes encontrarla aquí (como siempre, necesitas estar logueado pero es gratis, solo cuesta 1 minuto y te sirve para acceder a un montón de documentación util) y te dejo en este otro link un comentario de un caso similar.

      Un saludo y buen día.

      • http://no rulo

        Excelente rzornoza muchas gracias antes que nada por atender mi duda.

        Checare la documentacion que me mencionas para aplicar el contingent.

        Agradezco tu atencion y apoyo.

        • http://no rulo

          Saludos rzornoza nuevamente molestandote ya que me encontre con el detalle de que la opcion contingent no esta habilitada en la version de BOS 5.7.1. pero en la documentacion que me diste deberia aparecer no entiendo a que se debe, y realmente me serviria mucho tener la opcion de contingent

          Agradezco tu atencion y apoyo.

  • Magui Lugo

    Hola estoy trabajando con bonita open solution version 5.7.2 y tengo un problema espero puedan ayudarme. Debo realizar la suma de una columna completa de una matriz editable y no se como acceder a los item de la matriz mediante groovy. Tengo entendido que es una lista de listas y que se puede acceder a ella como un objeto pero la duda es ahora cómo manipulo ese objeto para poder sumar los valores y que la suma me aparesca en una caja de texto aparte. Espero puedan ayudarme gracias :) Att: Magui

    • rzornoza

      Hola Magui,

      suponiendo que los datos de la matriz estén en una variable se trata de una lista de listas, como bien has dicho. Para acceder a todos los datos de una columna tendrias que recorrer todas las filas y recoger el dato de la columna que quieras, por ejem:
      double result=0;//la suma, inicializada a 0
      int numCol=1;//la columna que queremos sumar, en este caso la 2ª
      for(List linea:matriz){//la variable matriz es la matriz :)
      result+=Double.parseDouble(String.valueOf(linea.get(numCol)));
      }
      return result;

      pero como digo, esto sería ya en el servidor, si quieres que esta suma se haga mientras se edita la matriz necesitaras javascript a no ser que tengas la version SP(de pago).

      Si este es el caso dinos, y vemos como añadir el js.

      Un saludo y gracias por el comentario.

      edit: el código está sin probar, por que no tengo un entorno de desarrollo ahora mismo, me puedo haber colado con alguna mayuscula o algo así, pero será poca cosa :P .

      • Magui

        Hola que tal muchas gacias por la ayuda.
        El problema ya esta solucionado se llebo a cabo de la siguiente forma:
        Tomando los valores de la matriz como un objeto java utilizando un arraylist de arraylist de tipo Strng para ser manipulada y realizar las operaciones, posteriormente se convirtio de nuevo a tipo Entera para dejar el objeto tal como estaba y pasar los valores a la siguiente tarea….
        Este es el código del conector:
        import java.util.ArrayList;
        def suma=0;

        for(int i=0;i<array.size();i++ ){
        def fila = (ArrayList) array.get(i);

        def dat = (String) fila.get(1);
        suma+=Integer.parseInt(dat);

        }
        return suma;

        Esperando que a alguien más pueda ser de ayuda y que cuando necesitemos nos auxilien Gracias..:)

        • rzornoza

          Muchas gracias Magui, seguro que a alguien le resulta util.

          Un saludo y gracias por compartir el código.

  • Magui Lugo

    Hola que tal otra vez preguntando acerca de bonita.
    hemos problemas al consumir un web service de .net en bonita open solution version 5.7.2 incluso ya lo intentamos con uno que esta en java pero marca errores de protocolo no se que es lo que sucede y si en la version gratuita se pueden implementar estos servicios de Web Service y LDAP

    • rzornoza

      Hola Magui,

      te puedo confirmar que el servicio de LDAP se puede implementar sin problemas, ya que lo he utilizado en distintos proyectos, si tienes alguna duda en concreto o algún error, si me das más información podemos mirar qué es lo que ocurre.
      Con respecto al servicio web service habría que saber si se trata de un SOAP, un REST o qué protocolo utiliza(El conector por defecto utiliza SOAP). Pero siempre podrías utilizar un conector de groovy y consultarlo mediante java. Si se trata de un Web service REST no debería haber ningún problema en invocarlo mediante una consulta http.
      Si sigues sin poder conectar y puedes decirnos el protocolo del web service miramos a ver como podrías hacer la consulta.

      Un saludo y gracias por tu comentario.

      • Magui Lugo

        Hola muchas gracias ya pude conectarme era un error de lógica en la configuracion..:)y el servicio utiliza SOAP….!!

        • rzornoza

          Hola Magui, me alegro de que se solucionase tu problema.
          Un saludo, y gracias por tu comentario.

  • foxeriro

    Buenas tardes rzornoza he visto que tienes conocimiento acerca de la herramienta Bonitasoft. Estoy conociendo la aplicación y me encuentro con que cuando creo un usuario nuevo a través de User XP y despues de poco tiempo transcurrido o de cerrar la aplicación ya no está y sólo aparecen los usuarios que vienen por defecto. te pido el favor de ayudarme con este inconveniente. Muchisimas gracias.

  • foxeriro

    Buenas tardes rzornoza he visto que tienes conocimiento acerca de la herramienta Bonitasoft. Estoy conociendo la aplicación y me encuentro con que cuando creo un usuario nuevo a través de User XP y despues de poco tiempo transcurrido o de cerrar la aplicación ya no está y sólo aparecen los usuarios que vienen por defecto. te pido el favor de ayudarme con este inconveniente. Muchisimas gracias.

    • rzornoza

      Hola foxeriro,
      Parece ser que desde el cambio de estilos en el blog no me comunica los comentarios.

      Si los cambios los estás haciendo directamente sobre el Bonita Studio ese es el comportamiento normal. Es un entorno de desarrollo y se resetea con el servidor.

      Si es una instalación por lo que me indicas diría que es un problema con la base de datos y puede deberse a la configuración de hibernate.

      Tendrías que buscar los ficheros bonita-journal.properties y bonita-history.properties en la carpeta BONITA_HOME\bonita\server\default\conf y asegurarte de que la propiedad hibernate.hbm2ddl.auto tenga el valor “update” y no “create”.

      Un saludo.

  • Alejandra

    Hola, necesito guardar datos de un determinado formulario en un archivo .pdf. He intentado a traves de un conector Jasper Reports pero no me funciona, que otra forma existe para lograrlo? o como se configura correctamente el conector Jasper?

    Muchas Gracias

    Saludos

  • Franklin

    Hola, estamos desarrollando la automatización de unos procesos con BOS y no hemos descubierto como en los diseños de las pantallas podemos activar o desactivar un campo dependiendo la acción…lo que se busca es tener un mismo formulario para varios trámites y que dependiendo el trámite a realizar asi se active la información que el ciudadano debe presentar…por ejemplo si el tramite lo realiza un extranjero que se active la casilla de chequeo de Pasaporte y que, la de Identificación Única (ID) no sea elegible. Podrían comentarnos como hacerlo…de antemano gracias

  • Sleider

    Buenas dias… al final del post dice que se explicara en uno nuevo, la conexión a una base de datos, si por favor lo pudieras subir.. de antemano agradezco y quedo pendiente a una respuesta favorable.

  • Rigesco90

    Hola… seria tan amable de subir el post de los conectores y bases de datos… muchas gracias… muy buena la explicación.

  • rcampo

    Hola… Alguien sabe como hacer operaciones matematicas en un formulario de BOS… agradezco cualquier ayuda

  • Antony Delgado

    Hola, me gustaría saber cómo desinstalar bonitasoft de mi máquina que está en Debian/Linux… Actualmente tengo la versión 5.10 quiero colocar la 6. Debo desinstalar la que tengo? O al momento de la instalación del 6, este reemplaza la antigua versión?

    Gracias de antemano su respuesta

    • Hector Flores

      Hola dejame decirte que tengo la version 6.1.1 anteriormente tenia la version 6.0.4 pero esto es en windows, yo no desintale la anterior, descargue la version 6.1.1 y lo instale automaticamente y lo que hace es generarte una nueva carpeta, no da ningun problema, espero te sirva

      • Antony Delgado

        Tienes razón y tiene un desinstalador que no había visto jeje. Ahora no uso un instalador sino la versión .sh que no requiere ser instalado, doble clíck y listo.

        Bueno, en mi caso ahora tengo 3 bonitas (la misma versión pero con algunas modificaciones dentro de ellas) y lo que tuve que hacer fue modificar el puerto (editar > preferencias > Opciones de User XP: Puerto) y ponerlos en puertos diferentes a cada uno de ellos y listo ya que debía ejecutar al mismo tiempo los 3.

        Gracias Hector Flores por tu respuesta!

  • Fidel Gonzalez

    quisiera el manual de bonita 6.04

  • Hector Flores

    Buenos dias quisiera saber por que al cambiar de usuarios al asignar los actores da error? tengo entendido que hay un codigo no si ustedes lo tendran? o como puedo hacer

  • Nicolás

    Hola… tengo un problema con Bonita 5.10 User experience… Nos costó mucho la instalación en el servidor pero al final lo logramos pero cuando intentamos subir un proceso .bar no sube y lanza el error “Process cannot be deployed”, Quizás alguien que sepa de que se trata? lo agradezco mucho…

  • dams9011

    En las nuevas versiones de bonita como puedo modelar este caso:

    “Se hace un llamado a dos actividades paralelas y cualquiera que se haga primero continua con el proceso”

    NOTA: En versiones anteriores bastaba con poner como gateway de join un X-OR para que funcionara…con las nuevas versiones no es posible de esa manera.

    Agradezco de antemano la ayuda.

  • hugopablo

    Hola
    Instale Bonita 5.10.2 en un servidor con debian. Le cambie la base de datos a PostgreSQL.
    El problema que tengo es que NO crea las tablas de las bases de datos bonita_journal y bonita_history
    Configure el archivo context.xml para agregar los datasource de Tomcat.
    Modifique los archivos de bonita-history.properties y bonita-journal.properties
    Use el parametro
    hibernate.hbm2ddl.auto update
    Ya reinicie varias veces tanto el Tomcat como el PostgreSQL, pero NO crea las tablas
    ¿ Falta configurar algo mas ?
    ¡ Gracias !

  • Efren Juarez

    Algun Caso de Uso que nos de un idea mas clara de como pimplementar un Servicio Restful con Bonita y Talend EBS

  • Esteban Mauricio Oyarzun Barre

    Hola amigos, estoy comenzando a trabajar con bonita comunity, y necesito lograr esto en mi formulario:

    tengo un una lista de opciones : select 1 , select 2, select 3

    Lo que necesito hacer es que ese select1 este vinculado con un dato de texto. Para que cuando este select 1 se seleccione se copie en una caja de texto el dato vinculado:

    Ejemplo:

    select 1 —- vinculado a un email) cuando escogo esta opcion—–el email se me copia en una caja de texto.
    y un mail distinto para cada select

    muchas gracias por la yuda