i
Casos
La clase modelo contiene las propiedades con sus métodos getter y setter, mientras que la clase servicio contiene las operaciones a realizar sobre el modelo.
Por ejemplo, si se usa el proceso "Request Payment", al descargar los fuentes Java del proceso, se genera un archivo requestPayment.java con los métodos del modelo y otro archivo requestPaymentService.java con las operaciones disponibles del servicio.
Contenido de la Clase Modelo
El modelo de un caso contiene:
•Constructor del modelo.
•Métodos getter y setter de las propiedades del caso.
•Métodos getter para obtener los formularios relacionados.
•Métodos getter para obtener las actividades en ejecución.
•Métodos getter para obtener el proceso correspondiente al caso.
Métodos getter y setter de las propiedades del caso
La clase modelo de un caso contiene un conjunto de métodos getter y setter para las propiedades del caso.
Operación |
Descripción |
Parámetros |
---|---|---|
getCdCase() |
Obtiene el identificador del caso. |
|
setCdCase(casenumber) |
Permite asignar el valor del identificador del caso. |
String casenumber: Número del caso |
getCdState() |
Obtiene el estado del caso.
Valores posibles: ACTIVE - Activo CANCELLED - Cancelado ENDEDCASE - Finalizado |
|
getDsCase() |
Obtiene la descripción del caso. |
|
getDtEnded() |
Obtiene la fecha de finalización del caso. |
|
getDtExpiration() |
Obtiene la fecha de vencimiento del caso. |
|
getDtInitiated() |
Obtiene la fecha de inicio del caso. |
|
getPriority() |
Obtiene la prioridad del caso.
Valores posibles: 1 - Urgente 2 - Alta 3 - Media 4 - Baja |
|
setLastPressedButton(button) |
Permite configurar el último botón presionado. |
String button: Nombre del último botón presionado |
getLastPressedButton() |
Obtiene el último botón presionado. |
|
get + <Nombre de la clase del formulario> + Entity() |
Obtiene una instancia de la clase del formulario relacionado al proceso. |
|
getLsVinculatedForms() |
Obtiene una lista de instancias de formularios relacionados al caso. |
|
getVinculatedFormByIdEntity(idEntity) |
Obtiene una instancia del formulario relacionado al caso. |
String idEntity: Identificador de la instancia del formulario |
getProcess() |
Obtiene el proceso correspondiente al caso. |
|
getLsExecutedActivities() |
Obtiene las actividades finalizadas del caso. |
|
getLsCurrentActivities() |
Obtiene las actividades en ejecución del caso. |
Método getter para obtener los formularios relacionados
Dado un caso, se pueden utilizar los valores de los campos de los formularios relacionados al mismo, de la misma manera que se haría si las actividades se ejecutaran manualmente.
La clase modelo tiene un método getter para cada formulario relacionado al proceso, con la estructura “get + <Nombre de la clase del formulario> + Entity()”. Una vez recuperada una instancia la misma se utiliza de igual manera que para formularios.
Ejemplo
Si se modela el proceso “Request Payment” relacionados a los formularios “Payment” y “Report”, la clase RequestPayment tiene los métodos:
•getPaymentEntity(): Retorna una instancia de la clase Payment, que corresponde al formulario "Payment" relacionado al caso.
•getReportEntity(): Retorna una instancia de la clase Report, que corresponde al formulario "Report" relacionado al caso.
El caso no puede tener asociados formularios con el mismo nombre de clase, aunque pertenezcan a distintas aplicaciones.
Métodos getter para obtener las actividades en ejecución
Dado un caso, se puede acceder a la lista de sus actividades en ejecución, utilizando el método de las propiedades del caso getLsCurrentActivities() de la clase modelo, que retorna una lista de objetos “ExecutedActivity” con sus métodos.
Operación |
Descripción |
Parámetros |
---|---|---|
getCdActivity() |
Obtiene el código de la actividad. |
|
getDsNameActivity() |
Obtiene el nombre de la actividad. |
|
getCdState() |
Obtiene el estado de la actividad.
Valores posibles: EXEC - En ejecución CANCELLEDACT - Cancelada ENDEDACT - Finalizada |
|
getPriority() |
Obtiene la prioridad de la actividad.
Valores posibles: 1 - Urgente 2 - Alta 3 - Media 4 - Baja |
|
getDtEnded() |
Obtiene la fecha de finalización de la actividad. |
|
getDtExpiration() |
Obtiene la fecha de vencimiento de la actividad. |
|
getDtInitiated() |
Obtiene la fecha de inicio de la actividad. |
|
getCdUserExec() |
Obtiene el código del usuario que ejecutó la actividad. |
|
getCdUserInit() |
Obtiene el código del usuario que inició la actividad |
|
getNuDurationSeconds() |
Obtiene la duración en segundos de la ejecución de la actividad. |
|
getTpActivity() |
Obtiene el tipo de la actividad.
Valores posibles: TP_GATEWAY - Compuerta TP_STANDARD - Estándar TP_ABSTRACT - Abstracta |
|
getTpParticipant() |
Obtiene el tipo de participante de la actividad.
Valores posibles: USER - Usuario ORG_UNIT - Unidad organizacional ROLE - Rol THING - Usuario cosa
|
|
getLsExecutedActions() |
Obtiene una lista de acciones ejecutadas por la actividad. |
Método getter para obtener el proceso correspondiente al caso
El proceso correspondiente a un caso se puede obtener mediante el método getProcess() de la clase modelo, que retorna una instancia de la clase “Process” con sus métodos.
Operación |
Descripción |
Parámetros |
---|---|---|
getCdProcess() |
Obtiene el código del proceso. |
|
getCdVersion() |
Obtiene la versión del proceso. |
|
getIdApplication() |
Obtiene el identificador de la aplicación del proceso. |
|
getCdFirstActivity() |
Obtiene un objeto Activity con la primera actividad del proceso, |
|
getDsComment() |
Obtiene el comentario del proceso. |
|
getDsDescription() |
Obtiene la descripción del proceso. |
|
getDsName() |
Obtiene el nombre del proceso. |
Contenido de la Clase Servicio
El servicio permite realizar las siguientes operaciones sobre los casos:
Operación |
Descripción |
Parámetros |
---|---|---|
startCase(case)
startCase(case, user)
|
Inicia un caso, ejecutando la actividad inicial del proceso relacionado. Retorna el código del caso creado.
|
Case case: Modelo del caso a iniciar. Los campos del formulario relacionado deben tener valores
Case case: Modelo del caso a iniciar. Los campos del formulario relacionado deben tener valores
String user: Código del usuario que ejecuta la actividad. Se debe especificar cuando el responsable de la actividad es un rol |
startCase(case. moveCase)
startCase(case, user, moveCase)
|
Inicia un caso, con la posibilidad de no ejecutar la actividad inicial del proceso relacionado. Retorna el código del caso creado.
|
Case case: Modelo del caso a iniciar. Los campos del formulario relacionado deben tener valores
Boolean moveCase: Configurar con valor false, para indicar que no tiene que ejecutar la actividad inicial del proceso
Case case: Modelo del caso a iniciar. Los campos del formulario relacionado deben tener valores
String user: Código del usuario que ejecuta la actividad. Se debe especificar cuando el responsable de la actividad es un rol
Boolean moveCase: Configurar con valor false, para indicar que no tiene que ejecutar la actividad inicial del proceso |
execute(case)
execute(case, user) |
Ejecuta la actividad actual de un caso. Retorna el estado del caso actualizado. |
Case case: Modelo del caso con número de caso asignado
Case case: Modelo del caso con número de caso asignado
String user: Código del usuario que ejecuta la actividad. Se debe especificar cuando el responsable de la actividad es un rol |
execute(case,activity)
execute(case,activity,user)
|
Ejecuta la actividad de un caso indicada en el parámetro. Retorna el estado del caso actualizado.
|
Case case: Modelo del caso con número de caso asignado
ExecutedActivity activity: Actividad recuperada de la lista de actividades en ejecución del caso
Case case: Modelo del caso con número de caso asignado
ExecutedActivity activity: Actividad recuperada de la lista de actividades en ejecución del caso
String user: Código del usuario que ejecuta la actividad. Se debe especificar cuando el responsable de la actividad es un rol |
read(case) |
Lee un caso. |
Case case: Modelo del caso con número de caso asignado |
cancelCase(case, observation) |
Cancela un caso. |
Case case: Modelo del caso con número de caso a cancelar. La cancelación se realiza con el usuario online que ejecuta la regla sdk
String observation: Motivo de la cancelación |
reasignCase(case, reasignUser)
|
Asigna la tarea en ejecución del caso. |
Case case: Modelo del caso con número de caso cuya tarea se asigna
String reasignUser: Código del usuario al que se le asigna la tarea del caso |
Ejemplos de Uso
En los ejemplos se utiliza el proceso “Request Payment” y cada ejemplo contiene el uso de la clase modelo “RequestPayment” y la clase servicio “RequestPaymentService”.
Además se utilizan las clases “Request” y “Report” que representan a los modelos de los formularios vinculados al proceso “Request Payment”.
Los ejemplos detallan cómo iniciar un caso, leerlo, ejecutar y asignar sus actividades, finalizarlo y cancelarlo.
Diagrama del Proceso para los Ejemplos del 1 al 7
1.Inicio de un caso
Para iniciar el caso, se ejecuta la primera actividad “Fill Request”. El caso pasa a la actividad “Evaluate Request” bajo responsabilidad del usuario “Afarias”, configurado en el lane “Authorizer”.
La ejecución de la actividad “Fill Request” realiza la operación “Crear” sobre el formulario “Request” con los valores asignados a sus campos.
Se crea una instancia de la clase modelo “RequestPayment”, al formulario “Request” obtenido mediante el método getRequestEntity() se le asignan valores a sus campos con los correspondientes métodos setter. Utilizando la clase servicio “RequestPaymentService” se inicia el caso con el método startCase(myFirstPaymentCase).
RequestPayment myFirstPaymentCase = new RequestPayment(); myFirstPaymentCase.getRequestEntity().setAmount(new Double(200));
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); myFirstPaymentCase.getRequestEntity().setDueDate(new Date(format.parse("2020-06-28").getTime())); myFirstPaymentCase.getRequestEntity().setMessage("This is my first payment request.. i need to buy more coffee!!");
RequestPaymentService myService = new RequestPaymentService(getApiClient()); String cdCase = myService.startCase(myFirstPaymentCase);
|
2.Inicio de un caso sin ejecutar la primera actividad
Se utiliza el proceso del Ejemplo 1.
Utilizando la clase servicio “RequestPaymentService” se inicia el caso con el método startCase(case.moveCase) con el segundo parámetro en false para que no ejecute la primera actividad “Fill Request”.
RequestPaymentService myService = new RequestPaymentService(getApiClient()); String cdCase = myService.startCase(myFirstPaymentCase,false);
|
3.Lectura del caso
Se crea una instancia de la clase modelo “RequestPayment”, se le asigna el número de caso generado por el método startCase(myFirstPaymentCase) de la clase servicio “RequestPaymentService”, en el ejemplo anterior.
Se lee el caso con el método read(myFirstPaymentCase) de la clase servicio “RequestPaymentSercice” y el número de caso .
RequestPayment myPaymentCase = new RequestPayment(); myPaymentCase.setCdCase(cdCase); myPaymentCase = myService.read(myFirstPaymentCase);
|
4.Ejecución de una actividad que define botones modelados
El caso está en la actividad “Evaluate Request”, que tiene dos botones modelados. La siguiente actividad que se ejecute depende del botón que se seleccione, en este ejemplo se elige “Approve”. Si no se indica ningún botón se sigue el flujo modelado como predeterminado.
Se asigna el botón “Approve” a la clase modelo “Request Payment” mediante el correspondiente método setter. Se ejecuta la actividad “Evaluate Request” con el método execute(myPaymentCase) de la clase servicio “RequestPaymentService”.
Como resultado, el caso se encuentra en la actividad “Fill Report” y su estado es “ACTIVE”,
myPaymentCase.setLastPressedButton("Approve"); myService.execute(myPaymentCase);
|
5.Ejecución de una actividad que no define botones modelados
El caso está en la actividad “Fill Report”. La ejecución de esta actividad crea el formulario “Report”. Este formulario tiene un campo llamado “request” que está relacionado a la entidad “Request”.
Se completa el campo “request” mediante el correspondiente método setter, con el identificador de la entidad “Request” relacionada al caso y que es obtenido mediante el método getRequestEntity().
Se completa el resto de los campos y se ejecuta la actividad “Fill Report” con el método execute(myPaymentCase) de la clase servicio “RequestPaymentService”.
El caso se envía al evento de fin “Request approved” y su estado es finalizado.
Integer requestId = myPaymentCase.getRequestEntity().getRequestId();
myPaymentCase.getReportEntity().setRequest(requestId.toString()); myPaymentCase.getReportEntity().setPaymentMethod("Credit"); myPaymentCase.getReportEntity().setSummary("Filling the report using the SDK."); myService.execute(myPaymentCase);
|
6.Cancelación de un caso
Se crea una instancia de la clase modelo “RequestPayment”, se le asigna el número de caso a cancelar.
Se ingresa el motivo de cancelación en el parámetro “observation” y se cancela el caso con el método cancelCase(myPaymentCase, observation) de la clase servicio “RequestPaymentService”.
RequestPaymentService myService = new RequestPaymentService(getApiClient()); RequestPayment myPaymentCase = new RequestPayment(); myPaymentCase.setCdCase("0000000091120000"); myService.cancelCase(myPaymentCase,"Duplicate case");
|
7.Asignación de la tarea en ejecución de un caso
Se crea una instancia de la clase modelo “RequestPayment” indicando el número de caso cuya tarea se asigna.
Se ingresa el código del usuario en el parámetro “reasignUser” y se asigna la tarea con el método reasignCase(myPaymentCase, reasignUser) de la clase servicio “RequestPaymentService”.
Cuando se asigna la tarea de un caso se utiliza el usuario on line que ejecuta la regla sdk. El mismo puede asignar sus propias tareas, las de su equipo y las de los participantes de un rol, si fuera coordinador de los mismos.
RequestPaymentService myService = new RequestPaymentService(getApiClient()); RequestPayment myPaymentCase = new RequestPayment(); myPaymentCase.setCdCase("0000000091120000"); myService.reasignCase(myPaymentCase,"JPEREZ");");
|
Diagrama del Proceso para el Ejemplo 8
8.Ejecución de una actividad específica
Las actividades "Evaluate request" (9) y "Evaluate manager request" (11) se envían para evaluar por dos autorizantes.
Se ejecuta la actividad "Evaluate manager request" (11). El usuario JPAZ es el autorizante y en este caso la rechaza.
Se crea una instancia de la clase modelo “RequestPayment2Authorizer”, se le asigna el número de caso a leer.
Se lee el caso con el método read(xMyCase) de la clase servicio “RequestPayment2AuthorizerService” y el número de caso.
Se recorre cada una de las actividades en ejecución con el método getLsCurrentActivities() y se instancia un objeto ExecutedActivity.
Si la actividad es "Evaluate manager request" (11), se asigna el botón “Reject” mediante el correspondiente método setter y se ejecuta la actividad con el método execute(xMyCase. xActivity, user) de la clase servicio “RequestPayment2AuthorizerService”.
RequestPayment2AuthorizerService xRequestPaymentService = new RequestPayment2AuthorizerService(getApiClient()); RequestPayment2Authorizer xMyCase = new RequestPayment2Authorizer();
xMyCase.setCdCase(idCase); xMyCase = xRequestPaymentService.read(xMyCase);
for (int i = 0 ; i < xMyCase.getLsCurrentActivities().size(); i++) { ExecutedActivity xActivity = xMyCase.getLsCurrentActivities().get(i);
if (xActivity.getCdActivity()== 11 [);i () xMyCase.setLastPressedButtom("Reject"); xRequestPaymentService.execute(xMyCase, xActivity, "JPAZ" ); } } } |
Búsqueda
Las búsquedas de casos de un proceso se pueden realizar mediante la interacción de los siguientes objetos.
Criteria: representa criterios para realizar búsquedas sobre los datos de los casos. Se compone de elementos que pueden ser propiedades y valores, conectados por operadores.
Identificador de Propiedades |
Descripción |
---|---|
Case.searchCdState |
Estado del caso |
Case.searchPriority |
Prioridad del caso |
Case.searchDsCase |
Descripción del caso |
Case.searchDtInitiated |
Fecha de inicio del caso |
Case.searchDtEnded |
Fecha de fin del caso |
Case.searchCdActivity |
Código de actividad |
Case.searchCdCase |
Número de caso |
Operador |
Descripción |
---|---|
eq |
Igual |
gt |
Mayor |
lt |
Menor |
betweene |
Entre y admite iguales |
like |
Contiene |
Valores posibles del estado del caso:
Identificador |
Descripción |
---|---|
Case.stateActive |
Activo |
Case.stateCancelled |
Cancelado |
Case.stateEnded |
Finalizado |
Valores posibles de la prioridad del caso:
Identificador |
Descripción |
---|---|
Case.priorityUrgent |
Urgente |
Case.priorityHigh |
Alta |
Case.priorityMedia |
Media |
Case.priorityLow |
Baja |
SearchCriteria: objeto que agrupa las condiciones de búsqueda (objeto Criteria), además permite parametrizar el orden del resultado, el tamaño de la página de lectura y la cantidad de páginas que se van a recuperar. La lectura por páginas se utiliza dado que el volumen de datos de un proceso puede ser muy grande.
Servicio del Proceso: clase servicio del proceso sobre el que se está haciendo la búsqueda de casos. Contiene la operación search(searchCriteria) que debe recibir como parámetro el objeto SearchCriteria y retorna el objeto SearchResult.
Ejemplo:
SearchResult searchResult = accionesService.search(searchCriteria);
SearchResult: objeto que contiene los resultados de la búsqueda. Contiene una lista de casos del proceso, por ejemplo “Acciones”. Este objeto permite conocer la cantidad total de páginas de lectura resultantes de la búsqueda, el tamaño de cada página y la cantidad de páginas a recuperar.
Ejemplos de Búsqueda
1. Búsqueda
En este ejemplo se recupera una lista de casos del proceso “Acciones” con estado activo, donde la propiedad estado corresponde al identificador “Case.searchCdState” y el valor activo al identificador “Case.stateActive”. También se define el número de páginas a recuperar.
AccionesService xaccionservice = new AccionesService(getApiClient()); SearchCriteria searchCriteria = new SearchCriteria(); |
2. Tipos de constructores para los criterios de búsquedas
En este ejemplo se crea un objeto Criteria y se definen diferentes condiciones de búsqueda utilizando los operadores "entre y admite iguales", "contiene" y "mayor".
// Entre y admite iguales. Las fechas tienen que tener formato año-mes-dia // SearchCriteria searchCriteria = new SearchCriteria(); // SimpleDateFormat format = // // searchCriteria.addCriteria(criteriaDate);
|
Deyel utiliza para los campos con tipo “fecha” el tipo de dato java.sql.Date, por lo que se debe hacer la transformación de java.util.Date a java.sql.Date, cuando se requiere crear un objeto con este tipo de dato.
3. Operaciones sobre el objeto de resultados
El objeto SearchResult es un objeto iterativo y como tal se puede recorrer de distintas formas.
En el ejemplo se utiliza una sentencia FOR para iterar sobre los casos que cumplen con las condiciones de búsqueda del ejemplo 1 (estado activo) , recuperando la fecha de inicio del caso y la prioridad.
AccionesService xaccionservice = new AccionesService(getApiClient()); SearchCriteria searchCriteria = new SearchCriteria(); // Casos con estado activo Criteria criteria1 = Criteria.eq(Case.searchCdState,"ACTIVE"); searchCriteria.addCriteria(criteria1); searchCriteria.setPageSize(10); searchCriteria.setPage(1);
SearchResult searchResult = xaccionservice.search(searchCriteria);
List<Case> instancesResult =searchResult.getResult(); // Recorro la lista de casos String log = ""; for (Case cases :instancesResult){ log = cases.getDtInitiated() +" - "+ cases.getPriority(); }
|