Ejemplo Kettle para conectarnos a Sap (con el plugin ProERPConn)

En una entrada anterior del blog vimos que con Talend nos podiamos conectar a Sap sin necesidad de comprar ningún plugin o complemento adicional en la versión Open Studio. Tan solo habia que disponer del conector Java sapjco.jar, que Sap ofrece libremente a sus clientes, y utilizar los componentes de Talend tSapInput y tSapOutput. La comunicación con Sap era en ambas direcciones, permitiendo tanto la lectura como la escritura en el través de los módulos de función (las llamadas RFC). Ademas, en las versiones de pago de Talend, hay funciones adicionales que incluyen asistentes, la lectura directa del metadata de Sap (diccionario de datos, módulos de función  y bapis, recuperación de la documentación de las RFC y su test online)  y por tanto, una mayor facilidad de uso, ya que en la versión Open es muy dificil de configurar el componente y la documentación al respecto brilla por su ausencia.

Navegación por los modulos de función RFC de Sap desde Talend

Si nos vamos a Pentaho Data Integration (Kettle), no hay un conector disponible en la versión libre. Pero si tenemos una opción de pago a través del plugin ProERPConn, de la empresa Proratio, con un coste de 2.900 Euros por puesto. Tienen un versión de evaluación de 30 días, que es la que he utilizado para la elaboración de este ejemplo. Vamos a explicar la forma de configurarla y un ejemplo de su uso.

Configuración del Plugin (Windows).

Una vez nos registremos en la Web del fabricante, recibiremos un correo con la documentación y un fichero comprimido con los ficheros para añadir el nuevo “step” o componente a nuestra configuración de Kettle. Los pasos a seguir son los siguientes:

  • Descomprimir el fichero recibido en el directorio [Kettle-Directory]\plugins\steps. Este será el lugar del cual leera la aplicación para tener disponible el plugin y poder utilizarlo como un step o paso mas dentro de las transformaciones.
  • Instalar el conector sapjco de Sap: para ello dejaremos caer el fichero sapjco.jar en el mismo directorio de antes. Además, el fichero sapjcorfc.dll lo copiaremos al directorio [Kettle-Directory]\libswt\win32. Finalmente, si tenemos una versión anterior de la dll librfc32.dll en el directorio [Windows]\System32, la sustituiremos con la que nos hemos descargado de Sap (os recuerdo que para poder descargarnos el sapjco tenemos que ser clientes de Sap o tener usuario de su portal). Las versiones de Jco que podemos utilizar son la 2.1.6 o 2.1.8.

En este momento, ya podemos arrancar Kettle y al crear una nueva transformación,nos aparece en el grupo Input el paso ProERPconn – PRORATIO SAP Connector. Al colocarlo en la ventana de diseño, cuando hacemos doble click sobre el nos pedirá la clave de activación (que nos mandará el fabricante al enviarles el correspondiente Product Key).

Nuevo paso disponible en la seccion Input para el nuevo plugin

Una vez activado, esta disponible el componente para empezar a realizar lectura de tablas desde Sap, todo de una forma integrada con el diccionario de datos. Para entender mejor como funciona el plugin, hemos de saber que por detras esta utilizando la Remote Function Call de Sap llamada RFC_READ_TABLE, que nos permite realizar tanto la lectura del diccionario de datos de dichas tablas, así como de su contenido. La herramienta, en el caso de que la compremos, ofrece una RFC customizada adicional a la estandar que ofrece mejoras de rendimiento, controles de seguridad de acceso, permite el uso de campos de coma flotante y soluciona algunos problemas que existen con la version 4.7 de Sap. En nuestro caso, al estar con la demo, no disponemos de esa RFC mejorada, y como estamos en la versión 4.7, hemos detectado algunos problemas de funcionamiento incorrecto del plugin al realizar las lecturas desde Sap.

Vamos a ver un ejemplo completo de lectura de datos. Vamos a extraer el maestro de materiales de Sap haciendo un lookup contra tablas adicionales.

Uso del Plugin para recuperar datos del maestro de materiales.

En primer lugar, vamos a definir la conexión a base de datos que nos va a permitir conectarnos a Sap. Al crear una nueva, después de la instalación del Plugin, nos aparece una nuevo tipo llamado Sap R/3 System. En la definición de la conexión indicaremos el host donde esta instalado nuestro Sap (Host Name), el número de sistema (System Number. Normalmente el 00, a no ser que tengamos varios servidores), el mandante (Sap Client), el lenguaje (Language. Importante, pues determina el idioma en que se recuperan posteriormente las definiciones del diccionario de datos) y finalmente el usuario y la contraseña que se utilizaran (se utilizaran los permisos que tenga este usuario. Es importante que el usuario tenga las autorizaciones para ejecutar el módulo de función RFC_READ_TABLE y los permisos para leer en las diferentes tablas).

 

Plugin Sap - Definición Conexion

Una definida la conexión, ya podemos utilizar el paso para realizar la lectura de datos. En nuestro ejemplo, vamos a leer los registros del maestro de materiales (tabla MARA). Con los datos leidos, realizaremos un lookup para completar la descripción del material (tabla MAKT) y del Grupo de Material (Familia).

 

Plugin Sap - Configuración Step

En la imagen podemos ver los diferentes elementos que se pueden configurar en el paso. Vamos a ver un poco mas en detalle cada uno de ellos:

  • Sap Connection: es la conexión a Sap que previamente habremos definido en las conexiones de base de datos.
  • Tablename: nombre de la tabla donde queremos leer los datos. Con el boton Find Table disponemos de un asistente para buscar las tablas en el diccionario de datos de Sap. La busqueda la podemos hacer por el nombre de la tabla, por su descripción, por los campos incluidos en ella, por las claves principales o foraneas. En la busqueda podemos indicar el idioma con el que se recuperan las descripciones de los objetos.

 

Plugin Sap - Selección Tablas

  • Selected Fields: una vez indicada la tabla, seleccionaremos los nombres de los campos que queremos recuperar. Disponemos de un asistente que nos recupera los campos existentes en la tabla con su descripción.

Plugin Sap - Selección Campos

  • Where Clause: restricciones a la recuperación de la información. Al añadir los campos con el asistente en esta sección, se autollena una condición de referencia teniendo en cuenta el tipo de datos del campo. Aqui podemos indicar las condiciones para que se restringa la recuperación de información.

Estos son los parámetros básicos del Step. Ademas, podremos indicar otros valores, como el número de registros a recuperar o a ignorar, la conversión del tipo date a char, etc. Teniendo en cuenta esto, vamos a realizar nuestro ejemplo. El gráfico completo quedaría algo así:

Plugin Sap - Ejemplo Transformacion

Hemos realizado 3 lecturas de tablas desde Sap. En el step SAP – Materiales, leemos de la tabla MARA todos los registros que cumplen unas determinadas condiciones. A continuación, en el paso BUSCA_DESCRIP (del tipo Stream Lookup), realizamos la busqueda de la descripción del material en los registros leidos en el paso SAP – Descripción Material (que lee de la tabla de descripciones MATK). A continuación, el flujo de datos se pasa al paso SAP – Descripción Familia, donde hacemos un lookup, pero de una forma directa para cada uno de los valores del flujo. Podeis ver en la imagen siguiente como hemos añadido en las condiciones del Where para recuperar los valores de la tabla T023T (descripción de la familia del material), el campo del flujo, usando la notación [campo].

Plugin Sap - Lookup con campo del flujo en condición

Finalmente renombramos los nombres de los campos (en el paso RENOMBRA_CAMPOS del tipo Select/Rename Values) y pasamos los resultados a una hoja Excel (hubieramos podidos realizar mas transformaciones sobre los datos o guardarlos en una tabla destino de BD).

Conclusiones.

El plugin de Proratio solo permite la lectura de tablas, y siempre en sentido de salida (extracción), aunque como punto fuerte podemos destacar que esta completamente integrado con el diccionario de datos de Sap y es muy fácil bucear por las tablas y campos. Si lo comparamos con Talend y su componente Sap,  este nos  permite tanto la comunicación de entrada y de salida. Ademas, permite trabajar con cualquier RFC (no solo la RFC_READ_TABLE como Proratio), lo que nos da muchisimas posibilidades de una integración real de Sap con el exterior y de reutilización de componentes estandar diseñados para operaciones especificas (creación de pedidos de venta, realización de movimientos de material o procesos de contabilización). Incluso podriamos crear nuestras propias RFC en Abap para tareas especificas y llamarlas desde Talend, con todas las posibilidades que ello ofrece. La versión más basica de pago, la Talend Integration Suite, tiene un coste por puesto de 4000$, pero incluye soporte técnico, el acceso a los asistentes (como el de Sap) y funcionalidades avanzadas (como el repositorio compartido para trabajo en grupo).