2012-02-02 29 views
5

necesito para extraer datos de un sistema SAP ABAP en un formato que puede ser cargado en una base de datos Oracle (xlsx, csv, DMP .. etc)¿Cómo extraer datos de un sistema SAP ABAP?

Una vez que los datos se extraen voy a utilizar Pentaho para cargar en la base de datos Oracle.

¿Hay alguna forma de extraer los datos de SAP? También necesitaré automatizarlo (la extracción) pero eso no es un gran problema en este momento, puedo imaginarme/preocuparme por esa parte más adelante.

Si no es posible hacerlo, una explicación de por qué sería útil.

Respuesta

6

Tiene varias opciones para hacer esto.

Si está ejecutando SAP BW, hay muchas herramientas estándar para ayudarlo a realizar extracciones y automatizar los procesos.

De lo contrario, puede escribir un programa ABAP simple (tipo 1) para leer datos de tablas y ponerlos en un archivo plano.

De lo contrario, podría escribir un módulo de función habilitado remotamente (RFC) y llamarlo utilizando la biblioteca de RFC de SAP.

También puede ajustar su función de RFC con un servicio web y llamarla a través de SOAP/HTTP.

Por último, si tiene acceso a la base de datos, es posible que incluso pueda escribir una secuencia de comandos para extraer los datos que necesita.

Un ejemplo sencillo de un programa para extraer algo de una tabla de base de datos:

report ZEXTRACT_EXAMPLE. 

data: lt_t001 type table of t001. 
data: ls_t001 type t001. 
data: lv_filename type string value '/tmp/outfile.txt'. 

select * from t001 into table lt_t001. 

open dataset lv_filename for output in text mode encoding default. 

loop at lt_t001 into ls_t001. 
    transfer ls_t001-bukrs to lv_filename. 
endloop. 

close dataset lv_filename. 

Esto es muy primitivo, pero se entiende la idea. Selecciona los datos de una tabla DB en una tabla interna (en la memoria) y los escribe en un archivo llamado /tmp/outfile.txt en el servidor, desde donde puede recogerlo. (Debería modificar la salida para que esté en su formato requerido).

Puede programar su programa con SM36 para que se ejecute periódicamente como trabajo de fondo.

+0

Gracias. Voy a probar esto. – Joshua1729

+2

@mydoghasworms: Bueno, este programa apenas funcionará si la tabla tiene, por ejemplo, 10 millones de registros. Uno debería usar la instrucción 'OPEN CURSOR' para seleccionar los datos y luego escribirlos sucesivamente en un archivo. – Jagger

+1

@mydoghasworms: Una cosa más ... si la tabla contiene algunos campos que no son de carácter, obtendrá una longitud diferente para, por ejemplo, enteros o decimales en el archivo de texto. – Jagger

2

También puede usar el módulo de función habilitado remotamente 'RFC_READ_TABLE', puede darle cualquier nombre de tabla y un separador, y devolverá la tabla interna muy formateada para usted.

+0

RFC_READ_TABLE tiene varias deficiencias: - funciona solo si la tabla tiene todos los campos CHAR (una INT o FLOAT y está bloqueado), - el ancho máximo de la tabla es 512, - solo funciona en Non-Unicode (si el back-end es Unicode, la alineación interna de los campos se corrompe ...) - y finalmente es una gran falla de seguridad, posiblemente pasando por alto las autorizaciones de nivel de negocios con las que la tabla en cuestión puede estar protegida ... En otras palabras: nunca usarlo! – Lanzelot

+0

De acuerdo. Excepto que he usado RFC_READ_TABLE en sistemas Unicode sin problema? – tomdemuyt

-1

Una opción para resolver esto es encontrar un controlador JDBC para los datos de SAP ERP que reúne las tablas mirando el nivel de la tabla lógica de SAP.

Una vez que tenga el controlador JDBC correcto, puede usarlo desde Pentaho.

He probado este tipo de solución JDBC sobre SAP ERP con Talend y funciona muy bien.

RFC_READ_TABLE como se señaló en los comentarios anteriores es bastante limitado en cuanto a la cantidad de campos de tabla y también el número de registros, sin mencionar los problemas de conversión.

+0

RFC_READ_TABLE de hecho es malo. Pero esta solución se ve aún peor: ¿realmente entregaría la contraseña de su base de datos SAP a alguna secuencia de comandos JDBC que se ejecute en algún lugar y podría verse comprometida fácilmente? Podría equivaler a la entrega de las joyas de la corona de su empresa a cualquier hacker viejo (o empleado poco confiable), que logran encontrar esa secuencia de comandos ... – Lanzelot

Cuestiones relacionadas