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