Consumir Webservice con SAP / ABAP

Miércoles, 18 de marzo de 2009 Nessy 13 comentarios

Un ejemplo simple de como consumir Webservice (hecho en .NET) con SAP / ABAP, ya que los ejemplos encontrados en la web en general no me resultaron muy didáctico.

El Webservice a titulo de ejemplo tiene los sigientes parametros: title y details.

REPORT zwebconsume.

DATA: http_client TYPE REF TO if_http_client .

DATA: w_string TYPE string ,
w_result
TYPE string ,
r_str
TYPE string .

DATA: result_tab TYPE TABLE OF string.

START-OF-SELECTION .
CLEAR w_string .
w_string = 'http://urlhost/Logs/main.asmx/SetLog'.

CALL METHOD cl_http_client=>create_by_url
EXPORTING
url                = w_string
IMPORTING
client = http_client
EXCEPTIONS
argument_not_found =
1
plugin_not_active  =
2
internal_error     =
3
OTHERS = 4.

CALL METHOD HTTP_CLIENT->REQUEST->SET_HEADER_FIELD
EXPORTING
NAME =
'~request_method'
VALUE = 'POST'.

CALL METHOD http_client->REQUEST->SET_FORM_FIELD
EXPORTING
NAME =
'title'
VALUE = 'Mail sistema'.

CALL METHOD http_client->REQUEST->SET_FORM_FIELD
EXPORTING
NAME =
'details'
VALUE = 'Funcion 1234'.

CALL METHOD http_client->send
EXCEPTIONS
http_communication_failure =
1
http_invalid_state         =
2.

CALL METHOD http_client->receive
EXCEPTIONS
http_communication_failure =
1
http_invalid_state         =
2
http_processing_failed     =
3.
CLEAR w_result .
w_result = http_client->response->get_cdata( ).

REFRESH result_tab .
SPLIT w_result AT cl_abap_char_utilities=>cr_lf INTO TABLE
result_tab .

READ TABLE result_tab INTO r_str INDEX 2.

Lo que hay que tener en cuenta es que el envio de parametros se efectua con REQUEST->SET_FORM_FIELD y no con REQUEST->SET_DATA ya que este es para enviar todo el encabezado.

Tambien la invocación siguiente es para pasar los parametros por el metodo POST:

CALL METHOD HTTP_CLIENT->REQUEST->SET_HEADER_FIELD
EXPORTING
NAME =
'~request_method'
VALUE = 'POST'.

CoolButton AS3

Jueves, 10 de julio de 2008 Nessy 1 comentario

Botón atractivo en código AS3

Todo componente armado en modo diseño y con el IDE de Flash se vuelve tedioso en mantener y entender, incluso si lo hizo uno mismo;

Por ejemplo, tomen un trabajo en Flash de un diseñador gráfico que intenta programar en AS y busquen un código en la libreria del IDE armado con carpeta según como lo hizo el autor en el MovieClip, "Symbol_198...", y todo eso sin provocar modificaciones no deseables. No gracias, pero bueno si hay que hacerlo...

El programador ActionScript 2/3 debe volcar su código en archivos .AS y utilizar en el caso de AS2 la programación orientado a objeto; El IDE recomendable para este caso es el FlashDevelop (http://www.flashdevelop.org/);
En todo caso al programador Flash ActionScript 3 le recomiendo abandonar el IDE y utilizar el Flex Builder 3 la opción de ActionScript Project;

Pequeña anectodata sobre IDE de Flash:
Recuerdo que una vez fui a una entrevista para el puesto de programador ActionScript en la cual me propusieron de entrada de rendir un examen de Flash;
El examen constaba de pregunta sobre como utilizar las herramientas del IDE del Flash;
Una pregunta era como encontrar el código "gotoAndPlay(fruta)" en un Flash proporcionado, efectivamente su libreria contenia 20 carpetas, 500 simbolos/graficos y movieclip todo uno dentro del otro;
No se que tipo de programador iban a encontrar pero seguro que iban a encontrar con tal pregunta a un buen operador de PC, porque la respuesta que ellos tenian registrado era de usar al "Movie Explorer (ALT+F3)" para encontrar ese código;
Por suerte esa empresa desaparecio, y espero que no realizen mas examenes de sistema porque pienso que esos tipos de directores/project leader provocan una frenada al crecimiento de la technologia con sus desconocimientos;

Al fin el proposito de esta nota es la de demostrar que con el código se puede realizar efectos asombrosos que un diseñador gráfico realizaria usando el Photoshop y Flash;

El botón siguiente fue armado en AS3 (en principio lo habia hecho en AS2); A este objeto se le puede aplicar facilmente un redimensionamiento sin redibujarlo (usando la propiedad scale9Grid) y manteniendo calidad gráfica usando los filtros introducidos en el Flash 8;

(Either JavaScript is not active or you are using an old version of Adobe Flash Player. Please install the newest Flash Player.)

El botón se lo puede instanciar con las dimensiones seteada en el constructor y seteand la función onClick:

	var button:CoolButton = new CoolButton(200, 40);
	button.text = "Cool Button !";
	button.onClick = function():void
	{
		trace("CoolButton Click!");
	}
	button.dispatchClickOnly = false;
	addChild(boton);

Tambien se lo puede instanciar sin las dimensiones y asignarsela luego:

	var button:CoolButton = new CoolButton();
	button.text = "Cool Button !";
	button.addEventListener(CoolButton.EVENT_CLICKED, handlerClickButton);
	addChild(button);
	button.setDimension(200, 40);

En este ultimo caso se utilizo un receptor de evento Listener para capturar el evento del click en vez de la función onClick;
El registro de evento para el caso de este botón se encuentra como variable estatica en el objeto Coolbutton (CoolButton.EVENT_CLICKED), por eso se la puede invocar sin instanciarla;

(Either JavaScript is not active or you are using an old version of Adobe Flash Player. Please install the newest Flash Player.)

Código fuente de "Coolbutton":
CoolButton.as

Para implementarlo, simplemente pegar el contenido en un archivo Coolbutton.as que este ubicado en la carpeta com.nessy.util;
La estructura de carpeta tanto en Flash CS3 como en Flex - ActionScript Project tiene que quedar de la siguiente forma:


[]com
    []nessy
        []util
            Coolbutton.as
test.as

El código fuente en ActionScript Project (Flex) con los "sliders" se encuentra ubicado en la siguiente dirección: http://code.google.com/p/coolbutton;
De esta forma se pueden bajar con un cliente SVN (ej: TortoiseSVN) y usar el projecto AS3 entero (usando Import... en Flex Builder) de la siguiente URL:
http://coolbutton.googlecode.com/svn/trunk/AS3/;

Categories: Actionscript Tags:

Listado de Nombre de columna con SQL

Martes, 15 de abril de 2008 Nessy Sin comentarios

Truquito para leer los nombres de las columnas con SQL (y datos adicionales) con Oracle. Simplemente ejecutar la siguientes sentencia SQL.

SELECT
	column_name
FROM
	all_tab_columns
WHERE
	table_name = 'NOMBRE_DE_LA_TABLA'

Y para el caso que usemos esquemas:

SELECT
	column_name
FROM
	all_tab_columns
WHERE
	table_name = 'NOMBRE_DE_LA_TABLA'
	AND OWNER = 'CREADOR_DEL_ESQUEMA'

Este devolveria simplemente el nombre de la columna, si reemplazan column_nam por * veran datos interesantes.

Categories: SQL Tags: , , , ,