Monday, November 23, 2015

SAP HANA en la luna (con Lua)

Este post fué posteado originalmente en SAP HANA on the moon (with Lua).


Lua es un lenguaje de programación ligero diseñado como un lenguaje script con semántica extensible como primera regla. Lua es multi plataforma puesto que está escrito en ANSI C, y tiene una API de C relativamente simple.

Si están preguntándo acerca del título…bueno…Lua significa Luna en Portugués -;)


Lua es bastante potente pero sencillo de aprender y usar. Si ya saben Python o Ruby, no tendrán muchos problemas…

Antes de continuar…quiero compartir una pequeña broma…que no es especificamente única para Lua…pero aún así es graciosa -;)


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 Lua…

Antes de continuar…debo de recomendar que instalen un par de cosas…si usan Linux…instalen esto…

sudo apt-get install lua5.2

Y luego sigan las instrucciones para instalar LuaRocks un manejador de paquetes para Lua…

Instalen los siguientes paquetes…

sudo luarocks install luasec
sudo luarocks install luajson
sudo luarocks install luasocket

Para programar en Lua, pueden utilizar cualquier editor que les guste…copien y peguen el siguiente código…

Lua_HANA.lua
http = require("socket.http")
mime = require("mime")
ltn12 = require("ltn12")
json = require("json")

h = {Authorization = "Basic " .. (mime.b64("SYSTEM:YourPassword")), 

     ["Content-Type"] = "application/json", ["content-length"] = jsonsize }

local resp ={}

ok, code, headers = http.request{url = "http://YourServer:8000/Flights/flights.xsodata/FLIGHTS?$format=json", 
     redirect = true, method = "GET", headers = h, source = source, 
                                 sink = ltn12.sink.table(resp)}

local dec = json.decode(resp[1])
local d = dec["d"]["results"]
for i = 1, #d do
 io.write(d[i]["CARRNAME"]," : ",d[i]["PRICE"], "\n")
end
print("")


Hacer esta integración con Lua fué rápido y sencillo…Lua es un lenguaje muy interesánte con algunas características muy buenas que no se pueden encontrar en otros lenguajes...

Saludos,

Blag.
Development Culture.

No comments: