viernes, 1 de febrero de 2013

Transacciones Multinivel en Smart Devices.


Las transacciones de múltiples niveles para aplicaciones Smart Devices (SD), se manejan un poco distinto que en las aplicaciones web o windows. Veremos a continuación, como manejar estos casos.

El problema:

Supongamos que queremos modelar que tenemos Personas, de las cuales se quiere conocer sus pesos (kg) por fecha. Decimos entonces que tenemos una Transaccion llamada "Persona" y un sub-nivel que corresponde a todos sus pesos en determinadas fechas, de la forma:











La solución:

Como en SD no podemos tener explícitamente declarar la transacción de varios niveles, lo que debemos hacer es emular ese comportamiento mediante la creación de varias transacciones independientes.
Para este caso, seria de la siguiente forma:









Y la transacción Peso, de la siguiente forma:



Como podemos observar en la transacción Peso, asignamos como clave primaria, la compuesta de los atributos PersonaId y PesoFecha. De esta forma generamos las mismas tablas en la base de datos y mismo comportamiento que en la transacción original de múltiples niveles, pero en este caso adaptada para correr correctamente en Smart Devices.

Luego, aplicamos el pattern WorkWith Smart Devices a ambas transacciones.
Podremos ver que la Transacción Persona, se nos crea con 2 Sections:



Entramos en la Section (Peso) y procedemos a agregarle un boton "Agregar Peso" en el Action Bar, el cual codificaremos de la siguiente forma:





Este botón llamara a la Transacción Peso en modo Insert para agregarle valores de peso a cada Persona.
Finalmente, solo resta crear un DashBoard con un action sobre el WorkWithDevicesPersona, y F5.

Este es 1 ejemplo de como se pueden manejar estos casos, hay varias formas y depende del escenario que se quiere resolver cual es la mejor manera de hacerlo.






10 comentarios:

  1. Hice este ejemplo paso a paso, y no me funciono
    Si me puede por favor enviar o contactar a:
    aemirandas@gmail.com

    Nota: Estoy trabajando con Tilo 8como beta tester y mi app es ofline, es decir usa SQLite) pero creo que el funcionamiento deberia ser igual al que se menciona en este ejemplo

    ResponderEliminar
  2. Buenos días Abdel, podrías ser mas especifico en cuanto a que es lo que no te funciona?
    Muchas gracias por tu tiempo y tu comentario, espero respuesta.
    Saludos cordiales.

    ResponderEliminar
    Respuestas
    1. Hola Martin, a mi también no me funcionó, o sea accedendo la WWSD via web si funciona pero en la APP no funciona no carga el PersonaId con el valor de origem.

      Eliminar
  3. Hola, como se puede programar para que automáticamente se agregue el código de la transacción superior. Gracias

    ResponderEliminar
  4. Entendi o caso, mas e como fica a tela para uso na web ?

    ResponderEliminar
  5. Buen Post! Sabes si para Ev3. se solucionó esto? porque tengo dos transacciones una dentro de otra y cuando genero en SD no anda ni para atras!

    ResponderEliminar
    Respuestas
    1. Osea son 2 transacciones por ejemplo. Dado una Transaccion PARQUE varias PERSONAS limpian tal parque en determinadas horas. Dependiendo el parque.

      Eliminar
  6. Hola, a mi no me funciona ése metodo, tienes otro método para enviar datos en el insert()?

    ResponderEliminar
  7. Y como se podrian listar? si quiero verlas en el mismo grid?

    ResponderEliminar
  8. Buenas soy nuevo en Genexus, uso la versión 16, si me podrían ayudar a cómo resolver la transacción de 2 niveles con un ejemplo , estoy desarrollando un pequeño control de inventarios en cual el producto maneja varios almacenes y no he podido agregarlos en la parte móvil, gracias .

    ResponderEliminar