Adicionar registros a tablas dentro de tablas

<< Clic para mostrar Tabla de Contenidos >>

Navegación:  Bizagi Studio > Asistente de Procesos > Reglas de Negocio > Ejemplos de reglas de negocio > Adicionar y remover registros de Mis Cosas >

Adicionar registros a tablas dentro de tablas

Imagine un proceso de solicitud de compra donde, de forma predeterminada, un producto se añade a la solicitud cuando se inicia un caso y algunos proveedores se añaden al producto.

Por lo tanto, se crea un registro en la tabla de Productos y luego se agrega un registro a una colección interna, de Proveedores, dentro de dicho producto.

 

Hay una relación uno-a-muchos entre la Entidad de Proceso PurchaseRequest y la colección ProductsRequested.

Hay una relación uno-a-muchos entre la Entidad ProductsRequested y la entidad de colección PossibleSuppliers.

La entidad de Proceso se se llama PurchaseRequest.

La entidad colección se llama ProductsRequested.

La segunda colección se llama PossibleSuppliers

 

addrelation9

 

Se crea una expresión al Entrar en el proceso Solicitud de Compra para adicionar productos y proveedores.

 

La siguiente es la lista de variables creadas en la expresión.

 

addrelation10

 

Lo primero que se debe hacer es agregar los Productos, es decir, la tabla externa:

 

addrelation11

 

ProdType = CHelper.getEntityAttrib("Producttype","idProducttype","Code = '1'")

Product = Me.newCollectionItem("PurchaseRequest.ProductsRequested")

Product.setXPath("Producttype",ProdType);

Product.setXPath("Quantity",10);

 

Una vez adicionados los producto, se realiza un Iterate Over Xpath para recorrer la colección de productos y adicionar proveedores dentro de dicha colección.

 

addrelation12

 

Finalmente se adicionan los registros de la tabla paramétrica Proveedor a cada registro de la colección de Productos.

La sentencia Me.newCollectionItem cambia, para que Me tome el valor de la variable que recorre los productos en el Iterate.

 

addrelation13

 

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

for(var i=0;i<Supplier.size();i++)

{

 NewSupplier= NewProducts.newCollectionItem("Possiblesuppliers");

 NewSupplier.setXPath("Offeredunitprice",10);

 NewSupplier.setXPath("Supplier",Supplier[i].getXPath("Id"));

}

 

Opción 2

Otra manera de agregar registros a una tabla que se encuentra dentro de otra tabla, es utilizando un newCollectionItem sobre una variable que contiene otro newCollectionItem. De esta manera no es necesario utilizar una iteración sobre XPath.

 

Se crea una expresión a la Entrada del proceso Solicitud de Compra para adicionar productos y proveedores.

La siguiente es la lista de variables creadas en la expresión.

 

addrelation14

 

Lo primero que se debe hacer es agregar el producto, es decir, el registro de la tabla principal. Para esto utilice el método Me.newCollectionItem.

 

addrelation15

 

Ahora, desde la entidad paramétrica Supplier, obtenga la lista de proveedores que se agregarán a la tabla interna.

 

addrelation16

 

Recorra la lista de proveedores y cree un registro en la tabla Possible suppliers por cada proveedor de la lista.

Observe que la primera variable de Me.newCollectionItem cambia por la variable relacionada a la tabla principal. (Product.newCollectionItem)

 

addrelation17

 

//Obtenga el producto desde la entidad paramétrica

ProdType = CHelper.getEntityAttrib("Producttype","idProducttype","Code = '1'");

//Agregue el producto a la tabla principal

Product = Me.newCollectionItem("PurchaseRequest.ProductsRequested");

Product.setXPath("Producttype",ProdType);

Product.setXPath("Quantity",10);

 

//Obtenga la lista de proveedores desde la entidad paramétrica

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

 

//Por cada proveedor

for(var i=0;i<Supplier.size();i++)

{

//Agregue un registro a la tabla interna

NewSupplier= Product.newCollectionItem("Possiblesuppliers");

NewSupplier.setXPath("Supplier",Supplier[i].getXPath("Id"));

}

 

note_pin

Para tener un mejor desempeño, cuando se manipulen datos dentro de un ciclo, extraiga en una variable la entidad de proceso y después, utilice la variable dentro del ciclo.

 

Ejemplo:

 

var max = 1500;
var PEntity = Me.getXPath("ProcessEntity");
for (var x = 0; x < max; x++)
{
      var Newrecord = PEntity.newCollectionItem("RelationshipToTheCollection");
      Newrecord.setXPath("Column","Value");
}