Saturday, January 27, 2007

El Arte de Programar Ruby


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:

Thursday, January 25, 2007

Un agradecimiento especial a mis mentores del SDN


Llevo casi un año como Blogger en el SDN.

Durante ese tiempo he hecho muy buenos amigos y sobre todo, he conseguido Mentores, que aparte de brindarme su amistad, se han preocupado de una u otra manera, que mejore tanto en lo personal como en lo profesional.

Este saludo y agradecimiento va dirigido a:

Saludos,

Blag.


Technorati tags:

Wednesday, January 17, 2007

Nuevo libro de ABAP Objects!!!


El maestro Horst Keller acaba de terminar su nuevo libro de ABAP Objects, el cual será publicado en Marzo en SAP PRESS.


Para mas información lean su blog en el SDN Something's Coming

Saludos,

Blag.


Technorati tags:

Tuesday, January 16, 2007

Jugando con WxRuby


¿Qué es WxRuby? Muy simple...Son
Widgets para Ruby que nos permiten programar con una interfaz gráfica.


Ayer lo instalé, estuve revisando la documentación (Si es que se le puede llamar documentación...es pésima) y logré hacer una pequeña aplicación...Como siempre, enlazandola con R/3 -;)


Primero tenemos que logearnos a R/3.


Y luego podemos acceder a cualquier tabla.


Este es el código fuente.

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()

Saludos,

Blag.

Friday, January 12, 2007

Discuciones acaloradas en el SDN...


Los miembros del SDN venimos en todas formas, edades, colores, nacionalidades y culturas...Lo cual no impide que nos enfrasquemos en acaloradas discuciones...

Blog "If you have nothing to say - just shut up"
Foro Is it just me, or are are there more "trivial" blogs appearing?

Blog From the Grumpy Old Man: Smooth moderator
ForoWhat happened to the morality of the SDN members?

Que esperan para dar sus opiniones?

Saludos,

Blag.


Technorati tags:

Scripting Languages WIKI


El SDN tiene desde hace algún tiempo un excelente WIKI.

Y ahora, gracias a un pedido de Craig Cmehil, me estoy encargado de actualizar mi sección favorita Scripting Languages WIKI.

Así que ya saben -:P Si necesitan información sobre Lenguajes Script y SAP ya saben en donde buscar...

Saludos,

Blag.


Technorati tags:

Wednesday, January 10, 2007

CLOI_PUT_SIGN_IN_FRONT...


Si alguna vez han querido cambiar la posición del signo negativo en ABAP (El standard es 100-) para que quede así -100, habrán buscado y encontrado la función CLOI_PUT_SIGN_IN_FRONT y claro, se habrán dado cuenta de que no sirve para todos los casos e inclusive no funciona en modo de test...Por eso, hice un pequeño form para solucionar los pequeños inconvenientes -;)

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

Saludos,

Blag.

¿CONVERSION_EXIT_ALPHA_OUTPUT?


La función CONVERSION_EXIT_ALPHA_OUTPUT es muy útil cuando queremos eliminar los ceros de una cadena...Por ejemplo si tenemos 0000012345, nos devuelve 12345...Pero...que pasa cuando tenemos 00000E12345, simple...el resultado va a seguir siendo 00000E12345.

Por lo tanto y puesto que ayer me ví en un problema muy similar, decidí crear un form muy simple -;)

*&----------------------------------------------------------*
*& 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

Lo que logramos con esto, es obtener el valor E12345

Saludos,

Blag.

Tuesday, January 09, 2007

Web Services Overhead


El buen Daniel McWeeney nos presenta en este blog una comparativa entre utilizar RFC y WebServices.


Saludos,

Blag.

Verificar UNICODE


Gracias a un post de Rahul Kavuri del SDN me he enterado de una transacción muy interesante: UCCHECK.

Y que hace tan especial a esta transacción? Pues es muy simple...Nos permite verificar si nuestros programas son compatibles con el modelo UNICODE.


Una excelente herramienta que todos deberíamos utilizar para evitar trabajo adicional al momento de trabajar en proyectos de migración.

Saludos,

Blag.

Technorati tags:

Bloggeando fuera del SDN...


Este post es solo para contribuir con este post
Do you follow SDN, outside of SDN?
-;)

Por que obviamente a pesar de que este es mi blog personal, no dejo de incluir enlaces o noticias referentes al SDN cada vez que puedo -:D

Saludos,

Blag.

Technorati tags:


Friday, January 05, 2007

Dan and Eddie - Las Vegas TechEd


Gracias a Eduard Herrmann que ha compartido este excelente video, podemos ver un poco de como fué el TechEd 2006 en Las Vegas.

Con entrevistas a Craig Cmehil, Mark Finnern, Marilyn Pratt, Rich Heilman y Ryan Lowe y la narración de Dan McWeeney. Definitivamente, el mejor regalo de año nuevo -:D

Saludos,

Blag.

Thursday, January 04, 2007

Blogs de SAP ABAP en castellano!


No podía dejar pasar la oportunidad (Más bien creo, que es parte de mi obligación) de promocionar el nuevo blogs de SAP ABAP en castellano.


Por una iniciativa mía, y el gran apoyo de Andrés Picazo, este blog pretende ser una nueva forma de transmitir conocimientos sobre el fascinante ABAP y claro, lo que es más importante...En Español -;)

Si bien el blog anda un poco frío (Lleva poco tiempo on-line), confiamos que al paso del tiempo, se va a convertir en todo un éxito con muchos colaboradores y excelente contenido.

Saludos,

Blag.

Blogs en reposo...


Como se habrán dado cuenta...algo algunos día sin bloggear...¿Por qué? Pues porque he decidido tomarme un pequeño descanzo...Tanto aquí como en el SDN.

Las razones son simples...Mucho trabajo, varios proyectos en proceso, he entrado hace poco al gimnacio y de paso, quiero crear el suficiente contenido como para poder inundarlos con nuevos blogs -:P

Espero que no me extrañen mucho -;)

Saludos,

Blag.