Tuesday, September 25, 2012

PowerBuilder y Gateway - Al estilo de Sinatra

El otro dia estaba jugando con la idea de consumir Gateway desde PowerBuilder...asi que por supuesto, intente muchas cosas como leerlo como un WebService o un servicio REST...ninguna funciono puesto que Gateway genera OData.


Hace unos dia lei un asombroso blog escrito por Mark Bradley llamado Gateway over PowerBuilder donde el estaba utilizando un OData Service DataWindow...el cual no encontre en mi IDE de PowerBuilder...Me contacte con Mark y me dijo que estaba usando una version "not released yet" de PowerBuilder, asi que mi nueva meta era conseguir una nueva forma de conectar PowerBuilder y Gateway usando lo que tenia a la mano...

Intente muchas cosas mas...incluyendo el WCF Data Services for OData que no funciono para nada...

Pero como parte de mi trabajo es romperme la cabeza tratando de hacer las cosas mas locas y excitantes...decidi optar por otro camino...

Recorde que ruby_odata es capaz de consumir Gateway, puesto que yo fui uno de los que participo en el proyecto Ruby, Camping and...Gateway? (Perdon...voy a corregir el codigo apenas pueda...post viejo)

Luego me entere de que Sinatra el WebFramework de Ruby con clase es capaz de exponer la data como un servicio REST (Necesitas instalar el gem de JSON)...asi que todas las piezas caian por su propio peso...

Escribi un pequenho script Ruby/Sinatra para leer de Gateway (Para este ejemplo, hice el servicio anonimo...para evitar escribir mucho)...por si acaso...lo llame Sinatra_JSON.rb


Luego de ejecutarlo, puedo revisarlo en mi broswer...


Con esto listo...me podia mover a PowerBuilder...crear una Solution --> Target (Especifica que quiere una ventana en el inico) --> y luego creamos un cliente RESTFUL.





Luego de eso, necesitamos generar el Proxy...


Y crear un Grid DataWindow...


Necesitamos definir las columnas que vamos a extraer y mostrar en nuestra ventana.


Creamos un DataWindow dentro de nuestra Window (w_window) y un boton. Hacemos drag & drop del Grid DataWindow en nuestro DataWindow.


Hacemos doble click en el boton y pegamos el siguiente codigo...


Vamos a la aplicacion y hacemos doble click, pegamos este codigo...


Estamos listos para ejecutar nuestro programa, y presionar el boton "Call Flights"...


Funciona! Asi que hagamos un recuento...leemos el servicio Gateway utilizando Ruby_OData y lo exponemos como un servicio REST utilizando Sinatra. En PowerBuilder creamos un cliente REST, y consumimos el servicio REST de Sinatra y lo mostramos en un Grid DataWindow...

Espero que les guste...hasta el momento...pienso que es la mejor manera de hacer trabajar a PowerBuilder y Gateway hasta que podamos poner nuestra manos en el ultimo release de PowerBuilder.
La unica desventaja, es que necesitamos pasar los parametros estaticamente en vez de pasarlos dinamicamente...bueno...quizas la proxima vez...

Saludos,

Blag.

No comments: