jueves, 24 de enero de 2013

Llamar ventanas como popups en aplicaciones Smart Devices

Muchas veces, ya sea por razones estéticas o de funcionalidad de nuestra aplicación para Smart Devices, queremos ejecutar algún panel en una ventana emergente (popup).

La aplicaciones para Smart Devices generadas con GeneXus, de forma predeterminada, utilizan ventanas emergentes cuando se llaman transacciones (BC) para ingresar o modificar datos. La idea es utilizar esta caracteristica para extender la posibilidad de utilizar popups en  cualquier tipo de panel.

Por ejemplo, en la aplicación del XXII Encuentro Internacional GeneXus, se deseaba mostrar el panel de la opcion About en un popup, de la siguiente manera:


¿Cómo se hizo eso? Fácil, y en pocos pasos:
  • Se creó una transacción Dummy a la cual se le aplicó el pattern Work With for Smart Devices. Esta transacción alcanza con que tenga solamente un atributo y podemos si queremos incluso impactar el modelo de datos sin reorganizar fisicamente la base de datos, ya que esta nueva transacción no nos interesará más allá de se un elemento auxiliar para poder implementar los popups.

  • En dicho Work With for Smart Devices Se agregó en el Layout para el modo Edit, el diseño que se tenía definido para dicho panel.
  • Finalmente, se agregó la llamada al panel de About, llamando al Detail de la transaccion Dummy en modo Insert. De esta manera logramos que el mismo se despliegue a través de un popup.

    Event 'About'
       WorkWithDevicesTrnDummy1.TrnDummy1.Detail.Insert()
    EndEvent
De esta manera logramos tener la funcionalidad buscada. Cómo desventaja, vamos a tener una transacción extra en nuestro modelo para la cual se generarán los servicios REST para utilizar el pattern Work With for Smart Devices, pero como vimos, no es necesario impactar el modelo de datos y estos servicios "extras" generados no implicarán un impacto significativo en la aplicación.

2 comentarios:

  1. Hola Fabian.

    ¿Esto es solo para iOS/iPad? Estoy probando en Android y cuando llamo al Detail.Insert se abre a pantalla completa. Por otro lado ¿es posible pasarle parámetros al popup?

    Gracias.

    ResponderEliminar
    Respuestas
    1. Javier, ¿cómo estás?
      La funcionalidad del popup asi como se describe en el articulo, está disponible solo para iOS.
      Igual, no deja de ser una especie de workaround. Estamos trabajando ya sobre una nueva funcionalidad que permita indicar como querés desplegar un panel, entre las que se incluye llamarlo como popup.
      Sobre los parámetros, al ser un Insert no se ejecutan los eventos del sistema (Start, Refresh) por lo que la unica forma sería a través del BC.
      No lo llegué a probar, pero lo que haría sería en esa transaccion Dummy incluir un atributo del tipo de parametro que quiero, y luego llamar al popup asi:

      &BC.Atributo = Valor
      WorkWithDevicesTRNDummy1.TrnDummy1.Detail.Insert(&BC)

      Se entiende?
      Cualquier duda que te haya quedado avisame.

      Saludos.

      Eliminar