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.




El problema...

...es que mediante un procedimiento expuesto como servicio rest no podemos enviar una imagen por parámetro. Esto tiene varias razones que no son el objetivo de este post.
Entonces no podríamos enviar al server las imágenes que tomemos con la cámara o que elijamos de nuestra liberaría.

¿Como podemos hacerlo?
Vamos a utilizar los servicios automáticamente generados de los BC para enviar imágenes.

1. Crear una Trn que tenga al menos un atributo Image
2. Crear el siguiente SDPanel:

Layout:


Variables:


ImageTrn   --> Variable basada en BC de la TRN del paso 1.
imgChooser --> Variable de tipo Image


Eventos:


Event 'Take Picture'
Composite
&imgChooser = CameraAPI.TakePhoto()
&ImageTrn.ImageTrnImage = &imgChooser
&ImageTrn.Save()
EndComposite

Endevent

Event 'Choose From Library'
Composite
&imgChooser = PhotoLibraryAPI.ChooseImage()
&ImageTrn.ImageTrnImage = &imgChooser
&ImageTrn.Save()
EndComposite
Endevent


Nota:
Esto funciona en iOS a partir del Upgrade 2 y en Android a partir del Upgrade 3, de GeneXus X
Evolution 2.

4 comentarios:

  1. Olá Franklin, parabéns pelo post!

    No exemplo vc não utiliza o Load no BC ou o commit, até pq não da para utilizar o commit na trn, então como posso especificar a chave do BC em SD. Tentei aqui mais recebo a mensagem "os dados com a chave especificada não foram encontrado"... desde já agradeço.

    ResponderEliminar
  2. Hola, estoy actualmente con la versión Ev3 U3 build 90655, y estoy precisando en un sdpanel cargar una imagen en una variable y pasarla al server de alguna manera, hay actualmente alguna forma más natural sin usar un BC?

    Gracias!
    Laura.

    ResponderEliminar
  3. Me da error este renglon &ImageTrn.ImageTrnImage = &imgChooser ya que me dice que la propiedad ImagenTrnImagen esta mal. No existe

    ResponderEliminar
  4. Tambien me da error con la funcion save. Saludos

    ResponderEliminar