Buscar en este blog

miércoles, 1 de octubre de 2014

Crear lookup en formulario o en grid en Ax 2012

El siguiente ejemplo es para mostrarles cómo podemos agregar un lookup a una pantalla (formulario) en ax o también puede ser usado para un campo de un grid como se muestra en la imagen.


Esto se debe hacer en dos partes:
crear el método en la tabla principal que realice la consulta de los datos que queremos mostrar en el lookup
poner en el control (ya sea campo de formulario o campo de grid) la llamada al método que va a llenar los datos que queremos mostrar en el lookup

Paso 1. En mi caso, lo que necesito hacer es mostrar en el lookup todos los artículos que tienen un parámetro desactivado llamado GRWGenericProduct y a su vez necesito que esta lista de artículos que se consulte tenga como producto relacionado el articulo actual de mi tabla, entonces el método que consulta todos mis artículos es el siguiente:
public void lookupPurchItemNoGeneric(FormStringControl _ctrl)
{
    Query query = new Query();
    QueryBuildDataSource queryBuildDataSource;
    QueryBuildDataSource queryBuildDataSourceModule;
    QueryBuildRange queryBuildRange;
    QueryBuildRange queryBuildRangeModule;

    SysTableLookup sysTableLookup = SysTableLookup::newParameters( tableNum (InventTable), _ctrl);

    sysTableLookup.addLookupField( fieldNum (InventTable, ItemId), true);
    sysTableLookup.addLookupField( fieldNum (InventTable, NameAlias));
    sysTableLookup.addLookupField( fieldNum (InventTable, ItemType));

    queryBuildDataSource = query.addDataSource( tableNum (InventTable));

    queryBuildRange = queryBuildDataSource.addRange( fieldNum (InventTable, GRWGenericProduct));
    queryBuildRange.value(QueryValue(Noyes::No));

    queryBuildDataSourceModule = queryBuildDataSource.addDataSource(tableNum (InventTableModule));

    queryBuildRangeModule = queryBuildDataSourceModule.addRange( fieldNum (InventTableModule, GrwItemIdGeneric));
    queryBuildRangeModule.value(this.ItemId);

    queryBuildDataSourceModule.joinMode(JoinMode::ExistsJoin);
    queryBuildDataSourceModule.relations( true );

    sysTableLookup.parmQuery(query);
    sysTableLookup.performFormLookup();

    //super();
}

Quiero aclarar que este método bien podría recibir algún parámetro para aplicar otro rango en mi filtro ademas del propio control que ya recibe como parámetro para sobreescribirle el lookup.

Paso 2. Sobreescribir o "Cancelar" el método lookup de nuestro control al que queremos mandarle los datos para el lookup.

En esta caso yo lo puse en el campo del datasource, bien puede ponerse directamente en el control, sobre el diseño del formulario.
Y este método debe llamar a nuestro método que llena los datos del lookup, osea el método que creamos arriba.
public void lookup(FormControl _formControl, str _filterStr)
{
    //super(_formControl, _filterStr);
    TmpPurchLine.lookupPurchItemNoGeneric(_formControl);
}

Aquí les dejo otro ejemplo un poco mas simple pero teniendo la misma funcionalidad, este jemplo funciona para un control normal y no uno que este dentro de un grid y que sea en base a otro valor.
Este es el método en la tabla que consulta los datos:
public client static void lookupTrackingDimension(FormStringControl _ctrl)
{
    SysTableLookup sysTableLookup = SysTableLookup::newParameters(tableNum (EcoResTrackingDimensionGroup), _ctrl);
   
    Query query = new Query();
    QueryBuildDataSource qbds;
    ;
    sysTableLookup.addLookupfield( fieldNum(EcoResTrackingDimensionGroup, Name), true);
    sysTableLookup.addLookupfield( fieldNum(EcoResTrackingDimensionGroup, Description));
   
    qbds = query.addDataSource( tableNum(EcoResTrackingDimensionGroup));
   
    sysTableLookup.parmQuery(query);
    sysTableLookup.performFormLookup();
}

Y este es el método que consulta esos datos para traerlos a mi control y llenarlo con los resultados del query que hace la consulta.
public void lookup()
{
    super();

    ISGR_RequestNewItemTabla::lookupTrackingDimension(this);
}


Por último, te invito a que te unas a la página de facebook recién creada para estar al día con las actualizaciones del blog y que podamos tener más comunicación. La meta? es hacer la comunidad de habla hispana mas grande sobre Dynamics Ax en cuestiones de desarrollo.


1 comentario:

  1. buen dia una consulta como se puede implementar el count dentro de una consulta de x++, o como aplicar las opciones para realizar una búsqueda dentro de un rango de fechas

    ResponderBorrar