Pedir password en consola con Python
-
#se importa el modulo getpass
-
import getpass
-
#podemos usar el raw_input para obtener el usuario
-
usuario = raw_input("Usuario: ")
-
#usamos getpass para obtener el password,
-
#si agregamos un argumento, este es el prompt que queremos que aparezca
-
#si no ponemos nada aparecera "Password:"
-
password = getpass.getpass("Dame el password: ")
-
print "Usuario: ", usuario
-
print "Password: ", password
Error 0x8007000B en .NET
Bueno ps checando unos métodos que agregué en unos conectores de sap con .net, al intentar compilar en la máquina de mi coordinador le tiraba el siguiente error: {"Se ha intentado cargar un programa con un formato incorrecto. (Excepción de HRESULT: 0x8007000B)"} Y sin embargo al compilar en mi máquina todo andaba bien y se ejecutaba sin problemas, cual era el error? que él lo hacía desde windows 64 bits, cuando la dll estaba creada en uno de 32 bits... Lo que pasa por tener una máquina tan potente xD.
By StormShadow
Nuevo SAPGui for Java 720
Hoy me acabo de dar cuenta que ya está lista la nueva versión del SAPGui for Java (linux, mac, windows), que entre los cambios visibles trae lo siguiente:
Nueva pantalla de selección de conexión:
Como pueden ver, también trae nuevos temas, incluyendo el nuevo Signature Design que está genial:
Y unos botoncitos que se presentan en cada ventana: File (Manejo de sesiones, configuración del SAPGui), Edit(el típico menú editar), Scripting (Scripting), Window(manejo de ventanas).
Desafortunadamente esta nueva versión no trae la opción de resaltar sintaxis de código fuente y todas las funcionalidades que trae para Windows, el screen painter sigue siendo alfanumérico(me pregunto quién usará herramienta tan precaria).
El Jar instalador lo pueden bajar desde ftp://ftp.sap.com/pub/sapgui/java/720/
#SAP en Freenode
Me gusta mucho pasearme por algunos canales de Freenode, como #debian-mexico, #ikimlinux, #python-mexico y me preguntaba, ¿Existirá algún canal relacionado con SAP o ABAP?, entonces dije... Oh, gran maestro Google, ¿Esto es posible?, y si.. lo era, me encontré un post del foro del sdn donde decía que había dicho canal en Freenode
así que si son SAPeros ahí los veo todas las noches.
Eliminar determinado caracter de una cadena (ABAP)
Si una cadena o campo contiene un caracter no deseado, siempre podemos eliminarlo con la sentencia REPLACE,
por ejemplo:
Supongamos que estamos subiendo un archivo y que en el campo de importe se suele colar un caracter '|' , para eliminarlo podríamos hacer lo siguiente.
REPLACE ALL OCCURRENCES OF '|' IN v_campo WITH '.
Llamar a un programa con SUBMIT y volver
Una manera muy interesante de explicarlo:
GoAnimate.com: Llamar a un programa con SUBMIT y volver. by Oscar
Like it? Create your own at GoAnimate.com. It's free and fun!
Buscar transacciones existentes en SAP (Tabla TSTC)
Pues eso, si quieres saber donde buscar los nombres de las transacciones que existen en SAP así como el programa y dynpro que estas apuntan solo tienes que entrar a la transacción SE16 y buscar en la tabla TSTC.
OnSAP.com
Hace poco me enteré en el blog de Pedro Lima (Apolemia) de este clon de Stackoverflow pero dedicado al mundo de SAP, es llamado OnSAP y por el momento está en Beta, son muy pocos usuarios los que nos hemos registrado, está en inglés pero creo que el administrador tendrá planeado emplear otros idiomas en un futuro, por lo pronto invito a todos los SAPperos a visitarlo y a participar.
Restringir el número de caracteres en un campo multilínea
Ya vimos como crear un campo multilínea en ABAP, también vimos como manejar textos largos.
El día de hoy queria guardar texto en un campo de una tabla, dicho campo lo definí con una longitud de 250 caracteres, esto lo hice para evitar crearme un texto largo.
Cuando uno se crea un campo multilínea, este te permite capturar una gran cantidad de caracteres, ¿cómo limitar el número de caracteres que puedes capturar en el campo múltilínea?
La clase cl_gui_textedit contiene una propiedad llamada LIMIT_TEXT y a esta se le puede asignar el número total de caracteres que quieras que se capturen en tu campo multilínea (TextEdit), lo único malo de esta propiedad esque es PROTECTED, esto es... que solo la misma clase puede manipularla o una subclase. Una subclase, fué lo que hice, llegué a pensar que no funcionaría... pero siempre hay que intentarlo, y si, funcionó a la perfección:
Hacemos la definición de la clase que heredará de cl_gui_textedit, en dicha subclase definí un método que modifique el LIMIT_TEXT llamado set_max_250 que como su nombre indica, pone el máximo de caracteres a 250:
-
**---------------------------------------------------------------------*
-
** Class ZCL_GUI_TEXTEDIT DEFINICION
-
*---------------------------------------------------------------------*
-
*| Esta clase hereda de CL_GUI_TEXTEDIT,
-
*| Es para poder asignarle un valor a la propiedad LIMIT_TEXT
-
*| la cuál en CL_GUI_TEXT edit es protected, y solo puede ser accedida
-
*| con una subclase o...
-
*----------------------------------------------------------------------*
-
class zcl_gui_textedit definition
-
inheriting from cl_gui_textedit.
-
public section.
-
methods:
-
set_max_250.
-
endclass. "ZCL_GUI_TEXTEDIT
Inmedatamente después, hice la implementación de la clase y su respectivo método:
-
*----------------------------------------------------------------------*
-
* CLASS ZCL_GUI_TEXTEDIT IMPLEMENTATION
-
*----------------------------------------------------------------------*
-
*
-
*----------------------------------------------------------------------*
-
class zcl_gui_textedit implementation.
-
method set_max_250.
-
me->limit_text( 250 ).
-
endmethod. "SET_MAX_250
-
endclass. "ZCL_GUI_TEXTEDIT IMPLEMENTATION
Y me creé una variable del tipo de mi nueva subclase
-
-
** Variables para mostrar multilinea
-
data: texto type ref to zcl_gui_textedit,
-
cc_texto type ref to cl_gui_custom_container.
Hice la creación de mi texto multilínea en un método llamado mostrar_multilinea en el PBO, justo después de crear el objeto mando a llamar al método set_max_250:
-
module mostrar_multilinea output.
-
create object cc_texto
-
exporting
-
container_name = 'TXTCOMENTARIOS'
-
* max_number_chars = 250
-
exceptions
-
cntl_error = 1
-
cntl_system_error = 2
-
create_error = 3
-
lifetime_error = 4
-
lifetime_dynpro_dynpro_link = 5.
-
-
create object texto
-
exporting parent = cc_texto.
-
-
** Llamamos al método que pone el máximo de caracteres a 250
-
call method texto->set_max_250.
-
-
endmodule "mostrar_multilinea OUTPUT
Y listo
Bajar un archivo csv(excel) con campos con ceros a la izquierda
Normalmente, cuando bajamos una tabla interna a un archivo CSV que pueden ser abiertos con MS Excel (y con muchos otros sistemas de hoja de cálculo como OpenOffice.org), si existen campos que tienen ceros a la izquiera, estos no se pondrán en la hoja de cálculo, veamos un ejemplo:
-
REPORT ztest_hugo_dc.
-
-
DATA:
-
BEGIN OF ti_csv OCCURS 0,
-
campo(5),
-
separador(1),
-
campo2(7),
-
END OF ti_csv.
-
-
DATA:
-
index TYPE string.
-
-
DO 9 TIMES.
-
index = sy-tabix.
-
ti_csv-separador = ','.
-
ti_csv-campo2 = 'hugo_dc'.
-
APPEND ti_csv.
-
ENDDO.
-
-
CALL FUNCTION 'GUI_DOWNLOAD'
-
EXPORTING
-
filename = 'C:\ARCHIVO.CSV'
-
filetype = 'ASC'
-
* write_field_separator = ','
-
TABLES
-
data_tab = ti_csv.
Esto generará un archivo.csv en la unidad C:\ dicho archivo se verá de la siguiente forma:
Para poder que el campo interprete los ceros a la izquierda, en lugar de poner el campo en sí, pondremos una fórmula, la cuál solo consiste en poner el campo como un string.
Agregaré 3 espacios más al primer campo de mi tabla interna de ejemplo, para poder escribir la fórmula que me permita hacer que el archivo CSV interprete los ceros a la izquierda:
-
REPORT ztest_hugo_dc.
-
-
DATA:
-
BEGIN OF ti_csv OCCURS 0,
-
campo(9),
-
separador(1),
-
campo2(7),
-
END OF ti_csv.
-
-
DATA:
-
index TYPE string.
-
-
DO 9 TIMES.
-
index = sy-tabix.
-
ti_csv-separador = ','.
-
ti_csv-campo2 = 'hugo_dc'.
-
APPEND ti_csv.
-
ENDDO.
-
-
CALL FUNCTION 'GUI_DOWNLOAD'
-
EXPORTING
-
filename = 'C:\ARCHIVO.CSV'
-
filetype = 'ASC'
-
* write_field_separator = ','
-
TABLES
-
data_tab = ti_csv.
Y Excel abriría nuestro archivo de la siguiente forma:
En la barra de fórmulas podemos ver lo que realmente el campo contiene, pero excel lo interpreta como una fórmula y pone todos los ceros a la izquierda como queremos.




