agosto 03, 2012

Trae un poco de Euphoria a SAP HANA

by Alvaro "Blag" Tejada Galindo

Descargo: Este blog esta basado en mis experiencias personales y no esta apoyado o auspiciado por SAP. La conexión ODBC con SAP HANA tampoco esta apoyada o auspiciada por SAP, así que debe ser usado bajo su propio riesgo, no se proveerá ningún tipo de soporte.
Como Evangelista de Tecnología, siempre estoy tratando de generar nuevo contenido para compartir con mis colegas programadores, asi que el otro día estaba aprendiendo Node.JS, y de pronto me acorde de un lenguaje de programación que solía usar hace unos 10 anios...Euphoria...que es de paso llamado ahora OpenEuphoria puesto que es Open Source.
Por que alguien debería interesarse por Euphoria? Bueno...de acuerdo con su pagina web..."Es mas fácil que BASIC y mas potente que C++"...lo he utilizado de nuevo para este blog, y debo decir, no ha perdido la magia...Euphoria es un excelente lenguaje de programación con una extensa libreria para escoger.
Asi que...que necesitamos para comenzar?

 
Descargar OpenEuphoria
Descargar wxEuphoria
Para este blog, intente utilizar Windows 7, pero el problema es que el conector ODBC no trabaja en 64bits, asi que fui a mi maquina virtual con Windows XP y comencé la diversión.
Cree mi conexión ODBC con mi Amazon Web Services llamada SAP_HANA y desde ahi, solo fue codificar y divertirse.
Para hacer las cosas simples, utilice el mismo escenario que utilice en mi blog SAP HANA and Python? Yes Sir! que es básicamente, conectarme a SAP HANA vía ODBC, mostrar una lista de CARRIERS y CITY FROM's y ejecutar un query para obtener y mostrar la información.

                                                Euphoria_HANA.exw                                              
include wxeud.e as wxeud
include odbc.e as odbc
include std/sequence.e as seq

global atom hconn, hstmt
global sequence dsn_var, user, auth, msg, carrier_key
global object data

carrier_key = {}

constant
main = create( wxFrame, {0, -1, "Euphoria and SAP HANA", -1, -1, 450, 300}),
win = create( wxPanel, main ),
ldsn = create( wxStaticText, {win, -1, "DSN:",120, 60}),
dsn = create( wxTextCtrl, {win, -1, "", 200, 55} ),
lusername = create( wxStaticText, {win, -1, "Username:",120, 90}),
username = create( wxTextCtrl, {win, -1, "", 200, 85} ),
lpassword = create( wxStaticText, {win, -1, "Password:",120, 120}),
password = create( wxTextCtrl, {win, -1, "", 200, 115, -1, -1, wxTE_PASSWORD} ),
connect = create( wxButton, {win, -1,"Connect", 200, 150})

constant
main2 = create( wxFrame, {0, -1, "Euphoria and SAP HANA", -1, -1, 450, 300}),
win2 = create( wxPanel, main2 ),
lcarrier = create( wxStaticText, {win2, -1, "Carrier:",120, 60}),
carrier = create( wxComboBox, {win2, -1, "", 200, 55, -1, -1, {}}),
lcityfrom = create( wxStaticText, {win2, -1, "City From:",120, 90}),
cityfrom = create( wxComboBox, {win2, -1, "", 200, 85, -1, -1, {}}),
show_query = create( wxButton, {win2, -1,"Show Query", 200, 120})

constant
main3 = create( wxFrame, {0, -1, "Euphoria and SAP HANA", -1, -1, 600, 600}),
win3 = create( wxPanel, main3 ),

goback = create( wxButton, {win3, -1,"Go Back", 260, 1}),
grid = create( wxGrid, {win3, -1, 1, 30, -1, -1, 1, 1, 6} )

function getConnected()
 if initODBC() > 0  then
  abort(0)
 end if
 dsn_var = get_text_value(dsn)
 user = get_text_value(username)
 auth = get_text_value(password)
 hconn = openConnectionODBC( dsn_var, user, auth )
 if not hconn then
  message_box("Connection error","Error",wxOK)
  return 0
 elsif hconn > 0 then
  msg = getErrorODBC( hconn )
  message_box(msg[2],"Error",wxOK)
  return 0
 else
  return 1
 end if
end function

function getQuery(sequence sql)
 hstmt = prepareSQL( hconn, sql )
 data = executeSQL( hstmt )
 if hstmt > 0 then
  message_box("Query failed","Error",wxOK)
 end if
 if data > 0  then
  message_box("No data found","Error",wxOK)
  return 0
 else
  data = {getColumnHeaders( hstmt )} & odbc:getData( hstmt )
  return data
 end if
end function

function fillParameters(object data, atom pos, atom combo, atom key)
 sequence value, seq
 seq = {}
 if sequence( data ) then
  for i = 2 to length( data ) do
   value = remove_all(0,data[i][pos])
   seq = append(seq, value)
   if key = 1 then
    value = remove_all(0,data[i][1])
    carrier_key = append(carrier_key, value)
   end if
     end for
     wxeud:add_item(combo, seq)
 end if
 return 1
end function

function fillCombos()
 sequence sql
 sql = "SELECT CARRID,CARRNAME FROM SFLIGHT.SCARR WHERE MANDT = 300"
 data = getQuery(sql)
 fillParameters(data, 2, carrier, 1)
 sql = "SELECT DISTINCT CITYFROM FROM SFLIGHT.SPFLI WHERE MANDT = 300"
 data = getQuery(sql)
 fillParameters(data, 1, cityfrom, 0)
 return 1
end function

function initializeGrid()
 set_col_label(grid,0,"Carrier")
 set_col_label(grid,1,"Connection")
 set_col_label(grid,2,"Flight Date")
 set_col_label(grid,3,"Passenger Name")
 set_col_label(grid,4,"City From")
 set_col_label(grid,5,"City To")
 atom carrier_sel, len, row, col
 sequence sql, value
 carrier_sel = get_selection(carrier) + 1
 sql = "SELECT SBOOK.CARRID,SBOOK.CONNID,FLDATE, " &
          "PASSNAME,CITYFROM,CITYTO" &
          " FROM SFLIGHT.SBOOK INNER JOIN SFLIGHT.SPFLI" &
          " ON SBOOK.CONNID = SPFLI.CONNID" &
          " WHERE SBOOK.CARRID = '" & carrier_key[carrier_sel] & "'" &
          " AND CITYFROM = '" & get_string_selection(cityfrom) & "'" &
          " AND PASSNAME >< ''" &
          " AND SBOOK.MANDT = 300" &
          " AND year(FLDATE) = 2012" &
          " ORDER BY FLDATE DESC"
 data = getQuery(sql)
 if sequence( data ) then
  row = 0
  len = length( data ) - 2
  if len < 0 then
   append_rows(grid,len)
   for i = 2 to length( data ) do
    col = 0
    for j = 1 to 6 do
     value = remove_all(0,data[i][j])
     set_cell_value(grid,value,row,col)
     col = col + 1
    end for
    row = row + 1
      end for
     end if
 end if 
 set_grid_editable(grid,0)
 autosize_grid(grid)
 return 1
end function

procedure Click_connect(atom this, atom event_type, atom id, atom event )
atom ans
ans = getConnected()
if ans = 1 then
 show_window(main,0)
 fillCombos()
 wxMain( main2 )
end if
end procedure
set_event_handler(connect, get_id(connect), wxEVT_COMMAND_BUTTON_CLICKED, routine_id( "Click_connect" ))

procedure Click_show_query(atom this, atom event_type, atom id, atom event )
 show_window(main2,0)
 initializeGrid()
 wxMain( main3 )
end procedure
set_event_handler(show_query, get_id(show_query), wxEVT_COMMAND_BUTTON_CLICKED, routine_id( "Click_show_query" ))

procedure Click_goback(atom this, atom event_type, atom id, atom event )
 show_window(main3,0)
 clear_grid(grid)
 delete_rows(grid,1,get_number_rows(grid),0)
 show_window(main2,1)
end procedure
set_event_handler(goback, get_id(goback), wxEVT_COMMAND_BUTTON_CLICKED, routine_id( "Click_goback" ))

procedure main3_onClose( atom this, atom event_type, atom id, atom event )
 destroy(main)
 destroy(main2)
 destroy(main3)
end procedure
set_event_handler( main3, get_id(main3), wxEVT_CLOSE_WINDOW, routine_id("main3_onClose") )

wxMain( main )

Como le gusta decir a la gente...fotos o esto nunca paso...

Como pueden ver...SAP HANA es muy flexible y fácil de usar...sin importar el lenguaje de programación, obtienes súper velocidad y la seguridad de que estas haciendo las cosas bien.
Saludos,
Blag

Original Version: http://atejada.blogspot.de/2012/07/trae-un-poco-de-euphoria-sap-hana.html

No hay comentarios:

Publicar un comentario