jueves, 20 de octubre de 2016

Actualizar payload desde un Managed Bean en Oracle BPM 12c | Update Payload

Si por alguna razón necesitamos actualizar el payload que manejamos como parte de nuestra tarea humana, el siguiente ejemplo nos puede ayudar.

En la Tarea de Usuario que usaremos como ejemplo, asigno en el Input de la Tarea de usuario el valor "valor inicial" al campo "campo1" que es uno de los campos que posee la Tarea como forma de mostrar el valor que actualizaré:



Luego con el siguiente código que invocamos a través de uno de los botones que tenemos en la página ADF realizamos la actualización del valor que posee el campo "campo1":


Donde se puede observar como obtengo el acceso al "campo1" que se encuentra dentro del payload con la siguiente sentencia:

Node value = payload.getElementsByTagName("campo1").item(0);

Luego especificamos el nuevo valor para el campo con la siguiente sentencia:

value.setTextContent("Valor fin");

Guardamos el valor modificado de vuelta a la tarea:

myTask.setPayloadAsElement(payload);

Y por último actualizamos la tarea con el payload actualizado:

taskSvc.updateTask(wfContext,myTask);

Si ejecutamos el proceso y accedemos a la Tarea de Usuario veremos que el "campo1" tiene como valor "valor inicial" porque así lo especificamos en el Input de la tarea:


El botón "Cambiar" es el que se encarga de invocar el código que ya vimos antes y que al ser presionado actualiza el payload. Si luego presionamos el botón "Enviar" se termina con la tarea y podremos ver en el Seguimiento del proceso que efectivamente el valor del Payload para el campo "campo1" fue actualizado con el valor "valor fin" que especificamos en el código:


5 comentarios:

  1. Hola Carlos, conoces alguna forma de cambiar el payload, digamos al igual que tu post al dar el botón Cambiar, y que si cierran el navegador y vuelven a abrir la tarea, el valor incial ahora sea "Valor fin"?, algo así como hacer persistente el cambio del payload de entrada. Gracias de antemano.

    ResponderEliminar
    Respuestas
    1. Hola Abdiel, como el proceso de actualizar el payload comprende el uso de clases de flujo de trabajo de BPM, creo que si no se usan esas clases está algo dificil el poder guardar lo ingresado sin que algo accione el guardar la información, sería de probar algo con Javascript, que posee métodos que puede realizar acciones al cerrar el navegador.

      Saludos!

      Eliminar
  2. Hola, realicé la actualización del payload dentro de la implementacion de una human task de la manera en la cual describes y actualizó perfecto ya que puedo ver reflejado ese cambio en el payload, pero al salir de la actividad obtengo el siguiente error "Ya se ha modificado la tarea. La tarea se ha modificado antes de que se haya podido realizar la acción actual." Tienes alguna idea de cual pudiera ser el error

    ResponderEliminar
    Respuestas
    1. Hola Yessika, ese mensaje de que ya se ha modificado la tarea puede aparecer debido que además de estar actualizando el payload por medio de código también se está actualizando desde la interfaz gráfica, mira de solo actualizar el payload solo por el código y no también por la UI.

      Saludos!

      Eliminar
    2. Buenas tardes Carlos,

      En caso de que requiera actualizar varias veces el payload, cómo puedo evitar el error de "Ya se ha modificado la tarea.."
      Gracias!

      Eliminar