SlideShare una empresa de Scribd logo
1 de 32
#GX3199
Aplicaciones Offline para
Smart Devices: Conceptos
avanzados
Marcos Crispino
@mcrispino
mcrispino@genexus.com
#GX3199
#GX3199
Offline
#GX3199
TEMAS
Objeto Offline
Database
Generación
de código
Escenarios
avanzados
Sincronización
Objeto Offline
Database
#GX3199
Condiciones y eventos
• Conditions
• Event Start
• Navegación
#GX3199
Creación de la base de
datos
• Generación de los programas
• Ejecución en el dispositivo
• Solo creación
• Opción de precarga de datos
#GX3199
Base de datos local
• SQLite
• Integridad transaccional
• Transacciones son bloqueantes
#GX23
TEMAS
Objeto Offline
Database
Generación de código
#GX3199
Online vs. Offline
• Eventos Start, Refresh y Load
• Eventos de usuario
• Procedures y Data Providers
• Business Components
#GX3199
Ejecución en dispositivos
• Acceso a datos (for each, new)
• Estructuras de control (if, while, etc.)
• Operaciones
• Funciones del lenguaje
#GX3199
Seguridad con GAM
• Credenciales en el servidor
• Opción de Login solo Online
• Usuario autenticado Offline
• Consulta de datos del usuario Offline
• Solo autenticación
#GX3199
TEMAS
Objeto Offline
Database
Generación
de código
Escenarios avanzados
#GX3199
Aplicación full offline
• Nunca se conecta al servidor
• Datos precargados o generados por el usuario
• Ejemplo: aplicación de finanzas personales
#GX3199
Aplicación basada en
servicios
• No necesita “backend”
• Requiere de servicios externos
• Puede o no tener datos locales
• Ejemplo: Find My Plane
#GX3199
TEMAS
Objeto Offline
Database
Generación
de código
Escenarios
avanzados
Sincronización
#GX3199
Sincronización
Receive
Send
#GX3199
Propiedades
#GX3199
Receive
• Automática o Manual
• Data Synchronization Criteria
• Minimum Time Between Synchronizations
• Synchronization.Receive()
• Por tabla o por registro
• Data Synchronization Granularity
#GX3199
Receive: by row
• Tablas auxiliares en el servidor
• Versión de los datos en el cliente (hash)
• Juego de datos por hash en el servidor
#GX3199
Receive: by row
Dispositivo Servidor
Clientes
[ {id=1, nombre=A}, {id=2, nombre=B} ]
Hash
3458145ae23490fb142
Clientes
[]
Clientes, 3458145ae23490fb142
[ {id=1, nombre=A}, {id=2, nombre=B} ]
Clientes
[ {id=1, nombre=D}, {id=2, nombre=B},
{id=3, nombre=C} ]
Hash
e59274ac5d5923b6efa8
INS: {id=3, nombre=C}
UPD: {id=1, nombre=D}
DLT: {id=2}
Clientes, e59274ac5d5923b6efa8
[ {id=1, nombre=D}, {id=3, nombre=C} ]
3458145ae23490fb142
#GX3199
Receive: filtrado de datos
• Conditions en el objeto Offline Database
• Se aplican antes de calcular el hash de la tabla
• Parámetros:
• Información del dispositivo
• Usuario de GAM
#GX3199
Send
• Solo Business Components
• Tabla auxiliar en SQLite
#GX3199
Send: cuándo
• Propiedad Local Changes Processing
• When Connected
• User Defined: Synchronization.Send()
#GX3199
Send: mapeo de claves
• Claves autogeneradas
• Usadas como Foreign Key en otras tablas
• Cambian de valor en el servidor
• Actualización en la respuesta
#GX3199
Send: mapeo de claves
Cliente: {CliId=1,...}
Factura: {..., CliId=1, ...}
Dispositivo Servidor
Cliente: {CliId=1,...}
Factura: {..., CliId=1, ...}
Cliente: {CliId=24,...}
Factura: {..., CliId=24, ...}
INS
INS
Factura: {..., CliId=24, ...}Cliente: {CliId=1 => 24}
Factura: {CliId=1 => 24}
#GX3199
Send: manejo de errores
• Respuesta de error
• SynchronizationEventsAPI
#GX23
TEMAS
Objeto Offline
Database
Generación
de código
Escenarios
avanzados
Sincronización
#GX23
www.genexus.com/encuentro
@mcrispino#GX3199

Más contenido relacionado

La actualidad más candente

Consulta,virtualizacion,vmware y virtualbox
Consulta,virtualizacion,vmware y virtualboxConsulta,virtualizacion,vmware y virtualbox
Consulta,virtualizacion,vmware y virtualboxDanielandthedogs
 
Esquemas de seguridad en los sistemas de bases de datos juan anaya manzano
Esquemas de seguridad en los sistemas de bases de datos juan anaya manzanoEsquemas de seguridad en los sistemas de bases de datos juan anaya manzano
Esquemas de seguridad en los sistemas de bases de datos juan anaya manzanoJuan Anaya
 
Otras estructuras de datos (heap, tablas hash y diccionarios)
Otras estructuras de datos (heap, tablas hash y diccionarios)Otras estructuras de datos (heap, tablas hash y diccionarios)
Otras estructuras de datos (heap, tablas hash y diccionarios)Alvaro Enrique Ruano
 
IEEE 1471-2000: Documento de arquitectura de software
IEEE 1471-2000: Documento de arquitectura de softwareIEEE 1471-2000: Documento de arquitectura de software
IEEE 1471-2000: Documento de arquitectura de softwareJesús Navarro
 
Análisis de arquitecturas de software
Análisis de arquitecturas de softwareAnálisis de arquitecturas de software
Análisis de arquitecturas de softwareJorge Rodriguez
 
Metricas del producto para el Software
Metricas del producto para el SoftwareMetricas del producto para el Software
Metricas del producto para el SoftwareWalter Tejerina
 
Diagramas de caso de uso
Diagramas de caso de usoDiagramas de caso de uso
Diagramas de caso de usoTensor
 

La actualidad más candente (20)

Consulta,virtualizacion,vmware y virtualbox
Consulta,virtualizacion,vmware y virtualboxConsulta,virtualizacion,vmware y virtualbox
Consulta,virtualizacion,vmware y virtualbox
 
Calidad de servicio en redes
Calidad de servicio en redesCalidad de servicio en redes
Calidad de servicio en redes
 
Guía de Visual Fox Pro 9.0
Guía de Visual Fox Pro 9.0Guía de Visual Fox Pro 9.0
Guía de Visual Fox Pro 9.0
 
Cacti
CactiCacti
Cacti
 
Esquemas de seguridad en los sistemas de bases de datos juan anaya manzano
Esquemas de seguridad en los sistemas de bases de datos juan anaya manzanoEsquemas de seguridad en los sistemas de bases de datos juan anaya manzano
Esquemas de seguridad en los sistemas de bases de datos juan anaya manzano
 
Otras estructuras de datos (heap, tablas hash y diccionarios)
Otras estructuras de datos (heap, tablas hash y diccionarios)Otras estructuras de datos (heap, tablas hash y diccionarios)
Otras estructuras de datos (heap, tablas hash y diccionarios)
 
IEEE 1471-2000: Documento de arquitectura de software
IEEE 1471-2000: Documento de arquitectura de softwareIEEE 1471-2000: Documento de arquitectura de software
IEEE 1471-2000: Documento de arquitectura de software
 
Base de Datos Orientada a Objetos
Base de Datos Orientada a ObjetosBase de Datos Orientada a Objetos
Base de Datos Orientada a Objetos
 
Introduction to Visual Studio.NET
Introduction to Visual Studio.NETIntroduction to Visual Studio.NET
Introduction to Visual Studio.NET
 
Diagramas sintacticos
Diagramas sintacticosDiagramas sintacticos
Diagramas sintacticos
 
Modelo basado en clases
Modelo basado en clasesModelo basado en clases
Modelo basado en clases
 
13.diseño de web apps
13.diseño de web apps13.diseño de web apps
13.diseño de web apps
 
Flex y bison
Flex y bisonFlex y bison
Flex y bison
 
Slide mang may tinh
Slide mang may tinhSlide mang may tinh
Slide mang may tinh
 
Ch 11-component-level-design
Ch 11-component-level-designCh 11-component-level-design
Ch 11-component-level-design
 
1. Modelo de Datos
1. Modelo de Datos1. Modelo de Datos
1. Modelo de Datos
 
Análisis de arquitecturas de software
Análisis de arquitecturas de softwareAnálisis de arquitecturas de software
Análisis de arquitecturas de software
 
Metricas del producto para el Software
Metricas del producto para el SoftwareMetricas del producto para el Software
Metricas del producto para el Software
 
Guía para la creación de cubos de datos
Guía para la creación de cubos de datosGuía para la creación de cubos de datos
Guía para la creación de cubos de datos
 
Diagramas de caso de uso
Diagramas de caso de usoDiagramas de caso de uso
Diagramas de caso de uso
 

Similar a Aplicaciones offline sd conceptos avanzados

Tecnologias aplicadas a la integracion y como usarlas
Tecnologias aplicadas a la integracion y como usarlasTecnologias aplicadas a la integracion y como usarlas
Tecnologias aplicadas a la integracion y como usarlasGeneXus
 
Fases de un proyecto de desarrollo de Softwareo Orientado a la Web-Charles Fr...
Fases de un proyecto de desarrollo de Softwareo Orientado a la Web-Charles Fr...Fases de un proyecto de desarrollo de Softwareo Orientado a la Web-Charles Fr...
Fases de un proyecto de desarrollo de Softwareo Orientado a la Web-Charles Fr...Charles Aldahir Franco Verdezoto
 
Nuevos escenarios cubiertos por el gam
Nuevos escenarios cubiertos por el gamNuevos escenarios cubiertos por el gam
Nuevos escenarios cubiertos por el gamGeneXus
 
Azure Realtime analytics: Análisis de datos en tiempo real
Azure Realtime analytics: Análisis de datos en tiempo realAzure Realtime analytics: Análisis de datos en tiempo real
Azure Realtime analytics: Análisis de datos en tiempo realSoftware Guru
 
Certificación Microoformas - Digitalizacion Legal de Documentos
Certificación Microoformas - Digitalizacion Legal de DocumentosCertificación Microoformas - Digitalizacion Legal de Documentos
Certificación Microoformas - Digitalizacion Legal de DocumentosAntonio Garin Rodríguez
 
067 aplicaciones offline_sd_arquitectura_y_desarrollo_con_genexus
067 aplicaciones offline_sd_arquitectura_y_desarrollo_con_genexus067 aplicaciones offline_sd_arquitectura_y_desarrollo_con_genexus
067 aplicaciones offline_sd_arquitectura_y_desarrollo_con_genexusGeneXus
 
Build and test all
Build and test allBuild and test all
Build and test allGeneXus
 
Build and test all, lo nuevo de GXtest para Desarrolladores
Build and test all, lo nuevo de GXtest para DesarrolladoresBuild and test all, lo nuevo de GXtest para Desarrolladores
Build and test all, lo nuevo de GXtest para DesarrolladoresAbstracta
 
jt2017-jt-exp_comu_a5-a8b3c1.pdf
jt2017-jt-exp_comu_a5-a8b3c1.pdfjt2017-jt-exp_comu_a5-a8b3c1.pdf
jt2017-jt-exp_comu_a5-a8b3c1.pdfSunnyRoam
 
Evolución del lenguaje GeneXus
Evolución del lenguaje GeneXusEvolución del lenguaje GeneXus
Evolución del lenguaje GeneXusGeneXus
 
Bunsan: Cómo validamos 600 facturas por segundo en un miniservidor
Bunsan: Cómo validamos 600 facturas por segundo en un miniservidorBunsan: Cómo validamos 600 facturas por segundo en un miniservidor
Bunsan: Cómo validamos 600 facturas por segundo en un miniservidorSoftware Guru
 
Gestión Wireless Cloud: Business Central 2.1
Gestión Wireless Cloud: Business Central 2.1Gestión Wireless Cloud: Business Central 2.1
Gestión Wireless Cloud: Business Central 2.1NETGEAR Iberia
 
Python dentro de SQL Server
Python dentro de SQL ServerPython dentro de SQL Server
Python dentro de SQL ServerEduardo Castro
 
AR-Proyecto enmascaramiento de datos.
AR-Proyecto enmascaramiento de datos.AR-Proyecto enmascaramiento de datos.
AR-Proyecto enmascaramiento de datos.PowerData
 
AR-Proyecto enmascaramiento de Datos.
AR-Proyecto enmascaramiento de Datos.AR-Proyecto enmascaramiento de Datos.
AR-Proyecto enmascaramiento de Datos.PowerData
 
VI Foro Evidencias Electrónicas en la Investigación Policial. Análisis forens...
VI Foro Evidencias Electrónicas en la Investigación Policial. Análisis forens...VI Foro Evidencias Electrónicas en la Investigación Policial. Análisis forens...
VI Foro Evidencias Electrónicas en la Investigación Policial. Análisis forens...Internet Security Auditors
 
DexonBPM-Casos de uso.pdf
DexonBPM-Casos de uso.pdfDexonBPM-Casos de uso.pdf
DexonBPM-Casos de uso.pdfssuserfd1b561
 
27 . Tres recetas básicas para la buena cocina
27 . Tres recetas básicas para la buena cocina27 . Tres recetas básicas para la buena cocina
27 . Tres recetas básicas para la buena cocinaGeneXus
 
Estructura del Registro de Windows
Estructura del Registro de WindowsEstructura del Registro de Windows
Estructura del Registro de WindowsAdrián Lois
 

Similar a Aplicaciones offline sd conceptos avanzados (20)

Tecnologias aplicadas a la integracion y como usarlas
Tecnologias aplicadas a la integracion y como usarlasTecnologias aplicadas a la integracion y como usarlas
Tecnologias aplicadas a la integracion y como usarlas
 
Fases de un proyecto de desarrollo de Softwareo Orientado a la Web-Charles Fr...
Fases de un proyecto de desarrollo de Softwareo Orientado a la Web-Charles Fr...Fases de un proyecto de desarrollo de Softwareo Orientado a la Web-Charles Fr...
Fases de un proyecto de desarrollo de Softwareo Orientado a la Web-Charles Fr...
 
Nuevos escenarios cubiertos por el gam
Nuevos escenarios cubiertos por el gamNuevos escenarios cubiertos por el gam
Nuevos escenarios cubiertos por el gam
 
Azure Realtime analytics: Análisis de datos en tiempo real
Azure Realtime analytics: Análisis de datos en tiempo realAzure Realtime analytics: Análisis de datos en tiempo real
Azure Realtime analytics: Análisis de datos en tiempo real
 
Certificación Microoformas - Digitalizacion Legal de Documentos
Certificación Microoformas - Digitalizacion Legal de DocumentosCertificación Microoformas - Digitalizacion Legal de Documentos
Certificación Microoformas - Digitalizacion Legal de Documentos
 
067 aplicaciones offline_sd_arquitectura_y_desarrollo_con_genexus
067 aplicaciones offline_sd_arquitectura_y_desarrollo_con_genexus067 aplicaciones offline_sd_arquitectura_y_desarrollo_con_genexus
067 aplicaciones offline_sd_arquitectura_y_desarrollo_con_genexus
 
Build and test all
Build and test allBuild and test all
Build and test all
 
Build and test all, lo nuevo de GXtest para Desarrolladores
Build and test all, lo nuevo de GXtest para DesarrolladoresBuild and test all, lo nuevo de GXtest para Desarrolladores
Build and test all, lo nuevo de GXtest para Desarrolladores
 
jt2017-jt-exp_comu_a5-a8b3c1.pdf
jt2017-jt-exp_comu_a5-a8b3c1.pdfjt2017-jt-exp_comu_a5-a8b3c1.pdf
jt2017-jt-exp_comu_a5-a8b3c1.pdf
 
Evolución del lenguaje GeneXus
Evolución del lenguaje GeneXusEvolución del lenguaje GeneXus
Evolución del lenguaje GeneXus
 
Bunsan: Cómo validamos 600 facturas por segundo en un miniservidor
Bunsan: Cómo validamos 600 facturas por segundo en un miniservidorBunsan: Cómo validamos 600 facturas por segundo en un miniservidor
Bunsan: Cómo validamos 600 facturas por segundo en un miniservidor
 
Gestión Wireless Cloud: Business Central 2.1
Gestión Wireless Cloud: Business Central 2.1Gestión Wireless Cloud: Business Central 2.1
Gestión Wireless Cloud: Business Central 2.1
 
Python dentro de SQL Server
Python dentro de SQL ServerPython dentro de SQL Server
Python dentro de SQL Server
 
AR-Proyecto enmascaramiento de datos.
AR-Proyecto enmascaramiento de datos.AR-Proyecto enmascaramiento de datos.
AR-Proyecto enmascaramiento de datos.
 
AR-Proyecto enmascaramiento de Datos.
AR-Proyecto enmascaramiento de Datos.AR-Proyecto enmascaramiento de Datos.
AR-Proyecto enmascaramiento de Datos.
 
VI Foro Evidencias Electrónicas en la Investigación Policial. Análisis forens...
VI Foro Evidencias Electrónicas en la Investigación Policial. Análisis forens...VI Foro Evidencias Electrónicas en la Investigación Policial. Análisis forens...
VI Foro Evidencias Electrónicas en la Investigación Policial. Análisis forens...
 
DexonBPM-Casos de uso.pdf
DexonBPM-Casos de uso.pdfDexonBPM-Casos de uso.pdf
DexonBPM-Casos de uso.pdf
 
27 . Tres recetas básicas para la buena cocina
27 . Tres recetas básicas para la buena cocina27 . Tres recetas básicas para la buena cocina
27 . Tres recetas básicas para la buena cocina
 
Que es AS2 y como se implementa
Que es AS2 y como se implementaQue es AS2 y como se implementa
Que es AS2 y como se implementa
 
Estructura del Registro de Windows
Estructura del Registro de WindowsEstructura del Registro de Windows
Estructura del Registro de Windows
 

Más de GeneXus

After Chatbots Yo (Ro) Bots
After Chatbots Yo (Ro) BotsAfter Chatbots Yo (Ro) Bots
After Chatbots Yo (Ro) BotsGeneXus
 
Construya las aplicaciones del futuro ¡hoy!
Construya las aplicaciones del futuro ¡hoy!Construya las aplicaciones del futuro ¡hoy!
Construya las aplicaciones del futuro ¡hoy!GeneXus
 
Live Editing in Action
Live Editing in ActionLive Editing in Action
Live Editing in ActionGeneXus
 
Experiencias en el desarrollo de aplicaciones móviles en el sector salud de M...
Experiencias en el desarrollo de aplicaciones móviles en el sector salud de M...Experiencias en el desarrollo de aplicaciones móviles en el sector salud de M...
Experiencias en el desarrollo de aplicaciones móviles en el sector salud de M...GeneXus
 
¿Pensando en implementar un sistema de gestión integral en su organización?
¿Pensando en implementar un sistema de gestión integral en su organización?¿Pensando en implementar un sistema de gestión integral en su organización?
¿Pensando en implementar un sistema de gestión integral en su organización?GeneXus
 
K2B Tools el compañero de viaje ideal hacia el futuro
K2B Tools el compañero de viaje ideal hacia el futuroK2B Tools el compañero de viaje ideal hacia el futuro
K2B Tools el compañero de viaje ideal hacia el futuroGeneXus
 
Sd y Plataformas
Sd y PlataformasSd y Plataformas
Sd y PlataformasGeneXus
 
PXTools: Nuevo generador y nuevos controles responsivos
PXTools: Nuevo generador y nuevos controles responsivosPXTools: Nuevo generador y nuevos controles responsivos
PXTools: Nuevo generador y nuevos controles responsivosGeneXus
 
APPlícate: Aplicaciones móviles para el desarrollo de la industria
APPlícate: Aplicaciones móviles para el desarrollo de la industriaAPPlícate: Aplicaciones móviles para el desarrollo de la industria
APPlícate: Aplicaciones móviles para el desarrollo de la industriaGeneXus
 
GeneXus 4 Students
GeneXus 4 StudentsGeneXus 4 Students
GeneXus 4 StudentsGeneXus
 
La importancia de ser responsive
La importancia de ser responsiveLa importancia de ser responsive
La importancia de ser responsiveGeneXus
 
K2B: El ERP nativo para el mundo GeneXus
K2B: El ERP nativo para el mundo GeneXusK2B: El ERP nativo para el mundo GeneXus
K2B: El ERP nativo para el mundo GeneXusGeneXus
 
GeneXus 15 (Salto)
GeneXus 15 (Salto)GeneXus 15 (Salto)
GeneXus 15 (Salto)GeneXus
 
GeneXus Cloud Deployment Services. El camino a la nube.
GeneXus Cloud Deployment Services. El camino a la nube.GeneXus Cloud Deployment Services. El camino a la nube.
GeneXus Cloud Deployment Services. El camino a la nube.GeneXus
 
LigaMX con GeneXus: De 0 a 1.700.000 de usuarios
LigaMX con GeneXus: De 0 a 1.700.000 de usuariosLigaMX con GeneXus: De 0 a 1.700.000 de usuarios
LigaMX con GeneXus: De 0 a 1.700.000 de usuariosGeneXus
 
Innovando con GeneXus y SAP
Innovando con GeneXus y SAPInnovando con GeneXus y SAP
Innovando con GeneXus y SAPGeneXus
 
Going mobile
Going mobileGoing mobile
Going mobileGeneXus
 
Audit+: La mejor forma de auditar KB’s GeneXus
Audit+: La mejor forma de auditar KB’s GeneXusAudit+: La mejor forma de auditar KB’s GeneXus
Audit+: La mejor forma de auditar KB’s GeneXusGeneXus
 
WW+, SD+ y Audit+: Potencie GeneXus la Suite Plus
WW+, SD+ y Audit+: Potencie GeneXus la Suite PlusWW+, SD+ y Audit+: Potencie GeneXus la Suite Plus
WW+, SD+ y Audit+: Potencie GeneXus la Suite PlusGeneXus
 
Aproveche las ventajas de la colaboración entre GeneXus y Cloud Shared Office...
Aproveche las ventajas de la colaboración entre GeneXus y Cloud Shared Office...Aproveche las ventajas de la colaboración entre GeneXus y Cloud Shared Office...
Aproveche las ventajas de la colaboración entre GeneXus y Cloud Shared Office...GeneXus
 

Más de GeneXus (20)

After Chatbots Yo (Ro) Bots
After Chatbots Yo (Ro) BotsAfter Chatbots Yo (Ro) Bots
After Chatbots Yo (Ro) Bots
 
Construya las aplicaciones del futuro ¡hoy!
Construya las aplicaciones del futuro ¡hoy!Construya las aplicaciones del futuro ¡hoy!
Construya las aplicaciones del futuro ¡hoy!
 
Live Editing in Action
Live Editing in ActionLive Editing in Action
Live Editing in Action
 
Experiencias en el desarrollo de aplicaciones móviles en el sector salud de M...
Experiencias en el desarrollo de aplicaciones móviles en el sector salud de M...Experiencias en el desarrollo de aplicaciones móviles en el sector salud de M...
Experiencias en el desarrollo de aplicaciones móviles en el sector salud de M...
 
¿Pensando en implementar un sistema de gestión integral en su organización?
¿Pensando en implementar un sistema de gestión integral en su organización?¿Pensando en implementar un sistema de gestión integral en su organización?
¿Pensando en implementar un sistema de gestión integral en su organización?
 
K2B Tools el compañero de viaje ideal hacia el futuro
K2B Tools el compañero de viaje ideal hacia el futuroK2B Tools el compañero de viaje ideal hacia el futuro
K2B Tools el compañero de viaje ideal hacia el futuro
 
Sd y Plataformas
Sd y PlataformasSd y Plataformas
Sd y Plataformas
 
PXTools: Nuevo generador y nuevos controles responsivos
PXTools: Nuevo generador y nuevos controles responsivosPXTools: Nuevo generador y nuevos controles responsivos
PXTools: Nuevo generador y nuevos controles responsivos
 
APPlícate: Aplicaciones móviles para el desarrollo de la industria
APPlícate: Aplicaciones móviles para el desarrollo de la industriaAPPlícate: Aplicaciones móviles para el desarrollo de la industria
APPlícate: Aplicaciones móviles para el desarrollo de la industria
 
GeneXus 4 Students
GeneXus 4 StudentsGeneXus 4 Students
GeneXus 4 Students
 
La importancia de ser responsive
La importancia de ser responsiveLa importancia de ser responsive
La importancia de ser responsive
 
K2B: El ERP nativo para el mundo GeneXus
K2B: El ERP nativo para el mundo GeneXusK2B: El ERP nativo para el mundo GeneXus
K2B: El ERP nativo para el mundo GeneXus
 
GeneXus 15 (Salto)
GeneXus 15 (Salto)GeneXus 15 (Salto)
GeneXus 15 (Salto)
 
GeneXus Cloud Deployment Services. El camino a la nube.
GeneXus Cloud Deployment Services. El camino a la nube.GeneXus Cloud Deployment Services. El camino a la nube.
GeneXus Cloud Deployment Services. El camino a la nube.
 
LigaMX con GeneXus: De 0 a 1.700.000 de usuarios
LigaMX con GeneXus: De 0 a 1.700.000 de usuariosLigaMX con GeneXus: De 0 a 1.700.000 de usuarios
LigaMX con GeneXus: De 0 a 1.700.000 de usuarios
 
Innovando con GeneXus y SAP
Innovando con GeneXus y SAPInnovando con GeneXus y SAP
Innovando con GeneXus y SAP
 
Going mobile
Going mobileGoing mobile
Going mobile
 
Audit+: La mejor forma de auditar KB’s GeneXus
Audit+: La mejor forma de auditar KB’s GeneXusAudit+: La mejor forma de auditar KB’s GeneXus
Audit+: La mejor forma de auditar KB’s GeneXus
 
WW+, SD+ y Audit+: Potencie GeneXus la Suite Plus
WW+, SD+ y Audit+: Potencie GeneXus la Suite PlusWW+, SD+ y Audit+: Potencie GeneXus la Suite Plus
WW+, SD+ y Audit+: Potencie GeneXus la Suite Plus
 
Aproveche las ventajas de la colaboración entre GeneXus y Cloud Shared Office...
Aproveche las ventajas de la colaboración entre GeneXus y Cloud Shared Office...Aproveche las ventajas de la colaboración entre GeneXus y Cloud Shared Office...
Aproveche las ventajas de la colaboración entre GeneXus y Cloud Shared Office...
 

Aplicaciones offline sd conceptos avanzados

Notas del editor

  1. Introducción
  2. Apertura: tuit de @spolsky, contar quién es, qué es Trello, aplicación iOS con más de 2 años, hace 6 meses versión 2.0 para iPad, ahora soporte offline y sincronización¿Por qué es importante? Porque es una funcionalidad costosa, que en GX está resuelto de forma automática.
  3. Antes de empezar, tenemos que definir bien a que nos referimos cuando hablamos de aplicaciones offline.El término a veces genera confusión, porque la palabra offline puede tener distinto significado según el contexto en que se use.Para nosotros offline no significa aplicaciones que nunca están conectadas. Son aplicaciones que en general tienen conexión, pero que tienen que poder funcionar también cuando están desconectadas. Esto implica que tienen un repositorio de datos centralizado, pero también tienen que tener un repositorio de datos locales, y tienen que tener algún mecanismo de sincronización. Además tienen que tener la posibilidad de ejecutar código en el dispositivo, de forma tal de poder hacer cálculos cuando no se tiene conexión con el servidor.El escenario canónico es el de ingreso de pedidos, donde el usuario va al cliente con un dispositivo movil, ingresa el pedido tenga conexión o no, y se mandan los pedidos al servidor tan pronto como se pueda. Pero además, los precios de los productos se tienen que actualizar con cierta frecuencia, así como los datos de los clientes.
  4. Entonces en esta charla vamos a hablar de estos temas, que tienen que ver con las aplicaciones offline.Primero vamos a ver qué es el objeto offline database, luego vamos a hablar sobre la generación de código en los dispositivos. Luego vamos a ver como esto nos permite resolver otros escenarios, y por ultimo vamos a hablar sobre sincronización que es quizá el tema más interesante.
  5. El objeto offline database es un nuevo tipo de objeto en GeneXus Tilo que se crea a partir de un objeto main SD, y es quien define qué tablas van al dispositivo y cómo se sincronizan.Las tablas que se incluyen en la base de datos offline se determinan a partir de los paneles offline alcanzables desde el main.Este objeto aparece debajo del objeto main que lo genera en el Folder View de GeneXus.
  6. En las aplicaciones en los smarte devices, en general, no vamos a querer tener todos los datos que tiene el servidor, ya sea porque son demasiados o por temas de privacidad. Por ejemplo, no voy a querer que un vendedor se lleve los datos que le corresponden a otro. Para eso tenemos la opción de definir en el objeto offline database qué datos tienen que ir al dispositivo.El objeto offline database tiene un tab de conditions globales, que aplican a las tablas que corresponda. Tiene un evento Start para poder hacer cálculos previos e inicializar variables que se usen en las condiciones.En la navegación aparecen las condiciones que aplican a cada tabla. Podemos ver en la foto que por ejemplo la condición por “cliente activo” aplica también a las órdenes de compra. Esto es porque las condiciones se aplican a todas las tablas que tenga sentido, incluso aquellas que se llega por tabla extendida. Esto asegura la consistencia de los datos en cuanto a la integridad referencial, ya que por ejemplo no voy a tener una orden de compra de un cliente que no tengo.
  7. La creación de la base de datos offline se hace automáticamente cuando cambia la estructura de la base de datos. En realidad lo que se hace es generar los programas de creación, pero se ejecutan recién la primera vez que se corre la aplicación en el dispositivo.En la versión Beta 2 solo se genera la creación de la base, no hay reorganización. De todas formas, este create database solo se ejecuta la primera vez, o si hay una nueva versión de la aplicación que cambió la estructura de la base de datos ofline.En realidad, además de poder ejecutar el programa de reorganización, también se tiene la opción de mandar junto con la aplicación generada, un juego de datos que se toma como base de datos precargados. En ese caso lo que se hace es copiar esa base precargada en vez de ejecutar la creación.
  8. Algunas características de la base de datos local:La base de datos en el dispositivo es SQLite, tanto para Andorid como para iOS.No tiene integridad referencial en el manejador de base de datos, pero se controla la integridad por programa.Sí soporta integridad transaccional, y las transacciones son bloqueantes, es decir, solo un proceso puede tener una transacción abierta en un momento dato.
  9. Resumen ofline database, pasemos a ver la generacion de codigo.
  10. Como vimos, el escenario de aplicaciones offline requiere de poder ejecutar lógica en los dispositivos, y para eso necesitamos generar código nativo.El lenguaje a generar depende del dispositivo donde vaya a ejecutarse la aplicación, y es Java para Android y Objective-C para iOS.
  11. En las aplicaciones online no hay generación de código, es solo metadata que es interpretada por un “flexible client”.En las aplicaciones online, los eventos Start, Refresh y Load ejecutan siempre en el servidor. En Offline ejecutan en el cliente accediendo a datos locales.Los eventos de usuario siguen siendo interpretados, pero pueden llamar a otros objetos que ejecuten del lado del cliente.Los procedimientos y data providers que se llaman desde objetos offline, se generan también offline. Se pueden usar para acceder a datos pero también para ejecutar lógica en el cliente.Los Business Components se generan también offline.
  12. ¿Qué se puede hacer con el código generado? Básicamente lo mismo que se hace en las aplicaciones web: acceder a datos usando el comando for each, utilizar estructuras de control con toda su potencia (en eventos online hay un ‘if’ pero es bastante limitado), operaciones aritméticas (que antes se tenían que hacer en el servidor), usar funciones del lenguaje como ser substr() y variables predefinidas como por ejemplo &time.
  13. En el caso de las aplicaciones que tengan GAM, las credenciales de los usuarios se mantienen solamente en el servidor. De todas formas se pueden hacer aplicaciones offline que usen GAM.La pantalla de Login tiene que ser online, ya que no hay forma de autenticar al usuario estando desconectado.Una vez que el usuario inicia sesión, la aplicación sigue funcionando con las credenciales del usuario registrado.Se puede usar la API del GAM para obetener información del usuario, como ser su nombre, e-mail, identificador, etc. También se puede preguntar si es el usuario anónimo o un usuario registrado.Funciona por el momento solo con autenticación, no se tiene autorización porque implicaría llevarse todos los permisos del usuario al dispositivo.
  14. Hasta ahora vimos lo que es el objeto ofline database y las posibilidades que nos da el generar codigo del lado del dispositivo.
  15. Con esta funcionalidad que estuvimos viendo: la base de datos local, junto con la posibilidad de ejecutar código en el dispositivo, nos permite resolver algunos escenarios que no son exáctamente el planteado originalmente como escenario de aplicaciones offline.
  16. Un ejemplo de aplicaciones que se puede resolver con esta funcionalidad es el de las aplicaciones que funcionan siempre desconectadas.Estas aplicaciones no requieren de acceso al servidor, de hecho, el servidor puede no existir. GeneXus lo va a generar de todas formas, pero podemos no hacer el deploy de la base de datos y de la capa de servicios.Los datos de este tipo de aplicaciones pueden venir precargados, o pueden ser datos generados por el usuario.Un ejemplo que para mi es claro, es una aplicación de finanzas personales, donde el usuario registra sus gastos pero tiene toda la información local.
  17. Otro ejemplo pueden ser aplicaciones basadas en servicios. Son aplicaciones offline en el sentido que no necesitan del servidor y la base de datos generados por GeneXus, pero sí necesitan de servicios externos para funcionar por lo que necesitan de conexión a la red.Esto se puede lograr gracias a que al generar código en los dispositivos, podemos consumir servicios mediante el uso por ejemplo de HTTPClient.Los datos locales en este caso son opcionales. Podría por ejemplo tener una forma de guardar favoritos, o consultas recientes, o cualquier otra información que se necesite.Un ejemplo de este tipo de aplicaciones es Find My Plane, que es una aplicación para buscar información sobre vuelos en tiempo real. Esta aplicación era orignalmente online y los servicios de consulta de vuelos los consumía el servidor, pero ahora se pasó a Tilo y los servicios se consumen directamente desde el dispositivo.Otro posible ejemplo sería una aplicación para un banco, que no quiere que los datos pasen por un servidor centralizado, sino que quiere que la comunicación sea directamente con el dispositivo del cliente.
  18. Resumen generacion de codigo, vamos a ver la sincronizacion
  19. La sincronización de datos es fundamental en el escenario que planteamos, ya que los datos del dispositivo tienen que ser una vista de los datos del servidor, y las cosas que grabamos en el cliente se tienen que replicar en el servidor.
  20. La sincronización siempre la inicia el dispositivo, puede iniciar de forma automática o a pedido del usuario, pero siempre es desde el cliente.Tenemos dos operaciones que son independientes. La operación de Receive es desde el servidor al cliente, y la de Send desde el dispositivo al servidor. Es decir, la operación siempre es vista del lado del cliente.Vamos a ver más detalles de cada una.
  21. La sincronización la realiza el objeto Offline Database, para lo cual tiene algunas propiedades.Las tres primeras aplican al momento de recibir los datos, y la última al envío, recuerden que siempre visto desde el dispositivo.
  22. La recepción de datos se puede iniciar de forma automática o de forma manual.Esto se define mediante la propiedad Data Synchronization Criteria, y si es automática se va a sincronizar cada vez que se abre la aplicación, siempre y cuando haya pasado el tiempo que se indica en la propiedad Minimum Time Between Sinchronizations.Si es manual, entonces debe ser el programador GeneXus quien la invoque llamando al método Synchronization.Receive(). Tener en cuenta que “manual” significa que se tiene que iniciar de forma manual, pero los programas de sincronización igual se generan.Lo otro que podemos configurar es si es por tabla, o por registro. Esto se configura mediante la propiedad Data Synchronization Granularity. Si es por tabla, para las tablas que hayan cambiado desde la última sincronización, se manda toda la información de la tabla, se borra lo que había en el dispositivo, y se carga todo lo que vino del servidor.Si es por registro, entonces solo se van a mandar las diferencias que haya como una serie de inserts, updates y deletes.La primer opción, por tabla, tiene la ventaja que requiere menos procesamiento del lado del servidor. También tiene sentido si los datos cambian mucho entre una sincronización y la siguiente. Por registro requiere más cálculos en el servidor, pero puede significar mucho menos tráfico de datos.
  23. Cuando la sincronización es por registro, en el servidor se crean tres tablas auxiliares para guardar la información necesaria para poder calcular las diferencias.Lo que se tiene es para cada tabla que se sincroniza, un identificador de la versión de los datos que tiene el cliente. Este identificador es un hash de los datos de la tabla, por lo que antes de hacer nada se compara el hash que manda el cliente con el hash de los datos actuales en el servidor. Si son iguales termina ahí. Hasta acá es igual para la sincronización por tabla, solo que para esa opción no necesitamos las tablas auxiliares.Si son distintos, entonces se pasa a comparar por registro. El servidor tiene almacenados los registros que corresponde a la versión de los datos que tiene el cliente, por lo que puede calcular las diferencias con lo que hay en ese momento en la tabla. Con las diferencias se arma lo que se le manda al cliente, y a su vez se hace un nuevo hash de la tabla y se guarda ese hash junto con los datos que tiene en el momento, para poder sincronizar la próxima vez.
  24. Vamos a ver un ejemplo para que quede mas claro.Supongamos que tenemos una tabla de clientes, inicialmente en el dispositivo esta vacia y en el servidor tengo dos registros.El dispositivo pide sincronizar, entonces el servidor calcula el hash de la tabla, manda los datos junto con el hash al cliente donde queda guardada la informacion, pero ademas se guarda esa informacion en las tablas auxiliares que les mensionaba.Pasa el tiempo, los datos en el servidor cambiaron como vemos, se modifico el registro 1, se borro el 2 y se ingreso uno nuevo con id 3. El cliente pide nuevamente sincronizar, pero esta vez como tiene datos, manda el hash de la tabla.El servidor calcula el nuevo hash, los compara, ve que son distintos, y entonces busca en las tablas auxiliares cuales eran los datos que correspondian al hash del dispositivo, y calcula las diferencias.En este caso le da un insert, un update y un delete.Manda esa informacion al cliente junto con el nuevo hash, y luego de aplicarlo el cliente queda con la misma informacion que el servidor. Ademas se guarda el hash para la proxima sincronizacion.
  25. Los datos que se mandan al dispositivo pueden filtrarse como ya vimos, mediante el uso de las conditions del objeto Offline Database.Estos filtros se aplican antes de calcular el hash de la tabla y antes de hacer las comparaciones necesarias en la sincronización por registro, ya que los datos que no cumplan con las condiciones no pueden ir nunca al dispositivo.No se tiene regla parm, pero igual se pueden usar algunos parámetros para filtrar, como ser información del dispositivo (identificador, idioma, etc.) o el identificador del usuario en el caso que se use GAM.
  26. Pasemos ahora a ver el envío de datos desde el dispositivo al servidor.Lo primero, es que solo se mandan al servidor las operaciones que se graben mediante business components. Si se graban datos con el comando new o se actualizan mediante un for each, esos datos no van al servidor.Esto es así porque lo que sabemos manejar del lado del servidor son business components, a los cuales se les aplican todas las reglas de la transacción, igual que si se estuviera trabajando en una aplicación online.En el dispositivo se crea una tabla auxiliar, donde se graba para cada operación que se hace mediante un business component, información de a que business component corresponde, el tipo de operación si es insert, update o delete, los datos del business component, y alguna información más que necesitamos para sincronizar como ser el estado en que está el registro y los mensajes de error en el caso que haya ido al servidor y no se haya podido aplicar.
  27. El momento en que se envían los datos al servidor depende de la propiedad Local Changes Processing del objeto Offline Database.Los valores posibles son When Connected, que quiere decir que los datos se van a mandar inmediatamente si se tiene conexión y si no, tan pronto como se recupere la conectividad.La otra opción es User Defined, que quiere decir que nunca se van a mandar datos de forma automática, sino que el programador debe realizarlo mediante una invocación al comando Synchronization.Send()
  28. Un problema que surge con el envío de los datos al servidor, es qué pasa con las claves que son autogeneradas. Pueden ser campos con autonumber, atributos clave de un segundo nivel con una regla serial, o una clave que se calcule mediante un procedimiento.Estas claves ademas son usadas como foreign key en otras tablas.Cuando se manda el insert de un registro con clave autonumerada al servidor, es casi seguro que va a quedar con distinto numero en el servidor. Vamos a ver un ejemplo para que quede mas claro.
  29. Supongamos que se ingresa en el dispositivo un cliente, que tiene clave autonumber y queda con id 1. Para ese cliente se ingresa una factura, que hace referencia el cliente con id 1.Cuando se mandan los datos al servidor, el servidor hace el insert del cliente primero, y obviamente cambia de valor el identificador del cliente, porque en el servidor se graba calcula de nuevo. La factura tiene que seguir siendo de ese cliente, por lo que en la grabación se tiene que actualizar el identificador del cliente en la factura, que luego se graba con el cliente correcto.Esto se hace así de forma automática, pero además se manda al dispositivo el mapeo de claves que se hizo en el servidor para que quede actualizado también en el dispositivo. De esa forma, si más tarde ingreso otra factura para ese cliente, los datos van a ir bien y va a quedar la factura asociada al cliente correcto.
  30. Puede pasar que cuando mando un business component al servidor, el mismo no se pueda grabar por algún motivo. Por ejemplo, cambio algún dato relacionado como el límite de crédito del cliente, y la venta no se puede ingresar.En ese caso, el business component no se borra de la tabla auxiliar, sino que se marca como que tiene error y quedan los mensajes del servidor para poder verlos en el dispositivo. Tampoco se vuelve a mandar automátcamente.Para poder acceder a estos datos, se cuenta con una API que permite consultar los registros pendientes de envío y los que se enviaron pero quedaron con error. Los que se enviaron y se procesaron bien se borran directamente.Una de las cosas que permite hacer la API es reenviar una operación que dio error, con la misma información con que se envió originalmente, por lo que el problema debe resolverse antes del lado del servidor.
  31. Bueno, con esto completamos los cuatro temas de la charla. Muchas gracias, y solo me resta decirles que todo esto que estuvimos viendo va a estar disponible en la versión Beta 2 de GeneXus Tilo, e incluso ya lo pueden ir probando en los night builds disponibles hoy.