Buscar en este blog

miércoles, 20 de mayo de 2015

Crear barra de progreso en Dynamics Ax 2012

Muchas veces tenemos procesos muy tardados que necesitan al menos que el usuario sepa que se están realizando para que no comience a dar clics por todos lados y espere pacientemente a que el proceso termine.

Para esto están las barras de progreso mundialmente conocidas, es algo como lo siguiente:

image

Para hacerlo en nuestro código es muy sencillo, primero necesitamos identificar el inicio de nuestro proceso, por ejemplo, yo tengo un lectura de una base de datos externa que tarda unos cuantos segundos, así que al inicio de todo mi proceso agrego mi progress

public void run()
{
    #Macrolib.AviFiles
    str ruta;
    //ruta = "Data Source = 'C:\\Temp\\RBAsset.sdf'; LCID= 1033; Case Sensitive=true";    

    if (ruta != "" )
    {
        progress = new RunbaseProgress( 1null);
       progress.setCaption( strFmt ("Procesando %1" "base de datos movil"));
       progress.setTotal(TotalDeRegistros);
       progress.setAnimation(#AviTransfer);
       progress.updateInterval( 1 );

        //Llena tabla intermedia
        this.bulkToAx(ruta);       
    }
    else
        warning( "No se ha definido la ruta de la BD ó el dispositivo no esta conectado." );


}

Y en mi proceso mas pesado, que en este caso es dentro del método bulkToAx es donde voy actualizando la barra, algo similiar al siguiente código:
 
//Manda llamar la clase de .Net para leer la BD Sdf del dispositivo movil
public void bulkToAx( str _rutaBd)
{
    System.Data.DataRowCollection       dataRowCollection;
    System.Data.DataRow                 dataRow;
    int                                 i,totalRow;
    GRWActivosFijosSdf                  gRWActivosFijosSdf;

    System.Data.DataTable tablaNet = new System.Data.DataTable();
    GRWBdSdfToAx.GRWBdSdfToAxClass clase = new GRWBdSdfToAx.GRWBdSdfToAxClass();

    tablaNet = clase.ConsultaTodosLosActivos(_rutaBd);

    dataRowCollection       = tablaNet.get_Rows();
    totalRow                = dataRowCollection.get_Count();

    for(i = 0 ; i < totalRow; i ++)
    {
        dataRow = dataRowCollection.get_Item(i);
        
        gRWActivosFijosSdf.clear();
        gRWActivosFijosSdf.CodigoBarras     = dataRow.get_Item( 0 );
        gRWActivosFijosSdf.Descripcion      = dataRow.get_Item( 1 );
        gRWActivosFijosSdf.Serie            = dataRow.get_Item( 2 );        
        gRWActivosFijosSdf.insert();

        progress.setCount(i);
      progress.setText( strFmt ("Cargando registro: %1" ,i));
      progress.update( true );
    }

}

Listo, con esas tres líneas en nuestro proceso mas pesado, la barra va a ir corriendo e informando al usuario que ax sigue trabajando.


Post que podrían interesarte:
Distintos tipos de indicadores de progreso
Consultas en tablas con ValidTimeState en Ax 2012
Multiselect de grid en Ax 2012
Crear lookup en clase dialog



Y por cierto, acuerdate de darle click a algún anuncio si el post te sirvio de algo.

No olvides que te puedes unir a la página en Facebook Aprendiendo Dynamics Ax donde únicamente se tratan temas de desarrollo y se busca crear una comunidad de desarrollador@s de Ax en nuestro idioma. 


No hay comentarios.:

Publicar un comentario