Estoy seguro de que ya se habrán dado cuenta de que amo los Lenguajes Script. Eso signigica que cada cierto tiempo, me encanta jugar con nuesvos lenguajes o algún Framework web nuevo. Esta vez me tocó jugar con
Sinatra, un framework muy impresionante.
Debo decir que la documentación es bastante pobre...aún cuando un
libro de Sinatra está en proceso.
He dicho muchas veces que voy a aprender
Rail, pero de alguna manera...cada vez que empiezo lo dejo a los pocos días...por qué? Seguramente por
Sinatra y
Camping que son mucho más sencillos de aprender y aportan basicamente las mismas funcionalidades que
Rails.
Pero estoy seguro que ninguno de ustedes quiere conocer mi vida privada de programación...Así que vayamos al código...
require 'rubygems'
require 'sinatra'
gem 'saprfc'
require "SAP/Rfc"
get '/' do
body do
<<-eos
<h1>Ruby/Sinatra and SAP - SE16 Emulation</h1>
<form action='/login' method='post'>
<label for='host'>Host</label><br />
<input type='text' name='host' /><br />
<label for='sysnr'>System Number</label><br/>
<input type='text' name='sysnr' /><br />
<label for='client'>Client</label><br />
<input type='text' name='client' /><br />
<label for='user'>User</label><br />
<input type='text' name='user' /><br />
<label for='password'>Password</label><br />
<input type='password' name='password' /><br />
<input type='submit' name='submit' value='Login' />
</form>
eos
end
end
get '/login_view' do
body do
<<-eos
<form action='/table_view' method='post'>
<label for='table'>Table:</label><br />
<input type='text' name='table' /><br />
<input type='submit' name='submit' value='Show Table' />
</form>
eos
end
end
get '/show_table' do
$output = "<table border='1'><tr>"
for i in 0...$Fields_Len
$Fields_Fields = $Data_Names[i].to_s
$output += "<th> #{$Fields_Fields} </th>"
end
$output += "</tr>"
for i in 0...$Data_Len
$output += "<tr>"
$Data_Fields = $Data[i]
$Data_Split = $Data_Fields.split("|")
for i in 0...$Fields_Len
$output += "<td> #{$Data_Split[i].to_s.strip} </td>"
end
$output += "</tr>"
end
$output += "</table>"
body $output
end
post '/login' do
$host,$sysnr,$client,$user,$password = params[:host],params[:sysnr],
params[:client],params[:user],
params[:password]
"#{do_login}"
redirect '/login_view'
end
post '/table_view' do
$table = params[:table]
"#{get_table}"
redirect '/show_table'
end
helpers do
def do_login
$rfc = SAP::Rfc.new(:ashost => $host,
:sysnr => $sysnr.to_i,
:lang => "EN",
:client => $client.to_i,
:user => $user,
:passwd => $password,
:trace => 1)
end
def get_table
$itab = $rfc.discover("RFC_READ_TABLE")
$itab.query_table.value = $table
$itab.delimiter.value = "|"
$rfc.call($itab)
$Fields = Array.new
$Data = Array.new
$Data_Fields = Array.new
$Data_Split = Array.new
$Data_Names = Array.new
$itab.fields.hashRows {|field| $Fields.push(field) }
$Fields_Len = $Fields.length
$itab.data.hashRows {|field| $Data.push(field['WA'].to_s.strip!) }
$Data_Len = $Data.length
$itab.fields.hashRows {|field| $Data_Names.push
(field['FIELDNAME'].to_s.strip)}
end
end
Ahora, algunas imagenes...



Saludos,
Blag.