Thursday, November 13, 2014

Trabajando con Lookup en Ax 2009

Ax cuenta con la funcionalidad de incluir formularios desplegables automáticamente a cualquier campo configurado con tipo de dato extendido, pero muchas veces será necesario adecuar el resultado de esa ventana.

Véamos el caso del tipo de dato AddressCountryRegionId, al colocarlo en un control nos genera la vista por default de la tabla relacionada, en este caso es AddressCountryRegion




Suponiendo que me gustaría ver el tipo de país/region  y el ISO, como se muestra en la imagen siguiente, lo que denemos hacer es modificar el método lookup() del objeto en cuestión.




El código es el siguiente.



01 public void lookup()
02 {
03      SysTableLookup               sysTableLookup;
04      Query                                query ;
05      QueryRun                         qr;
06      QueryBuildDataSource    qbds;
07   ;
08
09    query   = new Query();
10
11   sysTableLookup  =   SysTableLookup::newParameters(TableNum(AddressCountryRegion), this);
12   sysTableLookup.addLookupfield( fieldnum( AddressCountryRegion,CountryRegionId));
13   sysTableLookup.addLookupfield( fieldnum( AddressCountryRegion,Name));
14   sysTableLookup.addLookupfield( fieldnum( AddressCountryRegion,Type));
15   sysTableLookup.addLookupfield( fieldnum( AddressCountryRegion,IsoCode));
16
17
18   qbds = query.addDataSource(tablenum( AddressCountryRegion));
19   qbds.addRange(fieldnum(AddressCountryRegion, type)).value(enum2str(CountryRegionType::Domestic));
20
21    sysTableLookup.parmQuery( query);
22    sysTableLookup.performFormLookup();
23 }



En la línea 11 inicializamos el objeto sysTableLookup  con el argumento que identifica la tabla a visualizarse y el control que lo llama.

De la línea 11 a la 15 nos dedicamos a incluir los campos que queremos visualizar al momento de mostrar la ventana.

Líneas 18 y 19 nos permiten asignar un valor al Query y a través de nuestro objeto QueryBuildDataSource nos vamos a dar el lujo de asignar un rango para que solo muestre los del tipo Domestic.

En la línea 21 aplicamos el Query a nuestro objeto SysTableLookup y en la 22 le damos instrucción de ejecutarse, es necesario notar que la llamada a super() se eliminó completamente.


Ahora bien, que pasa si solo queremos visualizar el Tipo de país/region en nuestra ventana emergente.

Sencillo, quitamos las lineas que no queremos mostrar y quitamos el query y el rango para muestre todos no solo Domestic, y el resultado es el siguiente x_x







Es necesario agrupar los valores, para ello el código quedaría asi:



01 public void lookup()
02 {
03     SysTableLookup          sysTableLookup;
04     Query                   query ;
05     QueryRun                qr;
06     QueryBuildDataSource    qbds;
07     ;
08
09     query   = new Query();
10
11     sysTableLookup  =   SysTableLookup::newParameters(TableNum(AddressCountryRegion), this);
12     sysTableLookup.addLookupfield( fieldnum( AddressCountryRegion,Type));
13 
14     qbds = query.addDataSource(tablenum( AddressCountryRegion));
15
16     qbds.addSortField(Fieldnum(AddressCountryRegion,type));
17     qbds.orderMode(orderMode::GroupBy);
18
19      sysTableLookup.parmQuery( query);
20      sysTableLookup.performFormLookup();
21 }


En la línea 16 se añade el metodo addSortField() al tipo de campo del ordenamiento o agrupamiento y en la línea 17 se indica el orderMode::GroupBy y el resultado será:

No comments:

Post a Comment