Como usar Iteracion
De
<keywords content="keywords">iterar sobre fact, encontrar valor relacion, encontrar informacion, contar entradas, modificar informacion, actualizar informacion, adicionar valores, eliminar entradas, adicionar entradas</keywords>
Usar Iteración sobre una relación
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.
Ejemplo
Utilizando la imagen de arriba, imagínese un proceso de solicitud de compra, en donde algunas cotizaciones deben ser solicitadas y luego comprar la mejor oferta.
El proceso tiene una entidad de paramétrica con los proveedores de la empresa y una entidad paramétrica con todos los productos que se pueden comprar. Cada proveedor ofrece muchos productos, por lo tanto, existe una relación uno a muchos entre los proveedores y productos.
Algunos productos tienen descuentos. En el proceso, cuando un usuario está en la actividad Cotización, es necesario que él / ella vea los proveedores que están dando los descuentos. Para mostrar a los proveedores de los productos con descuentos, es necesario tener una expresión en donde se recorren todos los productos y se identifican aquellos con descuento para luego mostrarlos en el portal de trabajo.
1. En el paso número 4 del Asistente de Procesos, se crea la expresión al Entrar.
Esta expresión itera sobre los productos y luego se adiciona los Proveedores sugeridos para ser mostrados en el Portal de Trabajo.
2. Construya la expresión
Lo primero que se debe hacer es declarar todas las variables que vayan a ser usadas en la expresión.
La variable Productos será usada para Iterar sobre la relación.
Con el fin de Iterar sobre los productos, vamos a necesitar la LLAVE. Esta llave es el identificador de cada proveedor en la entidad de los productos. Entonces, tenemos que conseguir primero el Proveedor y tener todas sus llaves, para entrar a la Iterar sobre la relación con cada una.
Ya que los proveedores no está relacionada aa modelo de datos, tiene que ser utilizado con CEntityManager.
Suppliers = CEntityManager.GetEntity("Supplier").GetEntityList("","","","");
Entonces, para cada Proveedor, vamos a conseguir el SurrogateKeyVale, que es la llave que usaremos. Usando la variable declarada antes, obtendremos la LLAVE:
SurrogateKey = Suppliers[Count].SurrogateKeyValue;
Teniendo la LLAVE podemos hacer la Iteración sobre la relación
Luego, podemos recorrer cada uno de los productos del Proveedor de la LLAVE seleccionada. Para acceder al descuento del producto usaremos:
Products.Attributes["Discount"].Value
Si el producto accedido tiene descuento, entonces lo añadiremos en un arreglo (Array). El arreglo debe ser declarado antes, en este caso será SupplierArray as new ArrayList ()
Finalmente, teniendo todos los proveedores que tienen descuento en el arreglo, usando una expresión FOR adicionamos uno a uno los proveedores a la colección Quotation.SuggestedSuppliers usando la función Me.addRelation.
De esta forma se verán los Proveedores sugeridos en el Portal de Trabajo
Cómo Encontrar Información en una Relación
Para encontrar entradas en una relación que satisface una condición, se puede usar un "if" dentro de la Iteración sobre el Fact o Relación, que contiene una o más expresiones tales como:
VariableToIterate.Attributes[“Atributo”].Value Operador Valor
En este caso: Products.Attributes["Approved"].Value == true
Valor (Value): Valor usado para comparar el atributo desde la grilla. Puede ser el valor de un atributo, una variable o una constante. El tipo de valor debe ser tomado en consideración.
Operador (Operator): Lo siguiente puede usarse como operadores:
Operador |
Nombre |
Ejemplo |
== |
Igual a Comparativo |
vble.Attributes[“Balance”].Value == 600 |
<> |
Diferente a |
vble.Attributes[“idClient”].Value <> <idClient> |
> |
Mayor que |
vble.Attributes[“Balance”].Value > 600 |
< |
Menor que |
vble.Attributes[“Balance”].Value < 600 |
>= |
Mayor o igual que |
vble.Attributes[“Balance”].Value >= 600 |
<= |
Menor o igual que |
vble.Attributes[“balance”].Value <= 60 |
Cómo Contar las Entradas de una Relación
Para contar las entradas de una relación, se puede: Crear una expresión en la Iteración (Iterate Over Fact)
La expresión puede ser creada usando una variable que hará la cuenta como se muestra a continuación:
Count = Count +'1';
No olvide declarar la variable Count al principio de la regla.
Para contar las entradas de una relación que satisface una condición
Se puede también usar una expresión sin usar la Iteración sobre Fact (Relación) que contiene la siguiente función:
Count=CEntityManager.GetEntity("EntityName",<idEntityName>).Facts["FactName"].ChildEntities.Count
EntityName: Nombre de la entidad que contiene la relación (Entity One).
idEntityName: Introduzca la llave foránea que identifica cada una de las entradas de la entidad N con la entidad relacionada.
FactName: Nombre de la relación.
Cómo Modificar Información en una Relación
Para modificar las entradas de una Relación, se puede usar una Expresión que contenga lo siguiente en la Iteración sobre Fact.
vble.Attributes[“Attribute1”].Value = value1;
vble.Attributes[“Attribute2”].Value = value2;
vble.Attributes[“AttributeN”].Value = valueN;
vble.Update();
vble: El nombre de la variable usada para el ciclo de Iterar sobre Fact.
Attribute1…n: Nombre de cada uno de los atributos que serán modificados en la entidad N.
Value1…n: Valor que tomará la entrada. Puede ser el valor de un atributo, una variable o una constante. El tipo de valor debe tomarse en consideración.
Se puede usar también:
setAttrib("EntityName", vble.SurrogateKeyValue, “Attribute1”, value1);
setAttrib("EntityName", vble.SurrogateKeyValue, “Attribute2”, value2);
setAttrib("EntityName", vble.SurrogateKeyValue, “AttributeN”, valueN);
EntityName: Is el nombre de la entidad N.
Para modificar las entradas de una relación que satisface una condición:
Adicionar el Valor de un Atributo (Columna) de una Relación por Filas
Para sumar todas las entradas existentes de la relación, use una Expresión en la Iteración sobre Fact.
sum= sum + vble.Attributes["Attribute"].Value;
No olvide declarar la variable al principio de la regla.
Sume las entradas que satisfacen una condición.
Se puede almacenar el valor de la suma en un atributo adicionando una expresión al final del ciclo:
<AttribName> = Sum;
vble: El nombre de la variable usada para el ciclo de Iteración sobre Fact.
Attribute: Nombre del atributo de la entidad N que contiene el valor que será sumado.
AttribName: Atributo donde se quisiera grabar el valor total de la suma.
Eliminar Entradas de una Relación
Para eliminar las entradas que satisfacen una condición, use una expresión en la Iteración sobre Fact.
vble.Delete();
vble: El nombre de la variable usada para el ciclo de Iteración sobre Fact.
Adicionar Entradas a una Relación
No se puede usar el módulo de Iteración sobre Fact cuando una relación no tiene entradas. Por lo tanta, para adicionar entradas a la relación, se puede usar las siguientes expresiones.
Adicionar una entrada en blanco a una Relación.
Declarar la variable oEntEntityName
oEntEntityName = CEntityManager.GetEntity("EntityName");
oEntEntityName.Attributes["idEntityKey"].Value = <idOtherEntityKeyRelatedPV>;
oEntEntityName.Add();
Adicionar una entrada en una entidad con valores en los atributos:
Declare la variable oEntEntityName
oEntEntityName = CEntityManager.GetEntity("EntityName");
oEntEntityName.Attributes["idEntityKey"].Value = <idOtherEntityKeyRelatedPV>;
oEntEntityName.Attributes["Attribute1"].Value = value1;
oEntEntityName.Attributes["Attribute2"].Value = value2;
oEntEntityName.Attributes["AttributeN"].Value = valueN;
oEntEntityName.Add();
Si se quiere grabar la id de la entrada que ha creado, reemplace la última línea con:
Para grabarla en una variable:
id = oEntEntityName.Add(); donde id es una variable que debe ser declarada
<AttributePath> = oEntEntityName.Add();
EntityName: Nombre de la entidad N a la que se quiere adicionar las entradas.
idEntityKey: Llave Primaria de la entidad N donde se quiere grabar las entradas.
idOtherEntityKeyRelatedPV: Introduzca el camino del atributo que contiene el valor de la llave foránea que identifica cada una de las entradas de la entidad n con la entidad relacionada.
Attribute1…n: Nombre de cada uno de los atributos que serán modificados en la entidad N.
Value1…n: Valor que tomará la entrada. Puede ser el valor de un atributo, una variable o una constante. El tipo de valor debe ser tenido en consideración.
Nota: Es muy importante mencionar que el EntityManager debería ser utilizado únicamente para obtener y trabajar con Entidades que no se encuentran relacionadas con el caso y que No se pueden acceder directamente navegando por el modelo de datos con XPath. Esto se debe a que el EntityManager no obtiene la información desde el Scope que maneja Bizagi, sino directamente desde la base de datos. De esta forma, la información que aún no ha sido persistida en la base de datos no podrá ser encontrada por el EntityManager. |
Información Relacionada
<comments />