#GX3198
Aplicaciones Offline para
Smart Devices
Leonardo Piñeyro
Production Team, GeneXus
Arquitectura y desarrollo con Ge...
#GX23
¿Offline?
#GX23
Offline
¿Por qué?
#GX23
Offline: Escenarios
‣App de finanzas personales
‣Fuerza de ventas: Sales force
‣App de eventos
#GX23
Offline
Arquitectura
Offline: Arquitectura
Device
•UI: Layouts, UserControls
•Local Actions
KBKB
Build online HTTP - REST Services (json)
Web S...
Offline: Arquitectura
Device
•UI: Layouts, UserControls
•Local ActionsKBKB
Build offline
Web Server
•Procedures, Data Prov...
#GX23
Desarrollo de aplicaciones
offline con GeneXus
#GX23
Requerimientos
Desarrollo con GeneXus
#GX23
No funciona con KBN
Desarrollo con GeneXus
Requerimientos
Los mismos requerimientos que para generar
aplicaciones On...
#GX23
Desarrollo con GeneXus
Connectivity Support Property
#GX23
‣Online
‣Offline
‣Inherit
Desarrollo con GeneXus
Connectivity Support Property
Desarrollo con GeneXus
Connectivity Support Property
#GX23
Desarrollo con GeneXus
Offline Database Object
Desarrollo con GeneXus
Offline Database Object
Dashboard
WWSD
Sessions
WWSD
Speakers
WWSD Tweets
Session Speaker Tweet
ConnectivitySupport: Offline
Offline
Database
Desa...
Dashboard ConnectivitySupport: Offline
ConnectivitySupport: Online
WWSD
Sessions
WWSD
Speakers
WWSD Tweets
Session Speaker...
#GX23
#GX23
Sincronización
#GX23
Sincronización
Network API
#GX23
Sincronización
Network API
NetworkAPIConnectionStatus
Domain
Name Description Value
None None 0
Wifi Wifi 1
WAN WAN ...
#GX23
Sincronización
Sincronización Manual
Sincronización
Sincronización Manual
#GX23
Sincronización
Synchronization API
#GX23
Sincronización
Synchronization API
Receive(): Recibe un subconjunto de datos desde el servidor.
Send(): Envía los da...
Sincronización
Synchronization API
#GX23
Sincronización
Sincronización Automática
#GX23
Sincronización
Sincronización Automática
Data Synchronization Criteria property
ManualAutomatic
Minimun Time Between...
Sincronización
Sincronización Automática
#GX23
Demo
Demo
Sincronización
#GX23
De Online a Offline
De Online a Offline
#GX23
GENEXUS
OPORTUNIDADES
APLICACIONES OFFLINE
PARA SD
IDEAS!
#GX23
¡GRACIAS!
lpineyro@genexus.comLeonardo Piñeyro
@leopiney#GX3198
Upcoming SlideShare
Loading in …5
×

067 aplicaciones offline_sd_arquitectura_y_desarrollo_con_genexus

462 views
371 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
462
On SlideShare
0
From Embeds
0
Number of Embeds
232
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • Quería contarles una anécdota de app de Finanzas que usaba para manejar Ingresos y Egresos de dinero de mis cuentas. Estaba muy completa, muy prolija, era la primer app de este tipo que usaba, pero hasta que, un día estaba en bus volviendo a casa y no funcionó, y era porque no tenía conexión en mi dispositivo, y ahí me dí cuenta que por lo menos a mí esta aplicación no ya me servía, porque no podía estar pendiente todo el tiempo de tener conexión para poder usar la aplicación, lo esperado era que pudiera ingresar registros en cualquier momento y de cualquier forma y luego, si tengo conexión, poder sincronizar con mi usuario en el servidor si fuese necesario. Quería comentarles esta historia porque creo que viene al tema de este tema que estamos llamando Aplicaciones offline
  • Entonces ¿A qué nos estamos refiriendo cuando hablamos de offline? “ Offline” no significa “siempre se trabaja sin conexión” , sino que estamos más especificamente hablando de “Aplicaciones eventualmente conectadas”. Funcionan en cualquier momento, y cuando se vuelven a conectar puede cambiar el flujo o la disposición de otras funcionalidades de la aplicación. Pero nos viene la siguiente pregunta
  • Por qué? Cómo surge esto? Para qué queremos aplicaciones que funionen en estos escenarios? Si bien las posibilidades de estar conectado a internet desde nuestros Smart Devices es más común día a día ya sea por la accesibilidad de contratar servicios 3G, o el aumento de lugares con wifi, existen escenarios donde la no-conectividad es una posibilidad y es bueno que adaptar nuestras aplicaciones para que puedan seguir funcionando de manera productiva: Que se puedan hacer Alta-Baja-Modificación sin depender de un servidor Web. Porque al usuario final le resulta mucho más cómodo, no tiene que estar pendiente de su conexión cuando usa una aplicación.
  • Aquí les presento algunos escenarios básicos de estas aplicaciones. 2 - Destaco el escenario Point of sales, en el cual tenemos como ejemplo la aplicación de Conaprole. Aquí es una necesidad que funcione sin conexión pues si no puedo generar registros en algún momento es una ganancia que estoy perdiendo. 3 - Aplicación de eventos, como la que muchos de ustedes deben tener en sus dispositivos Android o iOS, no es necesario tener conexión para ver las charlas si ya tienen la aplicación sincronizada. Cuando se conecten de vuelta su aplicación se puede sincronizar por cambios hechos en el servidor en cualquier momento.
  • Pasemos brevemente a ver cómo se modelan este tipo de aplicaciones
  • Hasta ahora teníamos esta arquitectura para la creación de aplicaciones Online. Componentes ruby, C# o java para manejar el servidor web, hay componentes de bases de datos, redes, servicios, manejo de Json, y generación de código nativo para los dispositivos ya sean Android e iOS. Hay mucha técnología de fondo en todo este tema.
  • Cuando queremos modelar aplicaciones Offline nos queda de esta forma. La aplicación tiene su propia base de datos Lo que quiero destacar de este modelo es que ahora nuestros generadores SD están creando toda la lógica que teníamos en nuestro servidor web también en el dispositivo usando código nativo.
  • Con la estructura en mente de lo que queremos hacer pasamos a cómo enfrentarnos con este tipo de problemas utilizando GeneXus. Quiero que vean de verdad lo fácil que es esto.
  • La generación de aplicaciones offline para SmartDevices está soportada a partir de la versión Tilo de GeneXus y está disponible para los generadores Android e iOS
  • Es importante mencionarles que para generar aplicaciones Offline estamos generando más código nativo. Por lo que, a diferencia de cuando prototipabamos aplicaciones Online utilizando la aplicación Knowledge Base Navigator, ahora es necesario tener la aplicación instalada en un dispositivo para poder utilizarla. Por lo que no funciona una aplicación Offline con KBN
  • Para soportar la generación de aplicaciones Offline con GeneXus , existe una nueva propiedad a nivel de objetos en GeneXus la cual se llama Connectivity Support Property: Esta propiedad aplicada le indica al Generador si el objeto a generar va a tener comportamiento Online o Offline básicamente. Para eso la propiedad tiene 3 posibles valores:
  • Online : Como se viene usando desde el Upgrade 2 , la aplicación se comunica únicamente con el servidor utilizando servicios Rest o HTTP Offline : Le da la pauta al generador de que la aplicación va a poder funcionar en ambientes de conectividad limitada o nula. La aplicación siempre se va a conectar con la base de datos interna al dispositivo. Inherit : Hereda la propiedad del objeto main que empezó el árbol de llamadas hasta el objeto. Nos vamos a centrar ahora en la propiedad Offline obviamente.
  • Así es como empezamos el camino para generar nuestra aplicación offline para SmartDevices, simplemente eligiendo la opción Offline sobre el objeto Main de nuestra aplicación. Qué debemos hacer luego? Debemos compilar el objeto main con Connectivity Support Offline, y GeneXus va a hacer un análisis de impacto de tablas y elige qué tablas que van a quedar en la Base de datos Interna del dispositivo.
  • Entonces luego de compilar objeto main que tiene Connectivity Support en Offline, GeneXus genera un nuevo objeto OfflineDatabase asociado al objeto main.
  • Aquí tenemos cómo se muestra el objeto en el IDE y el análisis de impacto luego de hacerle build al objeto main con Connectivity Support en Offline. En esta KB de ejemplo tenemos 4 tablas, y las tablas que se GeneXus eligió son todas porque el objeto Main tiene referencias a estas tablas.
  • Cómo sabe que tablas elegir? Según las referencias mediante objetos offline a tablas que tiene el objeto main. Se crean todas las tablas referenciadas y sus tablas extendidas. Acrordarse de que los demás objetos tiene ConnectivitySupport en inherit por defecto Es posible tener desde nuestra aplicación acceso a todas las secciones indicando cuales de ellas se estarán disponibles offline y cuales no utilizando la propiedad Connectivity Support
  • Es este ejemplo vamos a ver qué pasa cuando existen objetos con diferentes valores en la propiedad ConnectivitySupport. Esta opción de elegir que información va a estar o no disponible offline nos da la libertad de decidir qué partes de nuestra aplicación van a poder funcionar offline o no. También tiene la opción de agregarle condiciones, con esto podemos decidir qué registros queremos que se guarde en la base de datos offline y que registros no. Un ejemplo básico puede ser que guarde únicamente los registros recientes, de hace una semana por ejemplo. De esta forma contenemos en nuestro dispositivo solo un subconjunto de todo lo que podría ser el servidor, que en ocasiones puede ser muy grande.
  • Bueno hasta aquí podríamos decir que ya tenemos la aplicación Offline lista para generar . Y a es ejecutable en sus dispositivos , se puede hacer Alta/Baja y Modificación de registros estando desconectado. Pero nos está faltando el último y quizas más importante elemento de las aplicaciones de este tipo que es la sincronización
  • La sincronización es una funcionalidad fundamental en este tipo de aplicaciones . En este paso vamos a decidir qué pasa cuando modificamos o agregamos registros en nuestro device estando offline, y luego nos conectamos. Qué pasa con esos registros nuevos? Por el otro lado, mientras estaba offline, se pudieron agregar registros nuevos en el servidor, por lo que yo quisiera t ener actualizada mi base de datos al volverme a conectar .
  • Para empezar con la sincronización , debemos primero saber en que estado de conectividad se encuentra el dispositivo. Para ello introducimos una nueva API, llamada NetworkAPI
  • La NetworkAPI cuenta con un dominio nuevo llamado NetworkAPIConnectionStatus el cual cuenta con 3 valores 0,1 y 2 para indicar conectividad Nula, wifi o WAN respectivamente. A su vez tenemos la propiedad ApplicationServerURL que nos devuelve la propiedad ServiceURL que está a nivel de el Generador de Smart Devices. Y los métodos IsServerAvailable, que nos da verdadero si el ServiceURL está accesible Y el método Type que nos dice en qué estado de conexión se encuentra el ServiceURL
  • Usando la Network API es posible ahora saber cuándo uno puede o no sincronizar con el servidor. Cómo logramos hacer la sincronización?
  • Es posible el uso de Procedimientos y DataProviders expuestos como WebServices o servicios REST. Y programar manualmente toda la lógica de sincronización de las tablas del Device con las tablas del servidor. Para los que tengan su propio mecanismo de sincronización quiero que sepan que es posible, pero para aquellos que no quieran pasar trabajo, GeneXus tiene una nueva API llamada Synchronization
  • Esta API nos va a ahorrar horas y horas de programación sobre el tema de sincronización.
  • Synchronization API tiene dos métodos RECEIVE(): Los datos son definido por las conditions del objeto OfflineDatabase del main object. SEND(): Los datos que el dispositivo envia al server corresponden a todos los Business Components salvados desde el último envío. Las actualizaciones realizadas mediante procedimientos no son enviadas.
  • Estos métodos hacen la sincronización hacia los dos lados automáticamente, de todas formas, lo seguimos llamando Sincronización Manual, por qué? Porque es el desarrollador que indica cuándo realizar la sincronización. Y capaz que ahora alguien se está preguntando, puede ser más fácil que escribir 7 líneas? tengo que escribir 7 lineas de código para hacer toda la sincronización entre cada una de las tablas de mi dispositivo y las del servidor, teniendo cuidado con las modificaciones que se hicieron, contemplando problemas de sincronización como el tema de los registros con atributos identificadores, entre una infinidad de cosas mas? Puede ser más fácil? Y la respuesta es sí.
  • GeneXus, a partir de la versión Tilo Beta2 que será liberada a fines de Octubre, tiene incluido propiedades que hacen que ustedes no tenga que hacer nada para que su dispositivo se sincronice con el servidor.
  • Tenemos esta propiedad, que está en las propiedades del objeto OfflineDatabase que nos va a ahorra más horas y horas de desarrollo. Data Synchronizaction Criteria Por defecto en Automatic, deja habilitada otra propiedad llamada Minimun time between Synchronizations con la cual especificamos cada cuántos segundos se va a sincronizar nuestro dispositivo con el servidor. En definitiva, se van a ejecutar los mismos métodos Receive() y Send(), de forma automática en un intervalo especificado por la propiedad Minimun time Between Syncronizations.
  • Les quise presentar el tema de sincronización de esta manera, porque la verdad quiero que se lleven esto, quiero que vean lo fácil que es aplicar esta funcionalidad en nuestra aplicación, básicamente, una vez más con GeneXus estos problemas gigantes ser resuelven activando una propiedad sobre un objeto determinado. Es tan simple que hasta la propiedad por defecto es Automatic, o sea que únicamente cambiando la propiedad ConnectivitySupport del objeto main a Offline, ya queda su aplicación funcionando Offline, y con sincronización automática integrada, sincronizándose cada 600 segundos
  • Ahora quería presentarles una demostración de cómo funciona la sincronización:
  • Por último pasemos a ver cómo pasar una aplicación que ya tienen Online a Offline.
  • Para empezar, lo primero que deberían hacer es cambiarle la propiedad ConnectivitySupport del main object de su aplicación a OFFLINE Y bueno ahí tienen ya su aplicación funcionando Offline. Qué quiero decirles con esto? La versión Tilo de GeneXus está todavía en fase beta, y con esto pueden sin ningún problema desarrollar sus aplicaciones usando GeneXus Evolution 2. Lo único que tienen que hacer es configurar las popiedades Connectivity Support de los objetos que concideren que se van a ejecutar Offline o Online. El resto lo hace GeneXus automáticamente.
  • Quiero que de verdad se lleven esto en mente, que es con GeneXus esto es muy fácil, estamos hablando de solucionar problemas enormes cambiando el valor de una propiedad de un objeto. Hacer todo esto de otra forma llevaría mucho trabajo y tiempo. Por el otro lado si ya tienen sus aplicaciones funcionando Online pasarlo a Offline es igual de simple. Así que los invitamos a que le presten atención a este tema, puede ser un componente muy importante o esencial para sus aplicaciones. Quiero que se vayan sabiendo que esto les da nuevas oportunidades a ustedes porque habilita nuevos escenarios a cubrir. Quiero que tengan en mente que con Genexus se puede todo esto. Y quiero que sepan que con todo esto y sus ideas, con respecto a SmartDevices ahora tienen todo para hacer la diferencia. Muchas gracias y cualquier consulta espero que los pueda ayudar
  • CallToAction(&Gracias)
  • 067 aplicaciones offline_sd_arquitectura_y_desarrollo_con_genexus

    1. 1. #GX3198 Aplicaciones Offline para Smart Devices Leonardo Piñeyro Production Team, GeneXus Arquitectura y desarrollo con GeneXus @leopiney
    2. 2. #GX23 ¿Offline?
    3. 3. #GX23 Offline ¿Por qué?
    4. 4. #GX23 Offline: Escenarios ‣App de finanzas personales ‣Fuerza de ventas: Sales force ‣App de eventos
    5. 5. #GX23 Offline Arquitectura
    6. 6. Offline: Arquitectura Device •UI: Layouts, UserControls •Local Actions KBKB Build online HTTP - REST Services (json) Web Server •Procedures, Data Providers •Business Components •Oracle •MSSQL •MySQL •Db2 •etc
    7. 7. Offline: Arquitectura Device •UI: Layouts, UserControls •Local ActionsKBKB Build offline Web Server •Procedures, Data Providers •Business Components SQLite
    8. 8. #GX23 Desarrollo de aplicaciones offline con GeneXus
    9. 9. #GX23 Requerimientos Desarrollo con GeneXus
    10. 10. #GX23 No funciona con KBN Desarrollo con GeneXus Requerimientos Los mismos requerimientos que para generar aplicaciones Online
    11. 11. #GX23 Desarrollo con GeneXus Connectivity Support Property
    12. 12. #GX23 ‣Online ‣Offline ‣Inherit Desarrollo con GeneXus Connectivity Support Property
    13. 13. Desarrollo con GeneXus Connectivity Support Property
    14. 14. #GX23 Desarrollo con GeneXus Offline Database Object
    15. 15. Desarrollo con GeneXus Offline Database Object
    16. 16. Dashboard WWSD Sessions WWSD Speakers WWSD Tweets Session Speaker Tweet ConnectivitySupport: Offline Offline Database Desarrollo con GeneXus Offline Database Object
    17. 17. Dashboard ConnectivitySupport: Offline ConnectivitySupport: Online WWSD Sessions WWSD Speakers WWSD Tweets Session Speaker Tweet Offline Database Desarrollo con GeneXus Offline Database Object
    18. 18. #GX23
    19. 19. #GX23 Sincronización
    20. 20. #GX23 Sincronización Network API
    21. 21. #GX23 Sincronización Network API NetworkAPIConnectionStatus Domain Name Description Value None None 0 Wifi Wifi 1 WAN WAN 2 IsServerAvailable():boolean Method Type():NetworkAPIConnectionStatus Method
    22. 22. #GX23 Sincronización Sincronización Manual
    23. 23. Sincronización Sincronización Manual
    24. 24. #GX23 Sincronización Synchronization API
    25. 25. #GX23 Sincronización Synchronization API Receive(): Recibe un subconjunto de datos desde el servidor. Send(): Envía los datos del dispositivo al server.
    26. 26. Sincronización Synchronization API
    27. 27. #GX23 Sincronización Sincronización Automática
    28. 28. #GX23 Sincronización Sincronización Automática Data Synchronization Criteria property ManualAutomatic Minimun Time Between Synchronizations
    29. 29. Sincronización Sincronización Automática
    30. 30. #GX23 Demo
    31. 31. Demo Sincronización
    32. 32. #GX23 De Online a Offline
    33. 33. De Online a Offline
    34. 34. #GX23 GENEXUS OPORTUNIDADES APLICACIONES OFFLINE PARA SD IDEAS!
    35. 35. #GX23 ¡GRACIAS! lpineyro@genexus.comLeonardo Piñeyro @leopiney#GX3198

    ×