Refrescar rejilla desde función Remota


([N3] veldevelop) #1

Hola a todos, he creado una función remota que me actualiza cierta información de una tabla en un servidor central.
Las cuestiones son las siguientes:

1º Cuando se realiza un cambio en el cliente, este se debe reflejar en el servidor cosa que hace pero tarda mucho en mostrar el cambio en la rejilla por lo que denoto que no puedo controlar el tiempo de refresco de la misma.¿Hay alguna forma de hacerlo?

2º Si lanzo una búsqueda y dicha búsqueda supongamos que me devuelve 200 registros, el usuario actual no puede verlos todos de una vez ha de hacer evidentemente un scroll del primero al último por lo que si mi rejilla solo muestra 25 registros digamos que cada scroll lo haría de 25 en 25 por tanto 4 scrolls para ver los 200. Ahora bien supongamos que estoy viendo en la pantalla del servidor mi rejilla entre el registro 75 y 100 y en ese momento se produce una actualización de mi función remota, si me espero ocurre el punto 1º.¿Podría lanzar una búsqueda que me devolviera los 200 registros y mostrara al usuario del servidor los registros de las posiciones 75 a 100 actulizada? (Forzar refresco).

Gracias a todos de antemano.


([N3] veldevelop) #2

¿¿¿Nadie se ha encontrado en esta situación???¿Es tan raro lo que pregunto???


([N4] eic) #3

Hola.

Hasta donde yo sé: cuando se produce un cambio en la base de datos, y un usuario (en cualquier sitio) está consultando ese registro, mediante lo que se llama el “refresco terciario”, el servidor lo actualiza. No lo hace instantáneamente (eso sería muy ineficiente) y, que yo sepa, el tiempo de refresco no es configurable. Es un mecanismo automático.

Desde el cliente, no se puede “saber” que hubo un cambio en los registros que estás visualizando. Puedes tener un timer de refresco, pero eso te refrescaría la rejilla entera y te volvería al inicio de la misma (además de tener una constante sensación de “flickering”).

Normalmente, el funcionamiento por defecto es suficiente (para mí, al menos) en la mayoría de los casos. Para tu caso concreto, quizá podrías configurar una “rejilla” en HTML que se refrescara cada menos tiempo, pero mis conocimientos de Javascript (en este caso, puro Javascript, no vJavascript) no llegan para eso.


([N3] pacosatu) #4

Hola Rodolfo.

Como ya habrá quedado claro, el Refresco Terciario es una funcionalidad preprogramada y por lo tanto es algo que no podemos personalizar.
Así que la única manera de adelantarnos al Refresco Terciario es refrescando manualmente la Lista o hacerlo automáticamente mediante un Timer.

Lo más importante es entender que Velneo siempre lee las Fichas de la Caché, excepto para algunos datos como los Punteros Virtuales. La Caché se actualiza por el Refresco Terciario y si éste se ejecuta en un momento dado cada 15 segundos pues estaremos leyendo siempre datos con hasta 15 segundos de desfase.

Por lo tanto no es suficiente con ejecutar un Refresco de la rejilla (comando Recalcular) ya que siempre estamos leyendo de la caché, no del servidor.

En definitiva, no tenemos más remedio que esperar a que el Refresco Terciario borre de la caché las Fichas modificadas en el Servidor para que VClient las lea directamente de dicho servidor.

Conclusión: necesitamos un comando “Borrar caché (tabla Velneo)” para forzar la recarga desde el servidor de una determinada Tabla.

Haces la siguiente pregunta:

¿Podría lanzar una búsqueda que me devolviera los 200 registros y mostrara al usuario del servidor los registros de las posiciones 75 a 100 actualizada?

Puedes ejecutar el siguiente código para mantener seleccionada la misma Ficha en la rejilla después de Recalcular. Aunque como ya te he dicho el comando Recalcular no fuerza la lectura desde el Servidor.


Rem (Guardamos la posición de la Fila selecionada)
Interfaz: Procesar ( REJILLA, Todas )
   Set ( NPOS, sysListPos )
Rem (Recalcula. Suponemos que devuelve el mismo Número de Filas)
Interfaz: Recalcular ( REJILLA )
Rem (Selecciona la misma Ficha de antes)
Interfaz: Procesar ( REJILLA, Todas )
   Seleccionar ficha por posición ( NPOS )

Saludos
Paco Satué


([N3] veldevelop) #5

Buenas tardes, muchísimas gracias a los dos por vuestras respuestas, al final y pensándolo bien tampoco tarda tanto en realidad oscila entre los 30 y 45 segundos.

Paco muchísimas gracias por el tip de la rejilla