Acceder a entidades no relacionadas con el modelo de datos

<< 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 > Funciones de Bizagi >

Acceder a entidades no relacionadas con el modelo de datos

Introducción

Es muy común tener que acceder a tablas paramétricas o del sistema que no estén relacionadas con el modelo de datos. Para utilizar su información en expresiones XPath.

En esos casos, donde las entidades no se puedan acceder directamente a través de navegación XPath, se debe utilizar la función entity-list. La función retorna una colección de ítems. Tendrá que iterar sobre la colección para acceder a información específica (i.e Los valores de un ítem).

 

note_pin

Es muy importante entender que entity-list solamente debe ser utilizado para tomar y trabajar con información que no está relacionada con el caso y que no puede ser accedida directamente a través de la navegación XPath.

 

Aunque esta función se maneja con XPath, no se admite el uso de las funciones setXPath ni newCollectionItem.

 

Para asignar valores a los atributos de entidades no relacionadas al modelo de datos use un atributo temporal. Para más información Obtener y usar valores de entidad

 

 

Para utilizar la función entity-list tenga en cuenta la siguiente sintaxis.

 

Me.getXPath("entity-list('Entity','FilterExpression')",FilterParameters);

 

La función tiene dos parámetros obligatorios:

El parámetro Entity es el nombre de la entidad a la cual se va a acceder.

El parámetro FilterExpression es utilizado bajo su criterio y puede estar vacío. Este parámetro filtra la entidad de acuerdo a ciertas condiciones.

Usted puede configurar Xpaths dentro de sus filtros, i.e., "entity-list('Customer', 'city.country.code = @Code')".

 

Los siguientes son operadores que se pueden utilizar durante la búsqueda,

 

OPERADOR

NOMBRE

EJEMPLO

=

Igual a

'Client = @Client'

<>

Diferente

'ClientName <> @ClientName'

>    >=

Mayor que/ Mayor o igual que

'Balance >= @Balance'

<    <=

Menor que/ Menor o igual que

'Balance <= @Balance'

AND

Y

'Minimum <= @BorrowingCapacity> and Maximum >= @BorrowingCapacity'

OR

O

'Minimum <= @BorrowingCapacity> and Maximum >= 1000'

BETWEEN

Entre

'Balance BETWEEN @lowest AND @higher'

IN ()

En

"Balance in (@param1, @param2, @param3)"

IS NULL

Igual a nulo

"CityName IS NULL"

IS NOT NULL

Diferente de nulo

"CityName IS NOT NULL"

 

El parámetro FilterParameters parameter se utiliza para establecer los valores de los parámetros configurados en la expresión del filtro. Este parámetro es un objeto FilterParameters, en el que se definen los parámetros que se utilizarán en el filtro. Si el filtro no tiene parámetros de filtro, no utilice este parámetro.

 

El siguiente ejemplo muestra cómo definir un objeto FilterParameters:

 

var parameters = new FilterParameters();
parameters.AddParameter("@Code", 1);
parameters.AddParameter("@Name", "John");

parameters.AddParameter("@Client", <Request.Client>);
parameters.AddParameter("@IsActive", false);

 

Puede agregar tantos parámetros como necesite.

 

¿Cómo acceder a la información de la entidad?

La función entity-list se encuentra en la categoría Navegación de Datos.

 

EntityManager1

 

Recordemos que la entidad es retornada como una colección de ítems. La colección de la entidad debe ser guardada dentro de una variable para poder recorrerla.

Para identificar cuantos elementos tiene la colección se debe utilizar el comando size().

 

Recorra la colección utilizando un ciclo for de la siguiente manera:

 

 //Defina los parámetros del filtro

 var parameters = new FilterParameters();

 parameters.AddParameter("@param1", value1);

 parameters.AddParameter("@param1", value1);

 .

 .

 .

 parameters.AddParameter("@paramN", valueN);

 //Obtenga el identificador del registro

 var Entity = Me.getXPath("entity-list('Entity','Filter')", parameters);

 for(var Counter=0; Counter< Entity.size(); Counter++)

 {

         //Obtenga el valor del atributo del registro

         var Surrogate= Entity[Counter].getXPath("Id");

         var Value= Entity[Counter].getXPath("AttributeOfTheEntity");

 }

 

Ejemplo sin filtros

El proceso de Ingreso de Personal requiere que el solicitante se realice algunos exámenes médicos antes de firmar el contrato.

Los exámenes son guardados en una entidad paramétrica y posteriormente cargados a una colección cuando lo requiera el proceso.

 

El siguiente es el Modelo de Datos del proceso de Ingreso de Personal.

 

EntityManager3

 

La siguiente imagen muestra la lista de exámenes médicos que deben ser cargados dentro de la colección.

 

EntityManager2

 

1.  En el paso cuatro del Asistente, agregue una expresión al entrar de la tarea donde se cargan los exámenes.

 

2. Escriba el código de la regla de negocio para incluir los exámenes dentro de la colección.

Seleccione la función Get entity with entity-list de la categoría Navegación de Datos para acceder a las entidades paramétricas.

 

EntityManager4

 

//Evalúe si la colección tiene elementos

if(<count(Request.Applicant.ApplicantTests)> == 0)

{

 //Use la función entity-list para obtener todos los exámenes que han sido agregados a la colección        

 RequiredTest = Me.getXPath("entity-list('MedicalTest','')");

 //Itere la variable en la que se almacenen los exámenes

 for(var Counter=0; Counter < RequiredTest.size(); Counter++)

 {

         //Agregue cada examen a la colección

         NewTest = Me.newCollectionItem("Request.Applicant.ApplicantMedicalTests");

         NewTest.setXPath("MedicalTest",RequiredTest[Counter].getXPath("Id"));

 }

}

 

Ejemplo con filtro sencillo

Vamos a continuar utilizando el Proceso de Ingreso de Personal, donde un nuevo empleado debe practicarse algunos exámenes médicos antes de firmar el contrato.

Los exámenes son guardados en una entidad paramétrica y posteriormente cargados a una colección cuando lo requiera el proceso. Solamente los exámenes obligatorios deben ser incluidos dentro de la colección y el atributo Requerido debe ser marcado como verdadero.

 

El siguiente es el Modelo de Datos del proceso de Ingreso de Personal.

 

EntityManager3

 

La siguiente imagen muestra la lista de exámenes médicos que deben ser cargados dentro de la colección, aquellos marcados como requeridos.

 

EntityManager2

 

1.  En el paso cuatro del Asistente cree una acción al Entrar de la actividad donde se cargan los exámenes.

 

2. Escriba el código de la regla de negocio para incluir los exámenes dentro de la colección.

Seleccione la función Get entity with entity-list de la categoría Navegación de Datos para acceder a las entidades paramétricas.

 

EntityManager5

 

//Evalúe si la colección tiene elementos

if(<count(Request.Applicant.ApplicantTests)> == 0)

{

//Defina los parámetros del filtro

 var parameters = new FilterParameters();

 parameters.AddParameter("@Required", true);

//Use la función entity-list para obtener todos los exámenes que serán agregados a la colección. Filtre los registros por el estado requerido

 RequiredTest = Me.getXPath("entity-list('MedicalTest','Required = @Required')",parameters);

//Itere la variable en la cual se almacenan los Exámenes.

 for(var Counter=0; Counter < RequiredTest.size(); Counter++)

 {

//Agregue cada examen a la colección.

         NewTest = Me.newCollectionItem("Request.Applicant.ApplicantMedicalTests");

         NewTest.setXPath("MedicalTest",RequiredTest[Counter].getXPath("Id"));

         NewTest.setXPath("Delivered",RequiredTest[Counter].getXPath("Required"));

 }

}

 

Ejemplo con un filtro complejo

Un banco solicita ciertos documentos durante el estudio de un crédito, de acuerdo a los ingresos del solicitante y su trabajo.

Los documentos que aplican para cada caso se guardan en una entidad llamada Documentos para el solicitantes. En cada caso, una regla debe analizar las propiedades del solicitante e incluir dentro de la colección los documentos que apliquen.

La entidad Documentos por solicitante no hace parte del modelo de datos del proceso. Por lo que es necesario utilizar la función entity-list para acceder a la información de la tabla y agregas los registros dentro de una entidad del Modelo de Datos.

 

A continuación se encuentra el Modelo de Datos para el caso.

 

EntityManager10

 

La siguiente es la entidad paramétrica que contiene la información a ser cargada.

 

EntityManager7

 

EntityManager8

 

EntityManager9

 

1.  En el paso cuatro del Asistente, cree una acción al Entrar de la actividad donde se cargan los documentos.

 

2. Escriba el código de la regla de negocio para incluir los documentos dentro de la colección.  

Seleccione la función Get entity with entity-list de la categoría Navegación de Datos para acceder a las entidades paramétricas.

 

EntityManager6

 

//Cree un filtro para identificar el rol y la fuente de ingresos del solicitante

var parameters = new FilterParameters();

parameters.AddParameter("@ApplicantRole", <Applicant.ApplicantRole.id>);

parameters.AddParameter("@IncomeSource", <Applicant.IncomeSource.id>);

//Use la función entity-list para obtener los documentos que serán agregados a la colección. Filtre por el estado requerido.

DocsXApplicant = Me.getXPath("entity-list('DocumentXApplicant','ApplicantRole = @ApplicantRole and IncomeSource = @IncomeSource')",parameters);

 

//Itere la variable en la que se almacenan los documentos

for(Count =0; Count < DocsXApplicant.size(); Count++)

{

 //Agregue cada documento a la colección

 IdDocument = DocsXApplicant[Count].getXPath("Document");

 ApplicantDocument = Me.newCollectionItem("Applicant.Documents");

 ApplicantDocument.setXPath("Document",IdDocument);

 ApplicantDocument.setXPath("Required",DocsXApplicant[Count].getXPath("Required"));

}

 

Ejemplo utilizando fechas en filtros

Una compañía dedicada a la producción de electrodomésticos utiliza Bizagi para gestionar las garantías de sus productos. Cuando un cliente reporta un problema con un electrodoméstico, un técnico evalúa y determina qué componente está causando la falla. Una vez identificado el componente defectuoso, la compañía procede a solicitar garantía al proveedor de dicho componente. Debido a que los proveedores cambian constantemente, se mantienen registros con el fin de identificar el período durante el cual, un determinado proveedor suministró un determinado componente. De esta manera, basados en la fecha de producción del electrodoméstico, la compañía mantiene una trazabilidad y puede identificar fácilmente a qué proveedor se debe solicitar la garantía.

 

A continuación se presenta el modelo de datos de este caso.

 

EntityManager11

Los registros históricos de los proveedores se almacenan en la entidad SuppliersTrace. Esta contiene el proveedor, el componente suministrado y el periodo de tiempo durante el cual ese proveedor suministró ese componente (a través de una fecha de inicio y fecha de fin del suministro).

 

Para obtener el proveedor que suministró un componente específico en una fecha específica, utilizaremos el método entity-list utilizando como parámetros la entidad SuppliersTrace y un filtro que identifica el componente y la fecha en la que este fue suministrado.

 

1.  En el paso cuatro del Asistente, cree una acción al Entrar de la actividad donde se identifica el proveedor.

 

2. Escriba el código de la regla de negocio para obtener el proveedor al que se debe solicitar garantía del componente.

Seleccione la función Get entity with entity-list de la categoría Navegación de Datos para acceder a las entidades paramétricas.

Observe cómo se define el filtro utilizando fechas.

 

EntityManager12

 

//Obtenga el componente y fecha de producción del electrodoméstico y construya el filtro

var parameters = new FilterParameters();

parameters.AddParameter("@Component", <WarrantyRequest.Defectivecomponent>);

parameters.AddParameter("@ProductionDate", <WarrantyRequest.ProductionDate>);

//Utilice la función entity-list para obtener todos los proveedores que cumplen con el filtro. Esperamos solo un registro ya que solo un proveedor provee un componente en un periodo determinado.

var Suppliers = Me.getXPath("entity-list('SuppliersTraces','Component = @Component and SupplierFrom <= @ProductionDate and SupplierTo > @ProductionDate')",parameters);

//Obtenga el registro del proveedor de la lista y guardelo en el atributo del proceso que identifica el proveedor al cual se solicita garantía

<WarrantyRequest.SupplierToClaim>=Suppliers[0].getXPath("Supplier");

 

Ordenando la información de la entidad

La información de la entidad es ordenada por el id de la entidad, es decir, en el mismo orden en que se crearon los registros.

Para personalizar el orden en que se desplegará la información, use la función de ordenación.

 

La función de ordenación tiene la siguiente sintaxis:

 

Me.getXPath ("sort (entity-list ('Entity', 'Filter'), 'AttributeOfTheEntity')");

 

El primer parámetro de la función es la lista desplegada por la lista de entidades (entity-list) explicada anteriormente. El segundo parámetro, indica el atributo por el cual, la colección se ordenará en orden ascendente. Finalmente, el último parámetro se usa para establecer los valores de los parámetros configurados en la expresión del filtro.

Esta función sigue el mismo comportamiento que la función de ordenamiento (sort) de funciones para colecciones.


Last Updated 1/25/2023 11:48:30 AM