Wednesday, September 23, 2015

(Definiendo SAP HANA (OData) con Racket)

Este post fué posteado originalmente en (Defining SAP HANA (OData) with Racket).

Racket es un lenguaje de largo espectro que va más allá de Lisp y Scheme con dialectos que soportan objectos, types, laziness y más. Y más significa Funcional, Procedural, Orientado a Objetos, Lógico, Reflexivo y Meta.

Basicamente…Racket es un nuevo nombre para PLT Scheme. Y PLT Scheme viene de la familia Lisp.

Así que, antes de seguir adelánte…quiero compartir un cómic de XKCD que trata de iluminarnos sobre lo que es Lisp -:)


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

Racket es un lenguaje de programación muy completo…así que no necesitamos paquetes externos…

Para programar en Racket utilizo el mejor editor de Racket “Dr. Racket” que viene incluído en la instalación de Racket…así que nuevamente…no hay de que preocuparse -:)

Copien y peguen el siguiente código…

Racket_HANA.rkt
#lang racket
(require json)
(require net/base64)
(require net/url)

(define make-auth-header
     (list (string-append
       "Authorization: Basic "
       (bytes->string/utf-8
        (base64-encode
         (string->bytes/utf-8
          (string-append "SYSTEM" ":" "YourPassword")))))))

(define (get_path path params)
  (port->string(get-pure-port path params)))

(define json (string->jsexpr (get_path (string->url "YouServer:8000/Flights/flights.xsodata/FLIGHTS?$format=json") 
                              make-auth-header)))
(define results (hash-ref (hash-ref json 'd) 'results))

(define (show_info results len ctr)
  (cond [(or (= ctr len) (< ctr len))
         (string-append (hash-ref (list-ref results ctr) 'CARRNAME) ": "
                        (hash-ref (list-ref results 0) 'PRICE) "\n"
                        (show_info results len (add1 ctr)))]
        [(> ctr len)
         (string-append "" "\n")]))

(display (show_info results (sub1 (length results)) 0))

Ahora lo pueden ver…Racket adora los parentesis -:) En fín…presionar el botón "run" y tendrás esto…


He estado haciendo interfaces de SAP HANA OData con muchos lenguajes…y hasta ahora…Racket ha sido una de mis implementaciones más cortas…aunque es dificil acostumbrarse a tantos parentesis…es un lenguaje muy interesánte y poderoso…y lás cosas salen más pronto de lo que uno podría imaginarse…

Saludos,

Blag.
Development Culture.

No comments: