Conectar Java con SAP JCO Connector
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:
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...
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());
}
}
}
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
ResponderEliminarhola vtun gracias, pero podrias enviar que es lo k te marca error?, para identificar el problema, saludos....
ResponderEliminarEste comentario ha sido eliminado por el autor.
EliminarHola 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
ResponderEliminarsaludos
Hola Carlos, tu tutorial tiene una pinta EXCELENTE. Justo lo que andaba buscando... Lo probaré en breve!
ResponderEliminarHola 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?
ResponderEliminarGracias y un saludo.
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.
ResponderEliminarHola Carlos,
ResponderEliminargracias 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.
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.
ResponderEliminarSorry, la url de la documentacion es: "http://sites.google.com/site/cefjoseph/descargas/" el nombre del archivo en la lista es el "sapjco3.zip"
ResponderEliminarSaludos.
Para no saturar la columna, te he enviado un E-mail!
ResponderEliminarGracias!
Hola Carlos, tengo el jco3 y no encuentro con que clases trabajar. Muy buen post!
ResponderEliminarHola! 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.
ResponderEliminarLo 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.
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:
ResponderEliminarjava.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
Hola Fresia, favor revisa este link:
ResponderEliminarhttp://forums.sdn.sap.com/thread.jspa?threadID=727934
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. :)
ResponderEliminarHola, 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!
ResponderEliminarBuenas tardes, necesitaría que dentro de sus posibilidades pudiera postear un ejemplo con la versión 3 del conector . saludos
ResponderEliminarListo Alain, años que ya no posteo en el blog, voy a darme un tiempo para hacer con la versión 3... muy pronto...
ResponderEliminarBuenas 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
ResponderEliminarGracias por el tutorial. Podrias decirme de donde descargo el .jar. Es que no esta en los archivos, solo hay 2 librerias dll.
ResponderEliminarGracias
Anselmo, las ultimas versiones tienes que descargarte del SAP Marketplace. Al inicio de este post esta un acceso directo.
ResponderEliminarestoy 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
ResponderEliminarHola dianapozo, debes ingresar a la transaccion su01 y en la pestaña perfil debes ponerlo SAP_ALL
EliminarHola! 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?
ResponderEliminarDesde ya, muchas gracias!!!
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.
ResponderEliminarSaludos. Luis.
Hola Luis,
EliminarTe 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/
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?
ResponderEliminarHola dakota,
EliminarPara 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)
buenos días
ResponderEliminarllevo 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
ResponderEliminarmanuel12 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
Excelente tutorial apenas ahora lo veo pero es excelente lo unico que creo que le falta es al final cerrar la conexion
ResponderEliminarTableau Data Visualization Software
ResponderEliminarSQIAR (http://www.sqiar.com/solutions/technology/tableau) is a leading Business Intelligence company and provides Tableau Software consultancy across United Kingdom and USA
Este comentario ha sido eliminado por el autor.
ResponderEliminarHola, muchas gracias por todo,
ResponderEliminar¿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
Hola Carlos,
ResponderEliminarTengo una duda con respecto a las librería JCO Connector. Utilizo una laptop de 64 bits., esta librería soporta esta arquitectura?
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
ResponderEliminarHola, 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?
ResponderEliminarHola Carlos, como debería pasar los datos de Java a una estructura en SAP. Saludos
ResponderEliminarCarlos al descargar el conector no lo trae incluido el *.rar me puedes apoyar en proporcionarlo por favor.
ResponderEliminarAsi es, no lo está incluyendo, porfa podrías enviarmelo a este correo eduardo_396_tr@hotmail.com ,te lo agradecería
Eliminarque 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
ResponderEliminarsucede por la versión del conector, de seguro estás usando versión 3.
Eliminarte 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
EliminarHola William, podrías pasarmelos a mi? mi correo es ger.gnr.k@gmail.com, gracias y saludos
EliminarHola Willian , un favor , podrias pasarme las dll y los jar ? mi correo es iepvncordova@gmail.com. Gracias
Eliminargrandioso 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
ResponderEliminarEste comentario ha sido eliminado por el autor.
EliminarHola 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.
EliminarGracias.
esto ya es obsoleto
Eliminarhola 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
Eliminarcual 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
ResponderEliminarAhora debes hacerlo con la versión JCO 3
Eliminar