anonymous Log in
Search
Recents:
v3.0
sd
Lectura OffLine vs Lectura coleccion
02/12/20 00:56

martin gaston

Replies: 1

Hola,
Trabajo con genexus 16 U11, java y android.
Estoy haciendo ajustes y correcciones sobre una aplicación desarrollada
para android que utiliza conectividad Offline.
Encontre un sdpanel tipo Cabecera - Detalle.
En el detalle se carga una grilla con la particularidad que se hace
recorriendo una colección. La colección se carga durante el evento
"clientestart" Para esto se utiliza un procedimiento que recorre la tabla,
carga la colección, luego guarda la colección en sesión. Finalmente en el
evento refresh, mediante otro procedimiento se recupera la colección desde
la sesión y finalmente se utiliza en el evento load.
Aquí tengo algunas dudas en cuanto al por qué de esta solución.
La aplicación esta configurada como Offline. En estos casos, la interacción
de la aplicación es con la base offline y luego los mecanismos de
sincronización se encargan del resto, o si hay conectividad hace el
mantenimiento del offline y el online al mismo tiempo?
En caso de interactuar solo con la base offline, ¿es más costoso el acceso
a los datos directo desde el evento load (la grilla tiene tabla base) que
la carga y la recorrida de la colección?
De momento la grilla carga en promedio entre 30 y 40 registros. Una de las
funcionalidades de las pantallas es que el usuario pueda modificar las
cantidades por cada registros y al confirmar se actualicen. Hoy por cada
modificación se actualiza la colección en la sesión. Aquí tengo la duda
acerca de si esto es aconsejable respecto a actualizar directamente sobre
la base y al final cambiar un estado al confirmar.
Estos son algunos puntos quiero entender para ver si estamos trabajando
bien la solución.
Saludos
Gracias
Replies

mcrispino

02/12/20 13:26
Martín: Intento contestar tus dudas... > La aplicación esta configurada como Offline. En estos casos, la interacción de la aplicación es con la base offline y luego los mecanismos de sincronización se encargan del resto, o si hay conectividad hace el mantenimiento del offline y el online al mismo tiempo? La interacción de la aplicación es con la base de datos local. Si la aplicación (o más bien, el objeto en cuestión) está generada como Offline, se accede a servicios locales que van contra la base de datos local, no se accede a los servicios en el servidor que irían contra la base de datos central. De todas formas, si la sincronización (Send) está configurada para hacerla "when connected" y además hay conexión en el momento en que se graban los datos, entonces se van a mandar inmediatamente. Pero este es un proceso independiente del acceso a la base de datos. Primero la aplicación graba, hace *commit*, y eso dispara otro proceso que es el que sincroniza. > En caso de interactuar solo con la base offline, ¿es más costoso el acceso a los datos directo desde el evento load (la grilla tiene tabla base) que la carga y la recorrida de la colección? No, no debería ser más costoso. De hecho, te diría que es al revés: leer los datos, cargarlos en una colección, grabarlos en la sesión, recuperarlos, volver a pasarlos a una colección, recorrer la colección..., eso tiene que ser más costoso que leer los datos directamente de la base de datos... > De momento la grilla carga en promedio entre 30 y 40 registros. Con esa cantidad de registros igual, cualquiera de las dos soluciones (del punto anterior) tiene que ser prácticamente instantánea... > Hoy por cada modificación se actualiza la colección en la sesión. Aquí tengo la duda acerca de si esto es aconsejable respecto a actualizar directamente sobre la base y al final cambiar un estado al confirmar. Eso depende de cómo querés que lleguen los datos al servidor... Actualizar la colección y grabar todo junto al final te garantiza que se hace todo en el mismo momento. Actualizando en la base de datos, lo que va a pasar es que van a ir al servidor actualizaciones intermedias. Además si la sincronización tiene "when connected", entonces va a estar mandando cada una de las actualizaciones individuales. Un ejemplo: cambio una cantidad de 1 a 2, y después me arrepiento y la vuelvo a cambiar a 1. Si las actualizaciones son en memoria, estas dos actualizaciones no van al servidor. Si son en la base de datos local, entonces sí van a ir cuando sincronice. Por lo tanto: la mejor solución en este caso va a depender de cómo querés que funcionen los envíos al servidor. Espero haber respondido las dudas... Saludos. *Marcos Crispino* Research & Development | GeneXus +598 2601 2082 | Simplifying Software Development [image: GeneXus] On Tue, Dec 1, 2020 at 9:56 PM Martin Gaston


Back to sd