Obtener y utilizar información del caso actual

<< Clic para mostrar Tabla de Contenidos >>

Navegación:  Automatización de Procesos con poco código > Studio Cloud -ambiente de autoría > Bizagi Studio > Asistente de Procesos > Reglas de Negocio > Ejemplos de reglas de negocio > Casos y actividades >

Obtener y utilizar información del caso actual

Bizagi brinda varias funciones que le permiten encontrar y manipular información acerca de la tarea actual. La mayoría de las funciones de este grupo inician con la sentencia:

 

Me.Case

 

Este grupo de funciones se encuentran disponibles bajo la categoría Información del caso actual.

 

CurrentCaseInfo5

 

La información disponible para el caso actual es:

 

Propiedad

Descripción

CaseId

Devuelve el id del caso actual.

CaseNumber

Devuelve el número de caso del caso actual.

Creationdate

Devuelve la fecha de creación del caso actual.

ParentProcessId

Devuelve el id del proceso padre del Subproceso actual. Vea un ejemplo

ParentTaskId

Devuelve el idTask del proceso padre para el proceso del caso actual.

ProcessState

Devuelve el estado del proceso del caso actual. Este puede ser: Abortado, Completo, Iniciado, En ejecución.

SolutionDate

Devuelve o asigna la fecha de solución para el caso actual.

CHelper.getSubProcessesId

Devuelve una colección con todos los Subprocesos del caso actual. Vea un ejemplo

getWorkItem()

Devuelve el Work Item relacionado a una tarea dada del caso actual. Vea un ejemplo

CHelper.SiblingProcessId

Devuelve una colección con los casos de los Subprocesos hermanos. Vea un ejemplo

CHelper.thereAreOpenProcesses

Evalúa si hay casos abiertos para un número de creación de caso específico. Vea un ejemplo

assignWorkItem

Asigna una tarea específica (identificada por su nombre único) a un usuario específico. Vea un ejemplo

 

Ejemplos

Los siguientes ejemplos ilustrarán como usar estas funciones:

 

Obtener el id del proceso padre

Obtener el id de los procesos hijos (Subprocesos) de un proceso.

Obtener el Id de los procesos hermanos de un proceso

Evaluar si hay procesos abiertos

Obtener el WorkItem de una tarea específica

Asignar una tarea a un usuario específico

 

Obtener el Id del Proceso Padre

La función ParentProcessId devuelve el identificador del proceso padre de un Subproceso específico.

 

La sintaxis de la función es la siguiente:

 

Me.Case.ParentProcessId

 

note_pin

Esta función entrega el Id del padre para un caso con contexto. Si necesita obtener este valor para un caso sin contexto, puede hacer uso de la siguiente función:

 

CHelper.getParentProcessId(caseId,  wfclassName)

 

Donde caseId es el Id del proceso hijo y wfClassName es el WfClassName del padre.

 

Considere un proceso de Selección de Personal. El Subproceso Realizar pruebas es un Subproceso múltiple que ejecuta diferentes pruebas para evaluar las habilidades del candidato y verificar si el o ella cumple con los requerimientos de la posición.  

 

CurrentCaseInfo2

 

Todas las pruebas deben ser aprobadas para continuar con el proceso. De lo contrario, es decir, el candidato debe ser rechazado.

Debido al rechazo, se ejecutará un evento llamado Cancelar Selección en el proceso padre, desde el la actividad Proceso de Selección.  

 

CurrentCaseInfo3

 

Para configurar el evento de cancelación, haga lo siguientes:

 

1. En el cuarto paso del asistente, seleccione Acciones de la actividad.

Seleccione la actividad Cancelar proceso de selección encontrada en el Subproceso Realizar Test y cree una expresión Al Entrar.

 

CurrentCaseInfo4

 

2. Cree un elemento de expresión. Incluya la función setEvent para ejecutar el Evento de Cancelación de Selección. El primer parámetro de la función es el identificador del proceso padre. Para encontrarlo, agregue la función ParentProcessId de la categoría Información del caso actual.

 

CurrentCaseInfo1

 

CHelper.setEvent(Me,Me.Case.ParentProcessId,"CloseSelection",null);

 

Finalmente guarde la expresión.

 

Obtener el id de los procesos hijos (Subprocesos) de un proceso.

Es posible obtener el identificador de un Subproceso relacionado a un proceso específico utilizando la función getSubProcessesId.

Esta función devuelve una lista con los identificadores de los Subprocesos de todos los casos relacionados.

 

La sintaxis de esta función es la siguiente. Se toma la entidad de contexto como parámetro de entrada.

 

CHelper.getSubProcessesId(Me)

 

note_pin

Esta función retorna todos los subprocesos del caso en específico. Si necesita obtener la lista de un determinado tipo de subproceso, puede usar la siguiente función que incluye el parámetro WfClassName:

 

CHelper.getSubProcessesId(Me, WfClassName)

 

Imagine la Administración de Proyectos. Las actividades necesarias para terminar le proyecto se planean en la tarea Planear Actividades.

El Subproceso Realizar actividades es lanzado por cada actividad planeada. Simultáneamente una tarea permite al Gerente del Proyecto monitorear el progreso de cada actividad.

 

CurrentCaseInfo14

Los casos relacionados a cada instancias del Subproceso Realizar actividades son privados (visité la sección Seguridad del Caso), es decir que solo las personas que han ejecutar cualquier tarea en el Subproceso tienen acceso a la información del caso. Sin embargo, el desarrollo de cada una de las actividades debe se monitoreado por un auditor que también necesita acceso.

 

Para otorgar el acceso al auditor es necesario crea una expresión. La expresión obtiene los identificadores de cada instancia del Subproceso y otorga los permisos necesarios al auditor para acceder a cada uno de ellos. Siga los siguientes pasos para crear la expresión:

 

1. En el cuarto paso del asistente, seleccione Acciones de la actividad.

Seleccione la actividad Monitorear Actividades y cree una expresión Al Entrar. Esto ejecutará la expresión en el mismo momento en que la instancia del Subproceso es creada.

 

CurrentCaseInfo15

 

2. Cree un elemento de expresión. Obtenga la lista de Subprocesos asociados en una variable utilizando la función getSubProcessesid de la categoría Información del caso actual.

 

CurrentCaseInfo9

 

CurrentCaseInfo10

 

3. Obtenga el UserId del auditor. Utilice la función CHelper.GetUsersforRole para obtener una lista de id de los usuarios que tienen el Rol. Ya que para el ejemplo, solamente una persona tiene le Role de Auditor podemos extraer el id de la posición 0 de la lista.

 

CurrentCaseInfo6

 

4. Agregue un operador FOR para recorrer la lista de los Subproceso.

CurrentCaseInfo11

 

5. Obtenga el id de cada Subproceso y utilícelo como primer parámetro en la función CHelper.GrantCaseAccess. El segundo parámetro de la función será siempre el UserId del auditor. Esto otorgará permisos al auditor para acceder a la información de cada Subproceso.

 

CurrentCaseInfo8

 

var ChildProcesses=CHelper.getSubProcessesId(Me);

var ListofAuditors=CHelper.getUsersForRole("Auditor");

var UserId=ListofAuditors[0];

for(var Records=0; Records < ChildProcesses.Count; Records++)

{

var Case=ChildProcesses[Records];

CHelper.GrantCaseAccess(Case,UserId);

}

 

Por último, guarde la expresión.

 

Obtener el Id de los procesos hermano de un proceso

Es posible obtener los identificadores de procesos hermanos (Subprocesos con el mismo proceso padre) de un proceso específico utilizando la función getSiblingProcessesId.

 

La función retorna una lista de identificadores de los casos hermanos de dada una clase de flujo.

 

La sintaxis de la función:

 

CHelper.getSiblingProcessesId(Me,WfClassName)

 

Un departamento de policía decide automatizar el proceso de Manejo de Casos de Homicidio utilizando Bizagi. En la primera actividad el proceso se ingresa toda la información del homicidio. También se crea una lista de sospechosos para realizar las investigaciones correspondientes.

 

Se abre un caso del Subproceso de Investigación de Sospechosos por cada sospechoso. Tan pronto como un sospechoso es encontrado culpable del homicidio, las otras investigaciones deben ser canceladas y el proceso continúa con la generación de la orden de captura y la captura del individuo.

 

CurrentCaseInfo18

 

Una compuerta divergente se utiliza para evaluar si el sospechoso es encontrado responsable cuando la investigación termina, si esté es el caso, una expresión se ejecuta para cancelar las otras investigaciones, de los contrario el Subproceso finaliza.

 

CurrentCaseInfo19

 

Para configurar la expresión que cancela las demás investigaciones siga los siguientes pasos:

 

1. En el cuarto paso del Asistente, seleccione la opción Acciones de la Actividad.

Seleccione La tarea Cancelar actividades de la Investigación en el Subproceso Investigación de sospechosos, cree una expresión Al entrar.

 

CurrentCaseInfo20

 

2. Cree un elemento de expresión. Obtenga la lista de los Subprocesos hermanos (otras investigaciones) y guarde la variable utilizando la función getSiblingsProcessesId de la categoría Información del caso Actual.

 

CurrentCaseInfo21

 

El parámetro de la función es el identificador del proceso. Para obtener este parámetro siga los pasos descritos en Cómo obtener WfClassName.

 

CurrentCaseInfo22

 

3. Agregue el operador FOR para recorrer la lista de los Subprocesos.

CurrentCaseInfo23

 

4. Utilice la función CHelper.AbortProcess. para cancelar los demás procesos. Esta función recibe tres parámetros:

 

El primer parámetro es la sentencia Me

El segundo parámetro es el id del caso a ser abortado. En este caso obtenemos los id´s de cada Subproceso a abortar.

El tercer parámetro es un número:

oDigíte 1 si solamente es necesario abortar el proceso (esté es el caso del presente ejemplo)

oDigíte 2 si el proceso y su proceso padre deben ser abortados.

oDigíte 3 si solamente el proceso padre debe ser abortado y NO el proceso en sí.

 

CurrentCaseInfo24

 

//Obtener el id de los procesos hermanos.

var SiblingProcesses=CHelper.getSiblingProcessesId(Me,"SuspectInvestigation");

 

//Recorra la lista

for(var Records=0; Records < SiblingProcesses.Count; Records++)

{

//Obtener el id del subproceso

var Case=SiblingProcesses[Records];

//Abortar el proceso hermano

CHelper.abortProcess(Me,Case,1);

}

 

Finalmente guarde la expresión

 

Evaluar si hay procesos abiertos

Es posible evaluar si hay procesos abiertos que tengan relación a un proceso específico utilizando la función thereAreOpenProcesses.

 

La función retorna verdadero cuando hay casos abiertos de un número de caso específico, de lo contrario retorna falso.

 

La sintaxis de la función es:

 

CHelper.thereAreOpenProcesses(CaseNumber)

 

note_pin

También puede usar esta función con el parámetro WfClassName:

 

CHelper.thereAreOpenProcesses(caseNumber, wfclassName)

 

Imagine un Gerente de proyectos. Las actividades necesarias para completar el proyecto son planeadas en la tarea Planear proyecto.

El Subproceso Realizar Actividades es lanzado por cada actividad planeada. Simultáneamente, una actividad habilita al Gerente del Proyecto para monitorear el estado de cada actividad.  

 

Si el Gerente de Proyecto trata de cerrar el proyecto cuando todavía hay actividades pendientes, es decir, instancias abiertas del Subproceso Ejecutar Actividad, se lanza una validación para asegurar que no se cierre el caso antes de completarlas.

 

CurrentCaseInfo14

Para validar que todas las actividades hayan terminado, usaremos la función thereAreOpenProcesses.

 

1. Vaya al cuarto paso del Asistente de Proceso y seleccione Acciones de la Actividad.

Dé clic en el monitor de actividades y cree una Expresión a la salida.

 

CurrentCaseInfo15

 

2. Cree un módulo de expresión. Evalúe si hay actividades pendientes utilizando la función thereAreOpenProcesses la cual se encuentra en la categoría de Información del caso actual. Asigne Me.Case.CaseNumber como segundo parámetro.

 

3. Cuando hay actividades pendientes, la función thereAreOpenProcesses retornará verdadero. En este caso se deberá lanzar una validación. Incluya el mensaje a mostrar.

 

CurrentCaseInfo17_Patch

 

if(CHelper.thereAreOpenProcesses(Me.Case.CaseNumber)==true)

{

CHelper.ThrowValidationError("There are pending activities. You cannot close the case");

}

 

Finalmente, guarde la expresión.

 

Obtener el WorkItem de una tarea específica

Usted puede obtener el WorkItem relacionado a una tarea específica utilizando la función Me.Case.getWorkItem. La obtención de un WorkItem es especialmente útil para obtener o definir información de una tarea, desde cualquier otra en el proceso.

 

Esta función devuelve un objeto del tipo WorkItem. La sintaxis es:

 

Me.Case.getWorkItem(TaskName)

 

En un Proceso de Servicio al Cliente se utiliza un evento de temporización para recordar el vencimiento de una solicitud. De acuerdo a la naturaleza y acciones necesarias para atender la solicitud, un agente de servicio al cliente puede modificar la fecha de vencimiento inicial. Esta actualización puede hacerse desde cualquier tarea del proceso cambiando el valor de un atributo del modelo de datos denominado DueDate.

 

CHelper77

 

Para actualizar la duración del temporizador, usted puede hacer uso de la función Me.Case.getWorkItem.

 

Cree una expresión como una acción a la salida de la tarea desde donde pueda ser actualizada la duración del temporizador.

 

Utilice la función Me.Case.getWorkItem ingresando el nombre del evento de temporización como parámetro. Para este ejemplo el nombre es DueDateReminder.

 

CHelper75

 

Ahora aplique el método .EstimatedSolution sobre el objeto de tipo WorkItem para definir la nueva duración del temporizador.

 

CHelper76

 

//Actualice la duración del temporizador

Me.Case.getWorkItem("DueDateReminder").EstimatedSolutionDate=<CustomerServiceRequest.DueDate>;

 

Asignar una tarea a un usuario específico

Usted puede asignar una tarea a un usuario específico utilizando expresiones con la función Me.Case.assignWorkItem.

 

La sintaxis de esta función es:

 

Me.Case.assignWorkItem(TaskName, UserId, Replace)

 

Esta función recibe tres parámetros:

 

TaskName: Nombre único de la tarea a asignar. Este nombre puede identificarse en la base de datos.

UserId: Id del usuario al cual se asignará la tarea.

Replace: Valor Booleano. Si el valor es true, reemplazará a todos los usuarios asignados. Si es false, el usuario se añadirá a los usuarios asignados.

 

Una compañía de seguros utiliza Bizagi para gestionar sus procesos jurídicos. Al inicio del proceso, se asigna un abogado para realizar el seguimiento del mismo. En cualquier momento del proceso, el gerente de asuntos legales puede reasignar el proceso, para lo cual se habilita un evento.

 

Una vez que el gerente de asuntos legales selecciona al nuevo abogado en el evento, las actividades que se encuentren asignadas en ese momento al abogado anterior, deben ser reasignadas al nuevo abogado.

 

Suponga que hay dos actividades: Hacer seguimiento al proceso y Activar conciliación.

 

Para reasignar el abogado se utiliza una expresión como una acción a la salida del evento.

 

 

1. Vaya al cuarto paso del asistente de procesos Bizagi (Reglas de negocio) y seleccione Acciones de la actividad.

Seleccione el evento desde el cual se selecciona el nuevo abogado por parte del gerente de asuntos legales.

 

2. Agregue un módulo de expresión.

Obtenga el id del usuario a asignar. En este caso, el IdUser del nuevo abogado.

 

ReassingWorkItem1

 

3. Utilice la función Me.Case.assignWorkItem para reasignar las tareas al nuevo abogado. Para este ejemplo, suponga que los nombres único de las tareas son (diferentes a los nombres para mostrar):

Hacer seguimiento al proceso = "ProcessFollowup"

Activar conciliación = "ActivateConciliation"

 

ReassingWorkItem2

 

//Obtener el id del nuevo abogado

var UserId=<JudicialProcess.NewLawyer.idUser>;

//Reasignar la tarea "Hacer seguimiento"

Me.Case.assignWorkItem("ProcessFollowup", UserId, true);

//Reasignar la tarea "Activar conciliación"

Me.Case.assignWorkItem("ActivateConciliation", UserId, true);


Last Updated 1/26/2022 4:08:16 PM