Monday, November 16, 2015

SAP HANA en las garras de Falcon

Falcon es un lenguaje de programación multi-paradígma y open source. Soporta programación procedural, orientad a objetos, basada en prototipos, funcional, tabular y de intercambio de mensajes. Apareció por primera vez hace unos 12 años atrás…así que no es un lenguaje nuevo e inmaduro. Era el lenguaje script for defecto del ya desaparecido sistema operativo Auroraux.


Falcon es bastante impresionante y tiene algunas características que otros lenguajes de programación matarían por tener -:)

Así que…ninguna demostración estaría completa si la enlazaramos con SAP HANA, so? Así que…vamos a hacerlo -;)

Primero, debemos crear un objeto Join y asociar la tabla por MANDT y CARRID. De ahí, seleccionar los siguientes campos como output MANDT, CARRID, CARRNAME, PRICE y CURRENCY.

Luego crear un objeto Aggregation seleccionándo los campos CARRNAME, PRICE (Como columnas agregadas) y CURRENCY. Debemos filtrar el campo CURRENCY por ‘USD’.

Luego, debemos crear un objeto Projection y seleccionar solo PRICE y CARRNAME.

En el objeto Semantics asegúrense de marcar  “CROSS CLIENT” como cliente por defecto.


Ahora, cambiemos a la vista SAP HANA Development y creemos un nuevo repositorio. Lo llamaremos“Flights”.

Creamos un proyecto “XS Engine” y también lo llamamos “Flights”. Lo enlazamos con el repositorio “Flights”.

Creamos un archivo vacio llamado “.xsapp”.

Creamos un archivo llamado “.xsaccess” con el siguente código.

.xsaccess
{
          "exposed" : true,
          "authentication" : [ { "method" : "Basic" } ]
}

Finalmente creamos un archivo llamado “flights.xsodata” con el siguiente código

flights.xsodata
service {
          "Blag/FLIGHTS_BY_CARRIER.calculationview" as "FLIGHTS" keys 
                                                        generate local "Id";
}

Activamos el proyecto y lanzamos nuestro browser...deberíamos ver algo como esto…


La parte de SAP HANA está lista…así que ahora podemos pasar a la parte de Erlang…

Falcon debería estar incluído en cualquier distribución de Linux…y estoy seguro de que ni siquiera se han dado cuenta -;)

En fín…también pueden instalarlo desde Falcon Releases...

Ahora…como aún soy un novato en Falcon…no estoy seguro si de verdad necesitamos esto…pero para estar seguros…instalamos esto…

apt-get install falconpl-curl

Son las libreías de Curl para Falcon…

Agarra tu editor favorito y copia y pega el siguiente código…

falcon_hana.fal
import from curl
import from json
h = curl.Handle("http://YourServer:8000/Flights/flights.xsodata/FLIGHTS?$format=json")
auth = "Authorization:Basic " + Base64.encode("SYSTEM:YourPassword")
headers = [auth]
h.setOption(curl.OPT.HTTPHEADER,headers)
h.setOption(curl.OPT.SSL_VERIFYPEER,false)
data = h.setOutString().exec().getData()

try
   raw = json.JSONdecode( data )
catch
   printl( "Can't decode the string" )
end

d = raw["d"]

results = d["results"]

for Index in [0:results.len()]
 print(results[Index]["CARRNAME"])
 print(" : ")
 printl(results[Index]["PRICE"])
end

Para ejecutarlo…simplemente abre una sesión en el terminal, anda a la carpeta donde tienes tu código y escribe...

Falcon falcon_hana.fal 



Debo admitir que esto no fué muy sencillo en un inicio…la documentación de Falcon no habla sobre curl…así que tuve que revisar el código en GitHub…hacer muchas pruebas…hasta que finalmente pude hacer que funcione…la parte de json por otro lado fué extremadamente sencilla -:D

Saludos,

Blag.
Development Culture.

No comments: