php+sap/r3 (parte iii de iii)

9 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)
-------------------------------------

Este último post es una introducción ya que desconozco la programación en ABAP para SAP. Sólo quiero dar unas pequeñas ideas de cómo deben programarse las funciones es SAP para hacerlas disponibles en PHP a traves del conector saprfc.

Aunque este post es el último, la verdad es que a la hora de trabajar sobre saprfc es lo primero que tendríamos que hacer. Primero debemos de programar las funciones en ABAP, probar que estas funcionan y devuelven los valores correctos y por último llamarlas desde PHP.

Para programar las funciones accederemos a la transacción estándar de programación en SAP: la se37 (biblioteca de funciones). Como ejemplo vamos a ver el contenido de la función que hemos utilizado en los post anteriores. Esta función estándar es la “SO_USER_LIST_READ”. Por estándar quiero decir que ya viene disponible en SAP y que no ha sido modificada por nadie (lo que los programadores de ABAP conocen cómo una función Z).

Una vez abierta la transacción colocamos el nombre de la función a buscar y visualizamos la función.



En la pestaña atributos está uno de los parámetros más importantes para hacer disponible la función a través de las llamadas RFC. Debemos tener marcado siempre el flag de “Módulo de acceso remoto”.



En la pestaña de “Import” se encuentran los parámetros de entrada de la función. En este caso hay un único parámetro llamado “USER_GENERIC_NAME” del tipo “SOUIO-USRNA”.



En la pestaña “Export” y “Tables” tenemos los parámetros de salida. En este caso hay un solo parámetro de tabla llamado “USER_DISPLAY_TAB” del tipo “SUOD3”.



En la última pestaña llamada “Cod. fte”, tenemos el código ABAP de la función. Lógicamente no explicaré lo que hace, pero se supone que accede a la tabla de usuarios para hacer la consulta.



Por lo general el programador de ABAP debería entregarte una definición de la función que en mi caso son las cabeceras de la funciones y que me facilitan mucho las llamadas desde PHP. Sería algo así:

FUNCTION SO_USER_LIST_READ.
*"----------------------------------------------------------------------
*"Globale Schnittstelle:
*"       IMPORTING
*"             USER_GENERIC_NAME LIKE SOUIO-USRNAM
*"       TABLES
*"             USER_DISPLAY_TAB STRUCTURE SOUD3
*"       EXCEPTIONS
*"             COMMUNICATION_FAILURE
*"             SYSTEM_FAILURE
*"             USER_LIST_NO_ENTRIES
*"----------------------------------------------------------------------

Grácias a Raúl por la ayuda con ABAP.