Acabo de publicar mi nuevo libro llamado El Arte de Programar Ruby el cual está disponible en Lulu.com - El Arte de Programar Ruby

Saludos,
Blag.
Technorati tags: sdn blogger


Primero tenemos que logearnos a R/3.
Y luego podemos acceder a cualquier tabla.
require 'wxruby'
include Wx
require "SAP/Rfc"
Btn_Connect = 1000
Btn_Show = 1001
class MyFrame < Frame
def initialize(frame, title, pos, size)
super(frame, -1, title, pos, size)
panel = Panel.new(self)
m_Server = StaticText.new(panel, -1, "Server",Point.new(10, 12),Size.new(40, 20))
@mServer = TextCtrl.new(panel, -1, "Huroncebrio",Point.new(90, 10),Size.new(80, 20))
m_SysNum = StaticText.new(panel, -1, "System Number",Point.new(10, 32),Size.new(80, 20))
@mSysNum = TextCtrl.new(panel, -1, "000",Point.new(90, 30),Size.new(30, 20))
m_Client = StaticText.new(panel, -1, "Client",Point.new(10, 52),Size.new(80, 20))
@mClient = TextCtrl.new(panel, -1, "00",Point.new(90, 50),Size.new(20, 20))
m_User = StaticText.new(panel, -1, "User",Point.new(10, 72),Size.new(80, 20))
@mUser = TextCtrl.new(panel, -1, "bcuser",Point.new(90, 70),Size.new(80, 20))
m_Password = StaticText.new(panel, -1, "Password",Point.new(10, 92),Size.new(80, 20))
@mPassword = TextCtrl.new(panel, -1, "minisap",Point.new(90, 90),Size.new(80, 20))
btnConnect = Button.new(panel, Btn_Connect, "Connect", Point.new(50, 130),Size.new(80, 20))
show(TRUE)
evt_button(Btn_Connect) {onButtonConnect}
end
def onButtonConnect()
rfc = SAP::Rfc.new(:ashost => @mServer.get_value(),
:sysnr => @mSysNum.get_value(),
:lang => "EN",
:client => @mClient.get_value(),
:user => @mUser.get_value(),
:passwd => @mPassword.get_value(),
:trace => 0)
show(false)
myGridFrame = GridFrame.new(nil, "", Point.new(50, 50), Size.new(600, 400))
myGridFrame.fill_table(rfc)
end
def onQuit
close(TRUE)
end
end
class GridFrame < Frame
def initialize(frame, title, pos, size)
super(frame, -1, title, pos, size)
@panel = Panel.new(self)
m_Table = StaticText.new(@panel, -1, "Table",Point.new(180, 12),Size.new(40, 20))
@mTable = TextCtrl.new(@panel, -1, " ",Point.new(220, 10),Size.new(80, 20))
btnShow = Button.new(@panel, Btn_Show, "Show Table", Point.new(315, 10),Size.new(65, 20))
show(true)
evt_button(Btn_Show) {onButtonShow}
end
def onButtonShow()
@itab.query_table.value = @mTable.get_value.upcase
@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)}
@grid = Grid.new(@panel,:grid.object_id,Point.new(0,40),Size.new(585,320))
@grid.set_editable(false)
@grid.create_grid($Data_Len,$Fields_Len)
for i in 0...$Fields_Len
@grid.set_col_label_value( i, $Data_Names[i].to_s )
for j in 0...$Data_Len
$Data_Fields = $Data[j]
$Data_Split = $Data_Fields.split("|")
@grid.set_cell_value( j, i, $Data_Split[i] )
end
end
end
def fill_table(rfc)
@itab = rfc.discover("RFC_READ_TABLE")
@rfc = rfc
end
def onQuit
close(TRUE)
end
end
class SapLogin < App
def on_init
myNewFrame = MyFrame.new(nil, "SE16 Emulator", Point.new(50, 50), Size.new(200,200))
set_top_window(myNewFrame)
end
end
a = SapLogin.new
a.main_loop()
REPORT z_dummy_atg_3.
DATA: value TYPE p DECIMALS 2,
value_text(18) TYPE c,
text1(18) TYPE c.
value = '15.2-'.
WRITE value TO value_text.
PERFORM cambiar_signo CHANGING value_text.
WRITE:/ value_text.
*&--------------------------------------------------*
*& Form CAMBIAR_SIGNO
*&--------------------------------------------------*
* Cambia la posición del signo
*---------------------------------------------------*
FORM cambiar_signo CHANGING value_text.
SEARCH value_text FOR '-'.
IF sy-subrc = 0 AND sy-fdpos <> 0.
SPLIT value_text AT '-' INTO value_text text1.
CONDENSE value_text.
CONCATENATE '-' value_text INTO value_text.
ELSE.
CONDENSE value_text.
ENDIF.
ENDFORM. "CAMBIAR_SIGNO
*&----------------------------------------------------------*
*& Form quitar_ceros *
*&----------------------------------------------------------*
* Quitamos les ceros del inicio *
*-----------------------------------------------------------*
FORM quitar_ceros CHANGING t_codigo.
DATA: long TYPE i,
char TYPE c,
cero TYPE c,
counter TYPE i,
new_text(18) TYPE c,
flag TYPE c.
cero = '0'.
long = STRLEN( t_codigo ).
DO long TIMES.
counter = counter + 1.
IF counter EQ long.
EXIT.
ENDIF.
char = t_codigo+counter(1).
IF char NE cero.
CONCATENATE new_text t_codigo+counter(1)
INTO new_text.
flag = 'X'.
ELSE.
IF flag EQ space.
CONTINUE.
ELSE.
CONCATENATE new_text t_codigo+counter(1)
INTO new_text.
ENDIF.
ENDIF.
ENDDO.
t_codigo = new_text.
ENDFORM. "quitar_ceros