Vamos a aprovechar la información del sistema para hacer algo obvio: que el proceso utilice el identificador del usuario iniciador.
Recordemos que la instanciación de un proceso consiste en dar los valores iniciales a la variable de negocio. Pueden ser nulos, cadenas vacías o ceros, o pueden ser los que nosotros decidamos darle.
Vayamos por pasos.
Ve a Archivo/Duplicar y modifica nombres o versiones hasta que no tengas señales de error.
Para no generar confusiones renombramos los procesos.
Proceso A2
Proceso B2
Al ejecutar la versión anterior de este diagrama, los procesos "Proceso A" y "Proceso B" se han desplegado en el servidor web de Bonita, están activos. Debemos asegurarnos de que los nuevos flujos de mensaje van a los nuevos procesos.
Edita los eventos "enviada reclamación" y "respuesta enviada" y selecciona los procesos correctos. Por ejemplo, para el primer evento mencionado debemos elegir "Proceso B2".
No estaría de más que probaras el proceso y comprobaras que se ejecuta igual que la versión anterior.
Solo vamos a hacer modificaciones en el Proceso A2
De instanciación y de tareas. Es la forma más fácil de no cometer errores. No empezamos de cero, pero casi. Recuerda eliminar también el valor predeterminado de la variable de negocio.
Añade un atributo "usuario" de tipo LONG. Despliega el BDM modificado.
Marca únicamente "reclamación"
Accede a la función de inicialización
Encontrarás este código Javascript:
def reclamaVar = new com.company.model.Reclama()
reclamaVar.reclamacion = vnreclamaInput?.reclamacion
return reclamaVar
Haz espacio antes de ese código y busca en el panel izquierdo la plantilla de código que necesitamos.
Pincha dos veces en la plantilla y se te generará el código que puedes ver aquí.
Esto nos permitirá saber quién es el usuario que ha iniciado el proceso, y acceder a sus datos, entre ellos el nombre y los apellidos.
Mueve el código original dentro del bloque try, y añade, antes de la línea con el return:
reclamaVar.usuario = processInitiator.id
Con esto estamos dando un valor inicial a reclamaVar.usuario, el identificador de usuario del iniciador del proceso (processInitiator.id).
En la versión anterior del proceso escribíamos un nombre y apellidos cualesquiera. Ahora vamos a consultar cuáles son esos datos del usuario processInitiator.id.
Volvemos a hacer uso del panel izquierdo para usar otra plantilla
Una vez se te coloque el nuevo código, sustituye el texto "userId" de la plantilla por processInitiator.id.
Como decíamos, processInitiator.id es un valor identificador del usuario; con la llamada a getUser(), almacenamos en user toda la información asociada a ese identificador.
Una vez que tenemos esa información, ya podemos usarla. Inserta esta línea antes del return final:
reclamaVar.quien = user.firstName+" "+user.lastName
Hemos utilizado processInitiator.id para recuperar la información personal de ese usuario que hemos almacenado en user. Con ella ya podemos inicializar reclamaVar.quien y componer el nombre completo del usuario que inició el proceso. En nuestro caso, va a ser Walter Bates.
Al final deberías ver el siguiente contenido en el editor. Lo anterior era mostrarte cómo se ha llegado a esto. De hecho, puedes copiar y pegar directamente este texto.
import org.bonitasoft.engine.identity.UserNotFoundException
try{
def processInitiator = apiAccessor.getIdentityAPI()
.getUser(apiAccessor.getProcessAPI()
.getProcessInstance(processInstanceId)
.getStartedBy())
def user = apiAccessor.getIdentityAPI().getUser(processInitiator.id)
def reclamaVar = new com.company.model.Reclama()
reclamaVar.usuario = processInitiator.id
reclamaVar.quien = user.firstName+" "+user.lastName
reclamaVar.reclamacion = vnreclamaInput?.reclamacion
return reclamaVar
}catch(UserNotFoundException e){
// Handle UserNotFoundException here
// Was the process started by the system (e.g.: a start event) ?
// Has the user who started the process instance been deleted ?
}
En resumen, en el momento en el que se inicie el proceso —cuando se rellene el formulario de instanciación— esos dos atributos de la variable de negocio (vnreclama) se actualizarán con los datos del usuario que inicie el proceso, además de con lo que él escriba en el formulario.
Para no modificar otros formularios, a este lo llamarás fSreclama2.
Puesto que el contrato solo tenía un atributo, "reclamación", el formulario que te encontrarás es este.
Lo que queremos hacer es parecido a lo que hemos hecho antes, recuperar el identificador de usuario del iniciador del proceso y mostrar su nombre y apellidos.
No es que lo necesitemos, la inicialización de la variable de negocio ya incorporará esos datos y estarán disponibles para el resto del proceso. El formulario podía seguir mostrando solo el input de la reclamación. Solo es para que se vea más información cuando se muestre.
No obstante, hasta que no se envía el formulario no se dan valores a la variable de negocio. O lo que es lo mismo, al mostrar el formulario no tenemos vnreclama instanciada.
Para que el formulario muestre esa información necesitamos un par de variables en el formulario y un widget de texto.
elusuario
External API
../API/system/session/1
datosusu
External API
../API/identity/user/{{elusuario.user_id}}
<b>Yo soy</b> {{datosusu.firstname}} {{datosusu.lastname}} (usuario {{datosusu.id}})
Recuerda activar Interpretar HTML.
Para este contrato solo marcamos "comenta".
Igual que antes, para no machacar el formulario original, llama a este fLeerRespuesta2.
Al crear el formulario desde cero, Bonita incorpora toda la variable de negocio, también aquellos atributos que no están en el contrato. Puesto que no están en el contrato y no pretendemos actualizarlos, se muestran como de solo lectura. Hemos hecho algunos cambios cosméticos, pero nada más.
Estamos en el entorno de desarrollo de Bonita Studio. Por lo tanto, el usuario típico con el que nos identificamos es Walter Bates. El número de usuario —aquí el 304— puede ser otro, depende de la versión y la instalación del servidor Bonita.
Por cierto, su nombre de usuario es walter.bates, no lo confundamos con sus datos personales, firstname y lastname entre otros, que son los que finalmente mostramos nosotros.