<< Clic para mostrar Tabla de Contenidos >> 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
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.
Lo primero que se debe hacer es agregar los Productos, es decir, la tabla externa:
var parameters = new FilterParameters();
parameters.AddParameter("@Code", "1");
ProdType = CHelper.getEntityAttrib("Producttype","idProducttype","Code = @Code", parameters);
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.
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.
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"));
}
Note que también puede obtener el id con el nombre de la llave primaria.
for(var i=0;i<Supplier.size();i++)
{
NewSupplier= NewProducts.newCollectionItem("Possiblesuppliers");
NewSupplier.setXPath("Offeredunitprice",10);
NewSupplier.setXPath("Supplier",Supplier[i].getXPath("idSupplier"));
}
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.
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.
Ahora, desde la entidad paramétrica Supplier, obtenga la lista de proveedores que se agregarán a la tabla interna.
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)
//Obtenga el producto desde la entidad paramétrica
var parameters = new FilterParameters();
parameters.AddParameter("@Code", "1");
ProdType = CHelper.getEntityAttrib("Producttype","idProducttype","Code = @Code", parameters);
//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"));
}
Recuerde que aquí también puede utilizar la llave primaria para obtener el id.
NewSupplier= Product.newCollectionItem("Possiblesuppliers");
NewSupplier.setXPath("Supplier",Supplier[i].getXPath("idSupplier");
}
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; |
Last Updated 1/26/2022 4:08:56 PM