Adicionar registros a tablas dentro de tablas

<< Clic para mostrar Tabla de Contenidos >>

Adicionar registros a tablas dentro de tablas

 

Adicionar registros a tablas dentro de tablas

  • Inicio
  •     Opción 2
  • 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

     

    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.

     

    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"));

    }

     

    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.

     

    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

    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");

    }

     

    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");
    }

    En este articulo