Buscar en este blog

martes, 30 de septiembre de 2014

Leer un query mediante X++ en Dynamics Ax

Hola,
Esta vez, les voy a poner un fragmento de código para leer un query, en este caso, este código aplica tanto para Ax 2009 como para Ax 2012. Algunas veces cuando creamos un query en el AOT de Ax necesitamos varias cosas para validar que esta consultando la información que requerimos, por ejemplo:
  1. queremos ver algún campo o muchos campos específicos aplicando uno o mas filtros o rangos en distintos campos
  2. queremos ver la sentencia SQL que esta haciendo a la base de datos
  3. queremos ver toooooda la información que arroja la consulta en una tabla

Para cada uno de estos puntos tenemos soluciones.
Para comenzar, aquí nuestro query en el AOT


1. Queremos ver algún campo o muchos campos específicos aplicando uno o mas filtros o rangos en distintos campos; aquí el código en un job indicándole el nombre del query, el filtro que queremos y asignamos a nuestros buffer de las tablas el resultado.
static void grwQueryEtapa1(Args _args)
{   
    QueryBuildRange range;
   
    QueryRun queryRun;
    Counter recordsFound;
    GRWTransportTable gRWTransportTable;
    GRWTransportInput gRWTransportInput;
    ;
   // Indicamos el nombre del query
    queryRun = new QueryRun(queryStr (GRWTransportQuery));
    //Le indicamos que en dataSource numero 1, osea mi primera tabla del query, le queremos aplicar un filtro al campo Shipment
    range = queryRun.query().dataSourceNo( 1).addRange(fieldNum (GRWTransportTable, Shipment));
    range.value( "12345");

    //Con el promt se lanza el dialogo del query por si quisieramos poner mas filtros a mano, esto es opcional, podriamos evitar este if
    if(queryRun.prompt())
    {
        //Recorremos los resultados del query
        while(queryRun.next())
        {
            //Asignamos a cada buffer el resultado del query
            gRWTransportTable = queryRun.get( tableNum(GRWTransportTable));
            gRWTransportInput = queryRun.get( tableNum(GRWTransportInput));
           //Mostramos en pantalla el resultado
            info( strFmt("%1, %2, %3" ,gRWTransportTable.Shipment, gRWTransportTable.MaterialType, gRWTransportTable.MovementType));
            info( strFmt("%1, %2, %3" , gRWTransportInput.QualificationGeneral, gRWTransportInput.QualificationUnit, gRWTransportInput.AuthorizedDate));
            recordsFound++;
        }
    }
    //Mostramos el total de registros leidos
    info( strFmt("registros: %1" , recordsFound));
}

2. Queremos ver la sentencia SQL que esta haciendo a la base de datos
static void grwQueryEtapa1(Args _args)
{   
    QueryBuildRange range;
    QueryRun queryRun;    
    ;
   // Indicamos el nombre del query
    queryRun = new QueryRun(queryStr (GRWTransportQuery));
    //Le indicamos que en dataSource numero 1, osea mi primera tabla del query, le queremos aplicar un filtro al campo Shipment
    range = queryRun.query().dataSourceNo( 1).addRange(fieldNum (GRWTransportTable, RecId));
    range.value( "12345");

    
    //Mostramos la sentencia SQL
    info( strFmt("consulta: %1" queryRun.query().toString()));
}



3. Queremos ver toooooda la información que arroja la consulta en una tabla; Creamos una vista arrastrando nuestro query al datasource de la vista y abrimos la vista como si fuera una tabla, ya sea con click derecho -> Abrir o posicicionandonos en el nombre de la vista y presionando Ctrl+O


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: