2.2.Modificando la query de un informe para mostrar el registro que se le pasa por parámetros.


2.2.Modificando la query de un informe para mostrar el registro que se le pasa por parámetros.

Empezaremos con un ejemplo simple.
Llamaremos a un informe con un parámetro.
Utilizaremos un informe ya existente(inventTableABC), el cual filtraremos por un artículo en concreto.

Aquí podemos ver un ejemplo de como se ve sin filtro alguno.



Empezamos creando una clase de tipo controller.
Class InventTableViewController extends SRSReportRunController{}

Creamos un método main, que nos servirá para poder llamar a nuestro informe.
En este ejemplo cogeremos el campo itemid de la inventtable para filtrar.
Este campo nos llegará junto con el registro de la inventTable por argumentos.
Éstos se le asignan a la clase con el método parmArgs.
Static void main(Args    _args)
{
             InventTableViewController        controller = new InventTableViewController();
             ;
            controller.parmReportName(ssrsReportStr(InventTableAbc, report));
            controller.parmArgs(_args);
            controller.parmShowDialog(false);
            controller.startOperation();
}


Y anularemos el método prePrompModifyContract.

Nota: Para anular un método, lo haremos situándonos encima del nodo de métodos de la clase y con el botón derecho del ratón podremos anular aquellos que nos interesen.

En este método verificaremos si nos ha llegado un registro por parámetros, en caso que sea correcto, modificaremos la query que tiene el informe asignándole el valor de itemId.
Protected void prePrompModifyContract()
{
                Query                                  query;
                QuerybuildDataSource    qbds;
                InventTable                       inventTable;
                ;
 
                inventTable = args ? args.record() as inventTable : null; 
   if (inventTable.recid)
   {
                query = this.getFirstQuery();
                             qbds = query.dataSourceTable(tablenum(InventTable));
 
                             if (qbds.findRange(fieldnum(InventTable, ItemId)))
                             {
                                     qbds.findRange(fieldnum(InventTable, ItemId)).value(InventTable.itemid);
                             }
                             else
   {
           qbds.addRange(fieldnum(InventTable, itemId)).value(inventTable.itemId);
   }
}
}

Para probar este ejemplo crearemos un menuItem de tipo Action, que se llamará desde un formulario que tendrá como dataSource la tabla inventTable.
Aquí podemos ver las propiedades del menu Ítem.

He creado este formulario de ejemplo, para probarlo y en donde  se pude ver el botón.

En las propiedades del botón del formulario cambiaremos la propiedad  needsRecord a “yes” y en la propiedad dataSource le pondremos la inventTable.


Vamos a probar nuestro ejemplo con el artículo que se ve en la imagen.
Finalmente tenemos nuestro informe con el registro seleccionado.

Comentarios