php+sap/r3 (parte i de iii)

5 de diciembre de 2008

-------------------------------------
php+sap/r3 (parte i de iii)
php+sap/r3 (parte ii de iii)
php+sap/r3 (parte iii de iii)
-------------------------------------

Existe una manera de hacer una aplicación Web que acceda a SAP/R3 sin tener que pagar un duro. Esto es utilizando PHP y un componente llamado saprfc. Este componente es un módulo de PHP que es capaz de hacer llamadas a funciones de SAP. Es decir, si eres programador de ABAP en SAP, puedes crear funciones que devuelvan o reciban datos vía RFC. Este módulo hace de enlace con tú aplicación web en PHP.

También es posible instalar saprfc sobre una plataforma PHP creada para Windows.

Básicamente necesitas dos cosas. Primero bajarte la última versión del saprfc y luego unas librerías llamadas "Non-unicode SAP RFCSDK for UNIX compilation" que sólo se puede bajar desde SAP. Sólo las puedes bajar de http://service.sap.com si tienes cuenta de usuario. Si eres un cliente de SAP debería tener usuario para entrar.

Empezamos la instalación en un CentOS 5.

+ Bajamos "Non-unicode SAP RFCSDK 6.20 for UNIX" que será un archivo comprimido con el nombre RFC_46-10001782.SAR. Los archivos SAR y CAR son unos archivos especiales de SAP que están comprimidos al estilo de un Zip.


Todo el soft que necesitemos se SAP esta en http://service.sap.com/swdc o "SAP software distribution center". + Ahora necesitamos el descompresor llamado SAPCAR (la última versión es la 7 para Linux IA32) que también esta disponible dentro de service.sap.com. Una vez copiado en tú servidor Linux tendrás que darle propiedades de ejecución ya que se trata de un ejecutable.


+ Creamos la carpeta /usr/sap y copiamos estos dos archivos. Ahora miramos lo que hay dentro del archivo .SAR y lo descomprimimos con la utilidad SAPCAR.

# ./SAPCAR -tvsf RFC_46-10001782.SAR
# ./SAPCAR -xvf RFC_46-10001782.SAR 

El resultado serán unas librerías compiladas dentro de una carpeta llamada rfcsdk. SAP proporciona las librerías ya compiladas, así que no tenemos el código para ver que es lo que hacen. Básicamente son las API de las llamadas RCF para SAP.

+ Antes de continuar tenemos que tener instalado las herramientas de desarrollo de C como gcc, make, libtools., etc. También tenemos que tener instalado php-devel. Si no fuera el caso las instalamos con un "yum install php-devel".

+ Descargamos la última versión del saprfc desde sourceforge en una carpeta temporal. La última versión que hay ahora es la 1.4.1. Descomprimiremos, compilaremos e instalaremos el módulo resultante dentro del la carpeta de modulos dinámicos PHP.
El hacer un módulo dinámico PHP me evita tener que recompilar todo el PHP y me mantiene apartado este módulo de todo PHP.

# tar –xzvf saprfc-1.4.1.tar.gz
# cd saprfc-1.4.1
# phpize
# ./configure
# make
# make install

Esto nos creará un nuevo módulo para PHP dentro de /usr/lib/php/modules/php_saprfc.so.

Este módulo tenemos que añadirlo al archivo de configuración de PHP en /etc/php.ini. Añadiremos la siguiente linea:

extension=php_saprfc.so

Ahora reiniciamos apache con un "service httpd restart" y comprobamos queen el archivo de log de Apache (normalmente será /var/log/httpd/error_log) no se produce ningún error al arrancar el módulo.

Si durante el arranca vemos que en log nos dice que no se encuentra la librería "libstdc++-libc6.1-1.so.2" tendremos que instalarlas con el RPM "compat-libstdc++-296-2.96-141.i386.rpm".

Nota: Existe una versión 6.40 de RFCSDK pero sólo esta para 64 bits y no para 32 bits que es lo que hemos instalado aquí.

Más informacion:
+ Master the five remote function call (RFC) types in ABAP
+ RFC en SAP/R3

7 comentarios:

Hugo_DC dijo...

No sé donde conseguir Non-unicode SAP RFCSDK 6.20 for UNIX, no tengo cuenta de usuario.

amperis dijo...

Si tienes SAP en tú empresa deberías tener usuario SAP para buscar notas técnicas, papers o software.
Tambien le puedes decir a tú proveedor de de SAP que te mande este soft.

kike dijo...

Hola:
Cuando arranco en servicio de apache aparece lo siguiente
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/modules/saprfc.so' - librfccm.so: failed to map segment from shared object: Permission denied in Unknown on line 0
Alguna idea de que pueda ser
De verdad agradeceré cualquier ayuda.
Saludos
Enrique

Ronald Hernandez dijo...

Kike has resuelto el problema?

tengo el mismo problema que te dio

si lo has solucionado me podrias hechar una mano

te lo agradecere

Ronald Hernandez dijo...

Corregi el problema, tengo Red Hat Advanced, y dentro del php.ini le inserte
extension=saprfc.so
no como
extension=php_saprfc.so
esto debido que cuando se instala el modulo lo crea como saprfc.so. gracias saludos

Anónimo dijo...

For those who have the problem in CentOS with librfccm.so: failed to map segment from shared object

just run system-config-securitylevel-tui and disable SELinux.
Reboot the machine and that's it...
Hope that helps anyone, because this stopped me for a while

Anónimo dijo...

Thanks for the 'disable SELinux' tip.
It helped me a lot !