viernes, 22 de febrero de 2013

Campos con "Visible" dinámico, no ocupan espacio en el Layout cuando se ocultan.


El objetivo de este tip, es explicar como hacer cuando tenemos un campo (variable o atributo) en un panel SD, con la propiedad "Visible = false", éste no ocupe espacio en el layout, y cuando la hacemos visible nuevamente (mediante un evento de usuario por ejemplo), aparezca en su espacio correspondiente.
Este ejemplo solo es valido para iOS.

viernes, 15 de febrero de 2013

Lista y filtro, todo en el mismo panel

En nuestras aplicaciones generalmente si tenemos un listado de datos, vamos a necesitar filtrar los mismos de alguna manera. A su vez, al desarrollar aplicaciones para Smart Devices con GeneXus, se nos presenta la duda de como implementar un panel (Panel for Smart Devices, Work With for Smart Devices) que contenga una grilla con datos y un filtro sobre los mismos, todo en la misma pantalla!

Ya habiamos visto anteriormente una solución de este tipo, veamos ahora paso a paso como implementar un ejemplo bien simple:

viernes, 8 de febrero de 2013

Sacar Fotos o elegir desde Biblioteca

Hasta ahora la única manera de enviar imágenes desde un dispositivo al servidor es mediante un atributo de tipo Image en una transacción dentro de un Work With for Smart Devices.
Cuando tenemos un atributo de tipo Image logramos tener el siguiente picker:



Luego de elegirlo confirmamos la transacción y eso lo lleva al servidor.
Pero no siempre queremos enviar imágenes desde una instancia de un Work With for Smart Devices.
Para resolver esto tenemos dos objetos Externos que nos permiten interactuar con dos recursos de nuestros dispositivos:


Podríamos llegar a tener las siguientes opciones en pantalla para poder enviar una imagen al servidor.



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.