Conectando la aplicación de .NET con SAP

Share Button

En una entrada anterior ya se dio una pequeña introducción sobre lo que es SAP y de las ventajas que puede llegar a tener. En esta ocasión se explicará brevemente cómo desde tu aplicación de .NET ejecutar una Llamada a Función Remota (RFC por sus siglas en inglés) de SAP.

Requisitos

Para este pequeño ejemplo vamos a necesitar lo siguiente:

SAP .NET Connector 3.0 (se puede descargar aquí, es necesario estar registrado).
Ambiente de desarrollo, en este caso utilizaremos Visual Studio 2010.
Ambiente real de SAP con al menos una RFC creada.

Entendiendo la comunicación entre SAP y aplicación .NET

Antes de empezar a desarrollar nuestra pequeña aplicación, expliquemos un poco más a detalle sobre la RFC.

Una RFC nos permite hacer el llamado a un segmento de código realizado en ABAP, este segmento de código está diseñado para ser disparado por alguna aplicación externa utilizando el protocolo TCP/IP, es decir, en pocas palabras, vamos a llamar una función realizada en ABAP desde nuestra aplicación de .NET. Como toda función en programación puede recibir y retornar valores.

Para este ejemplo tenemos la RFC ficticia con el siguiente nombre: ZHP_PERSONA_TEST, la cual se encargará de guardar los datos de una persona y recibir los siguientes parámetros de entrada:

Tabla1

 

Tabla2

Devolviéndonos los siguientes datos:

Básicamente lo que haremos en la aplicación será:
Crear la conexión a SAP y probarla.
Hacer el llamado a la RFC con los parámetros de entrada.
Obtener los datos que nos devuelve la RFC.
Un punto importante a tomar en cuenta es que no es necesario conocer el código ABAP que se está ejecutando, nosotros simplemente lo llamamos y nos retornará los valores con los que trabajaremos. Sin embargo recomiendo mantener una buena comunicación con la persona encargada de administrar la parte de SAP, para poder corregir de forma inmediata cualquier error que se pueda presentar.

Creando la aplicación

Primeramente vamos a crear un proyecto en Visual Studio, en este caso, con una aplicación de consola vale.

sapnet01

Después añadiremos las referencias de las dll de SAP a nuestro proyecto, en Visual Studio damos clic derecho al proyecto en el explorador de la solución y escogemos la opción de Agregar Referencia (Add Reference):

sapnet02

Aparecerá la siguiente pantalla en la que seleccionaremos la pestaña Browse y buscaremos la ubicación de las dll, en este caso las coloque en la carpeta bin del proyecto:

sapnet03

Con esto ya podremos utilizar el conector agregando a nuestro código la referencia:

using SAP.Middleware.Connector;

De la forma en que trabajaremos con el conector será mediante una clase, por lo que añadimos una nueva clase a la que llamaremos cSap, la cual contendrá las funciones para hacer la comunicación con SAP.

sapnet04

sapnet05

Como propiedad de la clase declaramos un objeto de la clase RfcDestination, que es el que nos ayudará a realizar la comunicación con SAP. El constructor quedaría de la siguiente manera:

sapnet06

Como se observa, es necesario un objeto RfcConfigParameters para asignarle los parámetros de configuración y después con la función RfcDestinationManager. GetDestination en el objeto oDestino se le asignan los datos necesario para la conexión.

Con esto la conexión a SAP ya debería de llevarse a cabo y por ende se podría hacer el llamado a la RFC. Pero primeramente probemos que la conexión efectivamente se está realizando. Para esto vamos a realizar un Ping, este Ping se encierra en un bloque try – catch retornando true si este se llevó a cabo de forma exitosa y falsó si el Ping tuvo algún error y por ende entro al bloque catch:

De esta forma, antes de tratar de hacer el llamado a la RFC, podemos probar si la conexión a SAP es posible.

sapnet07

Ahora que tenemos la conexión funcionando procedemos a realizar un método que llamaremos CrearPersona. Este método recibirá los parámetros de entrada para la RFC:

sapnet08

Dentro de esta función crearemos el objeto que representa la RFC con la siguiente línea de código:

IRfcFunction oFunc = oDestino.Repository.CreateFunction(NombreRFC);

En dado caso de que la RFC no existiera en SAP, se generará una excepción y el código restante no se ejecutará.

Después agregamos los parámetros de entrada de la siguiente forma:

oFunc.SetValue(“NAME”, sNombre);

Como se puede ver, la función recibe primero el nombre que tiene asignado en SAP y posteriormente el valor. De igual forma si se intenta asignar un valor a una variable que no existe o con otro tipo de dato (un entero a un char), se generará una excepción y el código restante no se ejecutará.

Se invoca la función con la siguiente línea de código:

oFunc.Invoke(oDestino);

Si todo salió correctamente obtendremos los datos de salida utilizando la siguiente línea de código:

oFunc.GetString(“ZID”)

Ahora bien nuestro método terminado es el siguiente:

sapnet09

Se puede observar que se regresa un diccionario el cual contiene los datos de salida. Ahora vamos a probar su funcionamiento en nuestra aplicación de consola, suponiendo que ya hemos capturado los datos que necesitamos para mandar llamar la RFC.

Lo que haremos será:

1. Crear nuestro objeto de la clase cSap.
2. Probamos la conexión.
3. Creamos un diccionario donde se guardara lo que retorne el método que realiza el llamado a la RFC.
4. Si se le asignó un ID Persona SAP lo imprimimos, sino imprimimos el mensaje de error.

sapnet10

Como dato extra, si entre los datos de salida se encuentra una tabla, la podemos obtener de haciendo lo siguiente:

IRfcTable rfcTabla = oFunc.GetTable(NombreTablaSAP);

Para después acceder a sus datos:

rfcTabla[Fila].GetString(“COLUMNA1”),

De esta forma se puede iterar por todas las filas de la tabla e incluso si se prefiere se puede pasar la tabla a un DataTable.

Conclusión

Crear una aplicación en .NET que se pueda conectar con SAP es una tarea bastante sencilla, los problemas pueden venir a la hora de probar la aplicación, es por eso que recomiendo estar en constante comunicación con la persona encargada de SAP.

Por ejemplo:
Para probar la aplicación anteriormente explicada, esta podría estar ejecutándose correctamente pero siempre mandando mensaje de error. Para esto es recomendable hacer la prueba junto con el encargado de SAP, de esta forma cada quien pone “Breakpoints” donde crea necesario en su código y verifican que este funcionando correctamente o monitoreando donde se encuentra el error.

Acerca del Autor

Alejandro Trejo Huerta es Ingeniero en Computación de la Universidad de Guadalajara, desarrollador .NET para DW en el área de software a la medida. Puedes contactarlo a través de la cuenta de correo info@dwtraining.mx

Publicado por DW Training

Publicado por

DW Training SC

Una empresa de IT que traslada su experiencia técnica a través de sus planes de entrenamiento. +20 años de experiencia en el ramo nos respaldan.

Deja un comentario