Toda la información de producto en wiki.bizagi.com aplica para Bizagi BPM Suite 9.1.X.
Para las nuevas versiones de Bizagi BPM Suite (10.X y superior) visite la Guía de Usuario.
 

Iterar sobre Fact o XPath

De

<keywords content="keywords"> iterar, iterar sobre, iterarsobre, iterarsobrefact, iterarsobreXpath, relaciones, contar registros, modificar registros, xpath </keywords> 

Contenido

Iteración sobre un Xpath

Este módulo permite realizar iteraciones (o ciclos) sobre una expresión XPath que tiene una colección, es decir, una relación uno-a-muchos. Por ejemplo, en una solicitud de compra se tienen muchos productos. Entonces la entidad Solicitud tiene una colección de productos. Podemos iterar sobre el Xpath para ir a cada producto de la solicitud.

Este módulo no sólo le permite acceder a cada una de los registros en la relación para evaluarlos, sino que también le permite realizar operaciones tales como modificar registros de la relación, o realizar cálculos y validaciones.

Cuando se añade a una expresión una Iteración sobre un XPath se debe incluir:

Image:Business_Rules8_Image021.jpg



Image:Bulletrojo.gif Editar Descripción (Edit Description): Permite al usuario modificar el nombre que ha sido asignado a la gráfica.

Image:Bulletrojo.gif Propiedades (Properties): Permite al usuario configurar el ciclo.

Image:Bulletrojo.gif Remover (Remove): Esta opción permite al usuario eliminar el módulo entero.


Cómo adicionar una Iteración sobre un XPath

1. Cree una variable para usar en la iteración, en el botón verde al comienzo de la regla. De clic derecho e incluya una variable de tipo objeto.

2. Haga clic derecho sobre la línea vertical de la regla y seleccione la opción Adicionar Iteración sobre un XPath (Add Iterate Over XPath); aparecerá la ventana Iteración sobre un XPath en la cual se le dará nombre al módulo.




3. Haga clic derecho sobre el módulo de Iteración y seleccione la opción Propiedades (Properties) para abrir la ventana y configurar las características.

4. Los siguientes parámetros están incluidos en la ventana Iteración sobre un XPath:



Variable (Variable): En este campo, seleccione la variable creada en el paso 1 en donde se instanciarán cada uno de los registros de la colección XPath.

Xpath: Ingrese la expresión Xpath que desea recorrer.


4. Haga clic en OK, Aceptar o Aplicar según sea necesario.


Nota: Este módulo sólo deberá ser usado para procesos creados con Bizagi V.9.0 o superior.


Cómo Obtener el Valor de un Atributo

Image:Bulletazul.gif Para obtener el valor de un atributo, se puede usar:

Variable .getXPath(“Atributo”)

Variable : El nombre de la variable usado para la iteración sobre XPath.

Atributo: Nombre del atributo de la entidad de colección.


Cómo Modificar Entradas en una Relación

Image:Bulletazul.gif Para modificar entradas en una Relación, se puede usar una Expresión que contenga los valores siguientes en la iteración sobre la relación.

Variable .setXPath(“Atributo”, Valor)

Variable : El nombre de la variable usada para la Iteración sobre el XPath

Atributo: Nombre del atributo en la entidad de colección.

Valor: Valor que toma el atributo, que puede ser el valor de otro atributo, una variable o una constante. El tipo de valor debe ser tomado en cuenta.

Ejemplo de Modificación de Entradas

Descripción: En el subproceso de desembolso de una Solicitud de Préstamo, todos los préstamos aprobados de la misma Solicitud que requieren desembolso son desembolsados en bloque. Cada uno de los préstamos tiene un valor aprobado y un valor de costo que debe deducirse al momento del desembolso. Debe crearse una regla para calcular el valor que será desembolsado para cada préstamo.


Este es el modelo de datos del proceso:


Image:Business_Rules8_Image023.jpg


De esta forma debe crearse la expresión, incluyendo las variables que se declaran al comienzo. El módulo de Iteración sobre un XPath irá recorriendo cada uno de los préstamos que fueron aprobados en el caso donde la expresión sea ejecutada.



La ventana Iteración sobre XPath (Iterate Over XPath) descrita anteriormente contendrá las siguientes propiedades.

- La Variables: Productos, declarada en el botón verde al principio de la regla

- El XPath base: Incluida por defecto

- XPath: la colección. En este caso todos los productos de la solicitud filtrados por aquellos que requieren desembolso. Request.Products[RequiresDisbursement=true]



Esta expresión (Calculate Disbursement Value o Calcular Valor de Desembolso) calculará los valores para cada préstamo como se muestra a continuación:

Cada producto se accede usando la Variable, en este caso la Variable Products. Usando getXPath("Attribute") or setXPath("Attribute",Value) el usuario puede manipular cada registro. La primera expresión resta el Valor aprobado del de gastos.

La segunda expresión tomará esta resta y la guardará en el atributo ValueDisbursement de ese producto.


Así se ven los resultados en la aplicación Web.



Ejemplo con una validación


Descripción: En un caso de solicitud de préstamo, se muestra un mensaje en la interfaz del usuario cuando el valor aprobado es mayor al solicitado.


1. Declare una variable para ser usada en la iteración (en este caso Products). Además declare ValueApproved y ValueRequested para guarder allí alguna información y hacer cálculos.

2. Adicione el módulo Iterar sobre como se muestra a continuación.


3. Haga clic derecho sobre la caja de la iteración. Seleccione la variable declarada e incluya el XPath. En este caso serán todos los productos de la solicitud.



4. Cree la expresión para retornar un mensaje de error.




Iterar sobre un XPath utilizando una expresión

En algunos casos usted necesita manejar colecciones con expresiones sin utilizar la funcionalidad de Iteración sobre XPath para permitir una mayor manipulación sobre el código. Esto es posible con la utilización de la función GetValueAsCollection de la clase CHelper.

Cuando usted obtiene un objeto de una colección a través de la función getXPath, usted obbtendrá una lista de valores almacenados como una cadena de texto. Usted no podrá navegar a través de ellos ni manipularlos hasta que no sean convertidos a un arreglo (lista). Para hacerlo, utilice la función GetValueAsCollection de la siguiente manera:

//Obtener XPath
var List=<Process.Collection>
//Obtener la lista utilizando CHelper
Array=CHelper.GetValueAsCollection(List)
//Iterar
for (var I=0; I < Array.size(); I++) 
{
//Manipular la información (Get, Set)
var TempVariable= Array.get(I); 			
var DesiredValue=TempVariable.getXPath("Object") 
}


La anterior expresión obtiene los valores de una colección en una variable, luego dicha variable se convierte a un arreglo utilizando la función GetValueAsCollection. Una vez hecho esto, usted puede navegar a través de los valores de la colección utilizando una función FOR.

Tomemos como ejemplo un Proceso de Compras. Suponga que usted tiene una colección llamada PRODUCT, donde se almacena la información de los productos que se desean comprar. Usted desea obtener el Precio Total de la compra sin utilizar la funcionalidad de Iterar sobre Xpath. La información que posee es la siguiente:


La expresión que necesita es:

//Obtener XPath
var List=<Purchase.Product>
//Obtener lista usando CHelper
var Array=CHelper.GetValueAsCollection(List)
//Iterar
for (var I=0; I < Array.size(); I++) 
{
//Manipular la información (Get, Set)
var TempVariable= Array.get(I); 			
var Price=TempVariable.getXPath("Price") 
var Total=Total+Price
}
<Purchase.TotalPrice>=Total

Y usted obtendrá:



Iteración sobre una Relación (Fact)

Este módulo puede usarse para realizar iteraciones sobre una relación uno-a-muchos EXCLUSIVAMENTE cuando la relación no se puede acceder directamente a través del modelo de datos, con el XPath.


Este módulo permite acceder a cada uno de los registros de una relación (también conocido como un fact) para evaluarlos. También permite realizar operaciones tales como modificar la información de los registros, buscar información, contar registros, etc.

El ejemplo más común para esto es cuando se necesita acceder a una relación uno a muchos entre dos tablas paramétricas. Por ejemplo, la entidad Proveedor tiene una colección de productos que éste provee. Entonces, si el usuario quisiera iterar sobre los productos de los proveedores, ambas siendo entidades paramétricas sin relación directa al caso, el usuario debe usar Iteración sobre una relación.


Image:Business_Rules8_Image002.jpg


Image:Bulletrojo.gif Editar Descripción (Edit Description): Permite al usuario cambiar el nombre dado al diagrama.

Image:Bulletrojo.gif Propiedades (Properties): Permite al usuario establecer el ciclo de iteración.

Image:Bulletrojo.gif Remover (Remove): Esta opción permite al usuario eliminar el módulo entero.


Adicionar una Iteración sobre una relación

1. Cree una variable de tipo objeto para usar en la iteración, en el botón verde. De click derecho sobre éste e incluya la variable

2. Haga clic derecho en la línea vertical de la regla y seleccione la opción Adicionar Iteración Sobre una Relación (Add Iterate Over Fact); la ventana Iteración sobre una Descripción (Iteration Over Fact-Description) aparecerá para darle nombre al módulo




3. Haga clic derecho sobre el módulo de Iteración y seleccione la opción Propiedades (Properties) para establecer sus características. La ventana Iterar Sobre una Relación (Iteration Over Fact) aparecerá luego.



4.La ventana Iterar sobre una relación (Iteration Over Fact) incluye los siguientes parámetros:


Image:Business_Rules8_Image003.jpg


Variable para iterar (Variable for iterate): En este campo, seleccione la variable incluida en el paso 1. Cada registro de la entidad muchos será accedida.

Entidad (Entity): En este campo, seleccione la Entidad que contiene la relación (Entity 1).

Relación (Fact): En este combo, escoja la relación sobre la que quiere hacer la iteración o el ciclo. Todas las relaciones que pertenecen a la entidad seleccionada en el campo anterior están disponibles.

Llave (Key): Esta es la llave foránea de la entidad 1 de la relación. Siempre será un entero, puede ser <Attributo.id> o una variable conteniendo el id.


5. Haga clic en Ok, Aceptar o Aplicar según sea necesario.


Nota: A partir de Bizagi V.9.0, este módulo debe ser usado sólo para ir a través de relaciones que no puedan ser accedidas directamente con las expresiones XPath.