hugo_dc GNU/Linux, ABAP, Python y otras cosas.

1Sep/100

Pedir password en consola con Python

En días anteriores estuve haciendo unas llamadas RFC desde Python a SAP, las configuraciones de usuarios y contraseñas se hacían en un archivo adjunto al script, las cuales quedaban a la vista de cualquier persona que pudiera ver el archivo. Entonces decidí pedir el usuario y la contraseña en el mismo programa (era un exe, compilado con py2exe).
Para ello usé un módulo llamado getpass, de la siguiente forma:
  1. #se importa el modulo getpass
  2. import getpass
  3. #podemos usar el raw_input para obtener el usuario
  4. usuario = raw_input("Usuario: ")
  5. #usamos getpass para obtener el password,
  6. #si agregamos un argumento, este es el prompt que queremos que aparezca
  7. #si no ponemos nada aparecera "Password:"
  8. password = getpass.getpass("Dame el password: ")
  9. print "Usuario: ", usuario
  10. print "Password: ", password
Al momento de escribir el password, al parecer no se escribe nada en pantalla, pero en realidad si. Algo asi como cuando una terminal te pide la contraseña de root en GNU/Linux.
El módulo getpass tiene otra funcion llamada getuser, la probé y me devolvió el usuario con el que estoy trabajando en el sistema (como estoy trabajando en Windows, me aparece mi usuario de Windows.
Y eso es todo lo que tengo para pedir contraseñas por el momento, usando getpass.
25Jan/100

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

Filed under: Uncategorized No Comments
6Jan/100

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/

Filed under: SAP, java, linux, programas No Comments
16Dec/090

#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 :D así que si son SAPeros ahí los veo todas las noches.

sap

Filed under: ABAP, SAP No Comments
8Dec/090

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 '.

Filed under: ABAP, SAP, programacion No Comments
25Nov/092

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!

Filed under: Uncategorized 2 Comments
18Nov/092

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.

TSTC

Filed under: Uncategorized 2 Comments
5Nov/090

OnSAP.com

onsap

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.

http://onsap.com

Filed under: SAP No Comments
7Oct/090

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:

  1. **---------------------------------------------------------------------*
  2. **       Class ZCL_GUI_TEXTEDIT  DEFINICION
  3. *---------------------------------------------------------------------*
  4. *|        Esta clase hereda de CL_GUI_TEXTEDIT,
  5. *| Es para poder asignarle un valor a la propiedad LIMIT_TEXT
  6. *| la cuál en CL_GUI_TEXT edit es protected, y solo puede ser accedida
  7. *| con una subclase o...
  8. *----------------------------------------------------------------------*
  9. class zcl_gui_textedit definition
  10.   inheriting from cl_gui_textedit.
  11.   public section.
  12.     methods:
  13.       set_max_250.
  14. endclass.               "ZCL_GUI_TEXTEDIT

Inmedatamente después, hice la implementación de la clase y su respectivo método:

  1. *----------------------------------------------------------------------*
  2. *       CLASS ZCL_GUI_TEXTEDIT IMPLEMENTATION
  3. *----------------------------------------------------------------------*
  4. *
  5. *----------------------------------------------------------------------*
  6. class zcl_gui_textedit implementation.
  7.   method set_max_250.
  8.     me->limit_text( 250 ).
  9.   endmethod.                    "SET_MAX_250
  10. endclass.                    "ZCL_GUI_TEXTEDIT IMPLEMENTATION

Y me creé una variable del tipo de mi nueva subclase

  1.  
  2. ** Variables para mostrar multilinea
  3. data: texto type ref to zcl_gui_textedit,
  4. 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:

  1. module mostrar_multilinea output.
  2.   create object cc_texto
  3.   exporting
  4.   container_name = 'TXTCOMENTARIOS'
  5. *  max_number_chars = 250
  6.   exceptions
  7.   cntl_error = 1
  8.   cntl_system_error = 2
  9.   create_error = 3
  10.   lifetime_error = 4
  11.   lifetime_dynpro_dynpro_link = 5.
  12.  
  13.   create object texto
  14.   exporting parent = cc_texto.
  15.  
  16. ** Llamamos al método que pone el máximo de caracteres a 250
  17.   call method texto->set_max_250.
  18.  
  19. endmodule                    "mostrar_multilinea OUTPUT

Y listo :-)

campo_multilinea

5Oct/090

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:

  1. REPORT ztest_hugo_dc.
  2.  
  3. DATA:
  4.   BEGIN OF ti_csv OCCURS 0,
  5.     campo(5),
  6.     separador(1),
  7.     campo2(7),
  8.   END OF ti_csv.
  9.  
  10. DATA:
  11.  index TYPE string.
  12.  
  13. DO 9 TIMES.
  14.   index = sy-tabix.
  15.   CONCATENATE '0000'  index  INTO ti_csv-campo.
  16.   ti_csv-separador = ','.
  17.   ti_csv-campo2 = 'hugo_dc'.
  18.   APPEND ti_csv.
  19. ENDDO.
  20.  
  21. CALL FUNCTION 'GUI_DOWNLOAD'
  22.   EXPORTING
  23.     filename              = 'C:\ARCHIVO.CSV'
  24.     filetype              = 'ASC'
  25. *    write_field_separator = ','
  26.   TABLES
  27.     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:

  1. REPORT ztest_hugo_dc.
  2.  
  3. DATA:
  4.   BEGIN OF ti_csv OCCURS 0,
  5.     campo(9),
  6.     separador(1),
  7.     campo2(7),
  8.   END OF ti_csv.
  9.  
  10. DATA:
  11.  index TYPE string.
  12.  
  13. DO 9 TIMES.
  14.   index = sy-tabix.
  15.   CONCATENATE '="0000'  index '"'  INTO ti_csv-campo.
  16.   ti_csv-separador = ','.
  17.   ti_csv-campo2 = 'hugo_dc'.
  18.   APPEND ti_csv.
  19. ENDDO.
  20.  
  21. CALL FUNCTION 'GUI_DOWNLOAD'
  22.   EXPORTING
  23.     filename              = 'C:\ARCHIVO.CSV'
  24.     filetype              = 'ASC'
  25. *    write_field_separator = ','
  26.   TABLES
  27.     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.

Filed under: ABAP, SAP, programacion No Comments