<< Clic para mostrar Tabla de Contenidos >> 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).
•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.
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.
La siguiente imagen muestra la lista de exámenes médicos que deben ser cargados dentro de la colección.
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.
//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.
La siguiente imagen muestra la lista de exámenes médicos que deben ser cargados dentro de la colección, aquellos marcados como requeridos.
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.
//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.
La siguiente es la entidad paramétrica que contiene la información a ser cargada.
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.
//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.
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.
//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