SAP Adapter

SAP es una de los ERP más populares disponibles en el mercado hoy en día. Las empresas que buscan aprovechar al máximo el poder de SAP a menudo desean integrarlo con otras aplicaciones, como sistemas centrales de gestión de pólizas o como las aplicaciones de gestión de relaciones con clientes (CRM), la creación de procesos end to end, ya sea on site o en la nube.

Con SysOne ISB, los clientes pueden entregar integraciones de forma rápida, fácil y rentable con el objetivar de conectar las soluciones de SAP con otros sistemas de la empresa. La integración, sin embargo, tiende a ser un reto, y sin un sistema de integración robusto que permita la sincronización de datos entre SAP ERP y otros sistemas, las empresas fracasan al optimizar sus procesos de negocio.

El adaptador de SAP permite:

  • La ejecución en línea de SAP BAPIs mediante el mapeo de las mismas utilizando XML.
  • Enviar y recibir iDocs.
  • Middleware de alta performance basado en JNI desde Java –> RFC.
  • Soporta R/3 3.1H y superiores.
  • Tranformar cualquier elemento de SAP a XML o JSON para su posterior procesamiento.

Capacidades del adaptador de SysOne para SAP.

  • Una clase simple (Singleton) para la ejecución de SAP BAPIs con un sólo método de ejecución, esta clase se puede integrar de manera sencilla con Spring para gestionar su ciclo de vida.
  • Mediante un contexto, se pueden representar todas las estructuras necesarias para el llamado de la BAPI, incluyendo valores nativos, colecciones, tablas y campos. En este contexto también se podrán recibir los resultados del llamado. Este contexto es el mismo que se utiliza desde el motor de reglas de SysOne o sea que este conector puede llegar a ser parte de un llamado nativo a un pipeline.
  • Ejecución de transformación de datos en forma bidireccional SAP->ISB e ISB->SAP.
  • Validación de las solicitudes a realizar a SAP como así también sus respuestas.
  • Adaptable y extensible para cada implementación, como ser validaciones, conversiones, contextos, configuraciones e implementaciones.
  • Configuración de diversas fuentes de datos mediante archivos de propiedades.
  • Configuración inyectable en Spring (Class Dependency Injection) mediante el archivo sap.xml creando opciones como: propiedades, conversares, pool de conexiones, repositorios SAP, etc.
  • Creación de instancias de objetos en forma automática, cuando se asignan parámetros o se recuperan resultados.
  • Capacidad de ejecutar funciones anidadas por cada registro de una tabla SAP.

Configuración.

Setup inicial

  • Para comenzar a implementar este adaptador con SAP se debrá tener en cuenta que el mismo trabaja con SAP JCO, por lo tanto se deberá bajar la versión 3 del mismo.
  • Descomprimir el conector e instalar sapjco.jar en el class path de ISB y la librería nativa en el library path.

Asegurarse de que las librerías estén en condiciones de ser cargadas por el sistema operativo y la distribución con la cual se trabaja. Para ello se puede utilizar el comando ldd en caso de UNIX y LINUX donde el mismo nos asistirá a inspeccionar la librería dinámica conjuntamente con todas sus dependencias. Ejecutando lo siguiente, esta utilidad nos dirá las dependencias, si faltan instalar librerías dependientes y en que dirección de memoria se encuentran cargadas por el sistema operativo.

$ ldd /opt/sapjco/librfccm.so
linux-gate.so.1 => (0xffffe000)
libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb7a04000) librt.so.1 => /lib/tls/i686/cmov/librt.so.1 (0xb79fb000)
libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0xb79e7000) libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb78b3000) libstdc++-libc6.2-2.so.3 => /usr/lib/libstdc++-libc6.2-2.so.3 (0xb786b000) libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0xb7845000)
/lib/ld-linux.so.2 (0x80000000)

En muchas ocaciones se puede encontrar los siguientes errores dentro de la ejecución y verificación de las librarías de SAP.

libstdc++-libc6.2-2.so.3 => not found

Para este caso es claro que no se encuentra la librería libstdc++-libc6.2-2.so.3. Debe ser necesario instalarla (libstdc++2.10-glibc2.2) para poder resolver el problema de dependencia con SAP. Para este caso en particular ejecutando este comando desde un shell se soluciona el problema.

$ sudo apt-get install libstdc++2.10-glibc2.2

Se debería repetir esta operación para todas las librerías y dependencias que sean necesarias desde SAP. Luego procedemos a hacer la misma operación con la otra librería libsapjcorfc.so.

$ ldd /opt/sapjco/libsapjcorfc.so
linux-gate.so.1 => (0xffffe000)
libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb7b97000) librt.so.1 => /lib/tls/i686/cmov/librt.so.1 (0xb7b8e000) librfccm.so => not found
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7a59000) libstdc++-libc6.2-2.so.3 => /usr/lib/libstdc++-libc6.2-2.so.3 (0xb7a11000) libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0xb79eb000)
/lib/ld-linux.so.2 (0x80000000)
libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0xb79d8000)

Es probable tener como no encontrada la librería librfcm.so que es la que anteriormente se validó. Para evitar este error hay que incluírla dentro del path de librerías dinámicas LD_LIBRARY_PATH. Entoces podríamos ejecutar el siguiente código para validar la misma.

Por ejemplo

LD_LIBRARY_PATH=/opt/sapjco
ldd /opt/sapjco/libsapjcorfc.so
linux-gate.so.1 => (0xffffe000)
libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb7c39000)
librt.so.1 => /lib/tls/i686/cmov/librt.so.1 (0xb7c30000)
librfccm.so => /opt/sapjco/librfccm.so (0xb76ea000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb75b6000) libstdc++-libc6.2-2.so.3 => /usr/lib/libstdc++-libc6.2-2.so.3 (0xb756e000) libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0xb7548000)
/lib/ld-linux.so.2 (0x80000000)
libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0xb7535000)

Si todas las librerías han sido encontradas, estamos en condiciones de interactuar con SAP desde una aplicación java y tenemos en orden todos los componentes de acceso.

Scripts de inicio

Si ya se cuenta con un scripts de inicio del servicio de tomcat en en directorio /etc/init.d, solo se deberá modificar el mismo acorde a lo siguiente:

#!/bin/sh
JAVA_HOME=PATH_TO_JVM
TOMCAT_HOME=/opt/tomcat
SAPJCO_HOME=/opt/sapjco
LD_LIBRARY_PATH=$SAPJCO_HOME
export JAVA_HOME TOMCAT_HOME LD_LIBRARY_PATH
case "$1" in start)
$TOMCAT_HOME/bin/startup.sh
;; stop)
$TOMCAT_HOME/bin/shutdown.sh
;; esac

Luego se deberán configurar los elementos de JCO Pools, JCO Repositories, Fields, Structures y Tables. Los mismos se detallan a continuación.

Elemento de configuración <sap-pools>

Este elemento contiene dentro de la configuración, todos los elementos pool a SAP, ver elemento pool para mas información. Este elemento de configuración no posee ningún parámetro o atributo.

Elemento de configuración <pool>

Este elemento tiene como parámetros los siguientes elementos o atributos:

  • name: el nombre del pool de conexiones (obligatorio).
  • client: el nombre del cliente sAP (obligatorio).
  • host: nombre o dirección IP del host donde reside SAP (obligatorio).
  • systemNumber: el número de sistema de SAP (obligatorio).
  • language: el lenguaje en SAP (opcional), se deberá tener en cuenta esto especialmente si se trabaja con “Locales” y conversión de caracteres unicode, etc.
  • username: Usuario de la conexión a SAP (obligatorio).
  • password: Clave de acceso a la conexión de SAP (obligatorio).
  • connections: El número de cantidad de conexiones inicial del pool (opcional).

Elemento de configuración <sap-repositories>

Este elemento contendrá todos los elementos repositorios de SAP. Ver elemento “repository” para mas información. Este elemento no contiene atributos.

Elemento de configuración <repository>

Este elemento declara un nuevo repositorio donde se recuperarán todas las especificaciones de las funciones de SAP. Los parámetros de este elemento son:

  • nane: Nombre del repositorio de SAP.
  • pool: Nombre del pool de conexiones declarado previamente, si el mismo no existe el sistema dará un error de configuración.

Elemento de configuración <property>

Este elemento es un componente generico que sirve para definir una propiedad que será utilizada por el servicio de integración de ISB con SAP. Chequear luego propiedades avanzadas para mas información. Cada propiedad posee dos atributos: nombre y valor, la misma será utilizada como una tupía para ser pasada como parámetros a otros componentes de la plataforma.

Elemento de configuración <converter>

Los conversores son propiedades que permiten declarar elementos de conversión de datos para cualquier tipo de entrada provista por SAP y viceversa. Estos conversores deben ser declarados como así también su clase. En caso de crear una clase nueva de conversión extendiendo el ya existente los mismos deberán heredar de la clase abstracta:

com.sysone.isb.adapter.sap.converter.AbstractConverter

Luego de heredar de esta clase luego se deberán implementar los siguientes métodos:

  • Conversiones sensitivas a “Locales”: convert(Class, Object, Locale).
  • Conversiones no sensitivas a “Locales”: convert(Class, Object).

Los valores serán convertidos respetando “Locale” solo cuando se realiza la conversión en sentido ISB–>SAP. Cuando se recuperan valores de SAP, como datos float, los mismos no son localizados, lo que significa, que vienen con locales por defecto por ejemplo Locale.US.

Los conversores son de cuantiosa utilidad para poder transformar datos del negocio utilizados por el ISB hacia SAP. A continuación se enumeran algunos conversores provistos por el adaptador:

  • StringConverter.
  • BooleanConverter.
  • CharacterConverter.
  • DateConverter.
  • DoubleConverter.
  • NumberConverter.

Elemento de configuración <sap-bapis>

Este es el elemento contenedor de todo los includes a realizar de las funciones BAPIs registradas para ser integradas desde ISB. Este elemento al ser un elemento contenedor no posee atributos. Ver elemento “bapi” para mas opciones. De todos es importante que las mismas se configuren mediante el elemento “include”.

Elemento de configuración <include>

Este elemento sirve para incluir a todas las configuraciones de BAPIs a integrar. Cada elemento include posee como atributo un elemento path, el cual indica el path del documento de XML de mapeo para cada BAPI.

Elemento de configuración <bapi>

Este elemento es el contenedor de una sola BAPI a ser ejecutada mediante el mecanismo de integración. Recuerde que cada BAPI puede poseer una gran número de funciones a ser llamadas. Este elemento posee un solo atributo que es “name” el cual representa el nombre del BAPI a ser ejecutada cuando se invoque desde el servicio.

Elemento de configuración <function>

Este elemento configura y representa una función a ser llamada de la BAPI previamente configurada, los parámetros necesarios para la correcta configuración de este elemento son:

  • name: El nombre de la función SAP dentro de la BAPI (obligatorio).
  • order: El orden en el cual la función será ejecutada (opcional).
  • repository: El nombre del repositorio donde la función será recuperada (obligatorio).
  • validate: Boolean indicando si la función será validada o no.

Este es unos de los elementos de configuración mas importantes sobre el cual se requiere la mayor atención.

Coversión de tipos de datos

Tipo ABAP Descripción Tipo Java
C Tipo caracter java.lang.String
N Número representado como String java.lang.String
D Date java.lang.Date
T Time java.lang.Date
X Byte field byte[]
P Packed number java.lang.BigDecimal
I 4-byte integer int
F Floating point number double
STRING Variable-length character java.lang.String
XSTRING Variable-length byte field byte[]

results matching ""

    No results matching ""