Conectar Java con SAP JCO Connector

En este ejemplo veremos como conectarnos a SAP desde Java y consultar los datos de una tabla de SAP, para lograr esto utilizaremos el driver JCO Connector, que tambien se podría usar WebService para la coneccíon pero esto sera otro tema.

Ahora debemos bajarnos el Conector del siguiente link SAP Marketplace nos pedirá un usuario y contraseña este usuario lo tienen las empresas, partners, y otros que tienen alguna relación con SAP, pero si no tenemos el usuario para poder acceder a la página los bajamos de este link click aqui

Ingresamos a SAP y creamos una función RFC que no hará mas que traernos una lista de registros de una tabla de SAP para luego procesarlo en nuestra aplicación en java.

Entramos a la transacción SE37 para crear nuestra función: ZRCF_SPFLI_LIST



Seleccionamos la pestaña "Import"...


El parámetro "CARRID" será opcional, luego en la pestaña "Tables":



El parámetro "FLIGHT_LIST" nos devolverá los valores que recogeremos en nuestra aplicación en java.

En la pestaña "Source code" escribiremos el código que obtendrá los datos de la tabla de SAP.



Para terminar con nuestra función tenemos que indicarle que será un RFC (Remote Function Call) para poder acceder a el desde la aplicación.

Grabamos y Activamos la función, y ya se encuentra listo para usarlo.

Antes de pasar a crear nuestra aplicacion, debemos colocar las librerias del jco connector en la carpeta de windows, cuando descargamos el conector nos adjunta una dll:

librfc32.dll : colocar en la carpeta "C:\WINDOWS\system32\"

Ahora pasaremos a crear la aplicación en java que accederá a la función rfc, para esto creamos un nuevo proyecto "Java Application" e ingresamos el nombre del proyecto, seguidamente agregamos la librería al proyecto "sapjco":




Escribiendo en nuestra clase:

Importamos la librería:


Declaramos las variables que utilizaremos:



Establecemos la conexion al servidor...

Accedemos a la función:

Recorremos los valores de nuestra tabla que se obtuvo de la función:


Ejecutamos y el resultado es...

Código Completo:
package test_sap_jco;

import com.sap.mw.jco.*;
/**
*
* @author carlos
*/
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
JCO.Client client = null;
JCO.Function funcion = null;
JCO.Table t_spfli = null;

IRepository repositorio = null;
IFunctionTemplate ftemplate = null;
try {
client = JCO.createClient("000",
"bcuser",
"minisap",
"EN",
"localhost",
"00");

//Creando el repositorio para las funciones
repositorio = JCO.createRepository("MiRepositorio", client);
//Indicamos que funciones queremos utilizar
ftemplate = repositorio.getFunctionTemplate("ZRCF_SPFLI_LIST".toUpperCase());
//Obtenemos la funcion del SAP
funcion = ftemplate.getFunction();
//Pasamos parametros a la funcion
funcion.getImportParameterList().setValue("AA", "CARRID");
//Ejecutamos la funcion
client.execute(funcion);
//Capturamos el parametro de Salida
t_spfli = funcion.getTableParameterList().getTable("FLIGHT_LIST");

System.out.println("Nro de Filas:" +t_spfli.getNumRows());

for (int i= 0;i<t_spfli.getNumRows();i++){
t_spfli.setRow(i);
System.out.println(t_spfli.getString("CARRID") + " " +
t_spfli.getString("CONNID") + " " +
t_spfli.getString("COUNTRYFR") + " " +
t_spfli.getString("CITYFROM") + " " +
t_spfli.getString("AIRPFROM") + " " +
t_spfli.getString("COUNTRYTO") + " " +
t_spfli.getString("CITYTO"));
}
} catch (Exception e) {
System.out.println("Error:" +e.getMessage());
}
}
}

Comentarios

  1. Oye excelente aportacion, sabes como puedo usar este conector y el dll en un aplicacion web con NetBeans, he agregado el conector pero me marca un error

    ResponderEliminar
  2. hola vtun gracias, pero podrias enviar que es lo k te marca error?, para identificar el problema, saludos....

    ResponderEliminar
  3. Hola carlos he resuelto el problema, colocando el conector sap y su dll en la carpeta de librerias del servidor jee glasfish y he logrado usar las fuciones de sap a travez de una aplicación web con netbeans

    saludos

    ResponderEliminar
  4. Hola Carlos, tu tutorial tiene una pinta EXCELENTE. Justo lo que andaba buscando... Lo probaré en breve!

    ResponderEliminar
  5. Hola Carlos, lo probé pero me quedé en el intento. En el partado TABLES, cuando le pongo el "TYPE" me da error de que "Los parametros TABLES están obsoletos". Sabes alguna otra forma de poder probar tu ejemplo?
    Gracias y un saludo.

    ResponderEliminar
  6. Hola Athlit, el mensaje que te muestra en esa pestaña "TABLES" es un mensaje de advertencia solo presiona enter y continua creando la función rfc y no tendrás ningún problema, espero haberte ayudado... Saludos.

    ResponderEliminar
  7. Hola Carlos,
    gracias por responder tan rápido. Efectivamente, no se como no pude darme cuenta, jeje. Ya la tengo grabada, pero al crear la clase no me reconoce los metodos.
    Tengo el JCO 3.0.4 que en vez de tener el package "com.sap.mw.jco" he visto el "com.sap.conn.jco", pero no tiene los metodos Client, Function o Table en la clase JCO.class, y claro, no me reconoce las sentencias. Puede ser por la versión del JCO?
    Muchas gracias por contestar y por la rapidez.
    Un saludo.

    ResponderEliminar
  8. Athilt, efectivamante es la version del SAP Java Connector y en la version 3 cambia casi todo desde la conexion hasta como invocar a los metodos...te adjunto la documentacion de la version jco3: "http://sities.google.com/site/cefjoseph/descargas/", y en cuanto me de un tiempo posteo para actualizar a esta version. si deseas enviame un mensaje al correo para responderte y enviarte los archivos de ejemplos de esta version.. Saludos.

    ResponderEliminar
  9. Sorry, la url de la documentacion es: "http://sites.google.com/site/cefjoseph/descargas/" el nombre del archivo en la lista es el "sapjco3.zip"

    Saludos.

    ResponderEliminar
  10. Para no saturar la columna, te he enviado un E-mail!
    Gracias!

    ResponderEliminar
  11. Hola Carlos, tengo el jco3 y no encuentro con que clases trabajar. Muy buen post!

    ResponderEliminar
  12. Hola! Me gustaría saber si puedo convertir esta función de Java que hemos creado y utilizarla en en proyecto web y utilizarla en un Web Service, para poder consumir la función desde el WS.

    Lo he intentado pero tengo problemas con las ABAPExceptions, no puedo utilizar la función del WS ya que revienta cuando esta accediendo al SAP y entonces se cae el programa.

    ResponderEliminar
  13. Hola, tengo un problema con la libreria lo que pasa es que tengo 2 aplicaciones que ocupan esta libreria trabajando en el mismo servidor pero cuando estoy ocupando una no puedo ocupar la otra porque me dice lo siguiente:

    java.lang.ExceptionInInitializerError: JCO.classInitialize(): Could not load middleware layer 'com.sap.mw.jco.rfc.MiddlewareRFC'
    JCO.nativeInit(): Could not initialize dynamic link library sapjcorfc [Native Library C:\WINDOWS\system32\sapjcorfc.dll already loaded in another classloader]. java.library.path [C:\Program Files\Apache Software Foundation\Tomcat 5.5\bin;.;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\Windows Imaging\;C:\Program Files\OmniBack\bin\]
    com.sap.mw.jco.JCO.(JCO.java:776)

    si me pudiesen ayudar es urgente...

    muchas gracias

    ResponderEliminar
  14. Hola Fresia, favor revisa este link:
    http://forums.sdn.sap.com/thread.jspa?threadID=727934

    ResponderEliminar
  15. Estoy intentando crear la función RFC en SE37, siguiendo a paso a paso las instrucciones pero al momento de guardar me indica 'no se ha encontrado ningun servidor de actualizacion para el contexto :S:'. Agradecería si me puedes ayudar. :)

    ResponderEliminar
  16. Hola, estoy trabajando en una aplicacion con Java, alguien sabe como cerrar la conexión son SAP de forma apropiada, después de ejecutar la función? Gracias de antemano. Saludos!

    ResponderEliminar
  17. Buenas tardes, necesitaría que dentro de sus posibilidades pudiera postear un ejemplo con la versión 3 del conector . saludos

    ResponderEliminar
  18. Listo Alain, años que ya no posteo en el blog, voy a darme un tiempo para hacer con la versión 3... muy pronto...

    ResponderEliminar
  19. Buenas yo estaría tambien interesadisima en la versión 3 del conector porque estoy intentando por todos los medios conectarme y nos soy capaz, creo que hay algo que se me escapa. un saludo y muchas gracias

    ResponderEliminar
  20. Gracias por el tutorial. Podrias decirme de donde descargo el .jar. Es que no esta en los archivos, solo hay 2 librerias dll.

    Gracias

    ResponderEliminar
  21. Anselmo, las ultimas versiones tienes que descargarte del SAP Marketplace. Al inicio de este post esta un acceso directo.

    ResponderEliminar
  22. estoy utilizando minisap ,accediendo con bcuser pero me sale el siguiente error "Error:You are not authorized to logon to the target system (error code 1)." como puedo darle permisos al usuario para llamadas rfc

    ResponderEliminar
    Respuestas
    1. Hola dianapozo, debes ingresar a la transaccion su01 y en la pestaña perfil debes ponerlo SAP_ALL

      Eliminar
  23. Hola! tienes algún ejemplo en java para enviar datos HACIA una RFC? Es decir, necesito enviar una estructura de cabecera y detalles (asientos contables) desde JAVA a SAP a través de una RFC. Podrás ayudarme?
    Desde ya, muchas gracias!!!

    ResponderEliminar
  24. Hola Carlos, una pregunta, yo necesecito hacer todo lo contrario. Es decir llamar desde SAP o ABAP un .JAR para pasarle y ejecutar un servicio. Tienes algun ejemplo que me puedas mostrar. Gracias.

    Saludos. Luis.

    ResponderEliminar
    Respuestas
    1. Hola Luis,

      Te recomiendo crear un servicio externo(cualquier lenguaje), y que luego invoques el mismo desde SAP (es mas rápido y transparante). Revisa estos enlaces:

      http://www.sapdev.co.uk/sap-webapps/sap-webservices/ws_abapproxy.htm

      http://www.netweavercentral.com/index.php/2011/consume-a-web-service-in-abap/

      Eliminar
  25. hola amigos yo necesito vaciar unos datos de sap a mysql quisiera hacerlo con una aplicacion en java para que al momento de ejecutarla se valla actualizando mi DB en mysql, pero la verdad ando muy perdida todo esto de sap es nuevo no tengo idea como hacerlo. alguien me puede ayudar?

    ResponderEliminar
    Respuestas
    1. Hola dakota,

      Para iniciar el requerimiento, debes tener el RFC(función en SAP) o un servicio que te traiga la información que necesitas de SAP(para esto consulta con las personas que manejan SAP, uno puede ser el consultor Abap). Mientras te pasan el RFC, vas avanzando con el material para conectarte a SAP (JCO)

      Eliminar
  26. buenos días
    llevo dándole vueltas a un problema que no consigo resolver. ¿pueden ayudarme?
    he conseguido una macro de VBA que me importa a un fichero EXCEL los datos de una tabla de SAP.
    ahora intento crear otra que me permita ejecutar una transacción y que me deje bajar los datos a una hoja EXCEL. tras lo que he leido en la web parece que el camino es usar una RFC pero me da un error 1001 "SAP REMOTE FUNCTION CALL" en la línea del código
    "Set RfcCallTransaction = FunctionCtrl.Add("RFC_CALL_TRANSACTION")"
    ¿puede ser que me falten librerías en VBA?
    estoy usando SAPGUI 720 y EXCEL 2010
    ¿alguna idea?
    saludos

    ResponderEliminar


  27. manuel12 de junio de 2013 03:14

    buenos días
    llevo dándole vueltas a un problema que no consigo resolver. ¿pueden ayudarme?
    he conseguido una macro de VBA que me importa a un fichero EXCEL los datos de una tabla de SAP.
    ahora intento crear otra que me permita ejecutar una transacción y que me deje bajar los datos a una hoja EXCEL. tras lo que he leido en la web parece que el camino es usar una RFC pero me da un error 1001 "SAP REMOTE FUNCTION CALL" en la línea del código
    "Set RfcCallTransaction = FunctionCtrl.Add("RFC_CALL_TRANSACTION")"
    ¿puede ser que me falten librerías en VBA?
    estoy usando SAPGUI 720 y EXCEL 2010
    ¿alguna idea?
    ME URGE MUCHO
    saludos

    ResponderEliminar
  28. Excelente tutorial apenas ahora lo veo pero es excelente lo unico que creo que le falta es al final cerrar la conexion

    ResponderEliminar
  29. Tableau Data Visualization Software
    SQIAR (http://www.sqiar.com/solutions/technology/tableau) is a leading Business Intelligence company and provides Tableau Software consultancy across United Kingdom and USA

    ResponderEliminar
  30. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  31. Hola, muchas gracias por todo,

    ¿Que tal vas con la versión 3? No encuentro ejemplos y la verdad es que me ayudaría muchísimo si puedes postear alguno.

    Muchas gracias

    ResponderEliminar
  32. Hola Carlos,
    Tengo una duda con respecto a las librería JCO Connector. Utilizo una laptop de 64 bits., esta librería soporta esta arquitectura?

    ResponderEliminar
  33. Buenas noches, Amigo estoy usando el JCo3, pero cuando hago el import import com.sap.mw.jco.*; no me lo acepta y si hago el import asi (import com.sap.conn.jco.*;) cuando intento crar el JCO.Cliente no esta disponible. Que hacer en este caso? Muchas gracias

    ResponderEliminar
  34. Hola, yo uso jco3 y ago un proceso para crear una orden de venta en sap, donde se insertan datos, el caso es que hago el proceso y al parecer no me genera error, pero al consultar en sap si hubo registro, este no aparece, y si hago el commit en mi código java, alguna idea dle por que?

    ResponderEliminar
  35. Hola Carlos, como debería pasar los datos de Java a una estructura en SAP. Saludos

    ResponderEliminar
  36. Carlos al descargar el conector no lo trae incluido el *.rar me puedes apoyar en proporcionarlo por favor.

    ResponderEliminar
    Respuestas
    1. Asi es, no lo está incluyendo, porfa podrías enviarmelo a este correo eduardo_396_tr@hotmail.com ,te lo agradecería

      Eliminar
  37. que tal estoy tratando de realizar esto pero al agregar la libreria import com.sap.mw.jco.*; solo permite import com.sap.conn.jco.* pero al momento de usar el codigo me da error por todas partes que puedo hacer ayuuuuda

    ResponderEliminar
    Respuestas
    1. sucede por la versión del conector, de seguro estás usando versión 3.

      Eliminar
    2. te puedo pasar las dll y los jar para que valides y si gustas te paso el ejemplo que he hecho para probar. mandame tu correo y te ayudo

      Eliminar
    3. Hola William, podrías pasarmelos a mi? mi correo es ger.gnr.k@gmail.com, gracias y saludos

      Eliminar
    4. Hola Willian , un favor , podrias pasarme las dll y los jar ? mi correo es iepvncordova@gmail.com. Gracias

      Eliminar
  38. grandioso aporte fue parte de saber como funcionaba. En lo personal hice yo una RFC y ahi busque las DLL que hay que copiar a windows\system32 y despues comenzar a programar.. funciono al final con todooo

    ResponderEliminar
    Respuestas
    1. Este comentario ha sido eliminado por el autor.

      Eliminar
    2. Hola William , podrías ayudarme por favor como lograste la conexión a sap , yo aun no lo logro aplicado el ejemplo mencionado por carlos debido a la versión del conector.

      Gracias.

      Eliminar
    3. hola oz blancas si esto ya es obsoleto como dices me imagino ya tienes otra forma o conoces otra forma de hacerlo, crees que me puedas apoyar ya que me encuentro un poco trabada en esto. te dejo mi correo camador38@gmail.com ojala puedas comunicarte

      Eliminar
  39. cual es la nueva forma??? tomen en cuenta que SAP Gateway no esta en versiones antes de EHP7, esto es funcional para versiones antiguas de SAP

    ResponderEliminar
    Respuestas
    1. Ahora debes hacerlo con la versión JCO 3

      Eliminar

Publicar un comentario

Entradas populares de este blog

Ejemplo Aplicacion Web con BSP en SAP

ALV Object Model (cl_salv_table)