Ubicar Cursor Sobre Cuadricula al Actualizar

A veces me pasa cuando estoy en un formulario y estoy sobre un registro determinado, tenemos un proceso que necesita actualizar la información sobre el registro que estamos parados, por ejemplo estamos en un pedido de compra y creamos un botón que actualiza por ejemplo el estado u otro campo del pedido de compra, luego de este proceso se ejecuta la actualización de la información sobre el formulario en el que estamos, esto hace que se pierda la selección y nos mande el cursor al ultimo pedido de compra y si tenemos filtros aplicados sobre este listado peor aun, a continuación les voy a explicar un código muy sencillo para que podamos ubicar el cursor o ubicar la selección del registro en una cuadricula en una formulario de Ax.

Para este ejemplo vamos a simular un proceso en los pedidos de compra, para esto cree un botón llamado actualizar que lo que hace es ejecutar un PurchTable_ds.executeQuery(); esto lo que hace es volver a ejecutar la consulta de la tabla y por tanto se perderá el pedido de compra sobre el que estoy ubicado que es el 000372, luego de pulsar este botón me mandara al ultimo registro, este código aplica para cualquier caso es que queramos mantener el cursor sobre la cuadricula luego de ejecutar un proceso que refresque el datasource en un formulario.

registro1

Luego de hacer clic en el botón Actualizar, se realiza un refresco de la información y nos ubica al final de la tabla, si queremos mantener el cursor sobre la cuadricula lo que debemos hacer es lo siguiente:

registro2

Lo primero que debemos hacer es identificar el id o numero de identificar único para la tabla que estemos trabajando para este caso la tabla es la PurchTable que es la tabla de pedidos de compra en Dynamics Ax y el campo indice para esta tabla es PurchId. Si no sabemos cual es el campo indice que no se repite en la tabla o no lo tenemos claro, podemos abrir y buscar la tabla, revisar en sus indices uno que tenga la propiedad de AllowDuplicates en No, ese campo o los campos que estén dentro de este indice son los que debemos usar. Para este ejemplo antes de realizar cualquier proceso lo primero que debemos hacer es guardar la información actual. Vamos a realizarlo en el método clicked del botón, primero declaramos una variable para guardar el Id del pedido de compra, con la siguiente instrucción guardamos el valor antes de refrescar el formulario.

1
2
3
4
5
6
    PurchId     currentPurchId;
    ;
 
    super();
 
    currentPurchId = PurchTable.PurchId;

Luego de ejecutar la actualización lo que vamos a hacer es usar el método findRecord del datasource para que el sistema busque el registro y nos ubique sobre el, este método recibe un dato Common como parámetro que sera un registro de la tabla que estemos usando, para este caso vamos a usar el método find de la tabla PurchTable que nos trae un registro con el Id del pedido de compra. Los métodos find son muy útiles a la hora de traer registros usando el ID de las tablas si quieres saber como crear estos métodos puedes ver Como generar métodos en tablas y clases

1
2
3
4
5
6
7
8
9
10
11
12
void clicked()
{
    PurchId     currentPurchId;
    ;
 
    super();
 
    currentPurchId = PurchTable.PurchId;
 
    PurchTable_ds.executeQuery();   
    PurchTable_ds.findRecord(PurchTable::find(currentPurchId));
}

Si tienes dudas o problemas no olvides usar los comentarios.

Articulos Relacionados

Si te gusto este articulo suscribete a nuestro Blog