php+sap/r3 (parte ii de iii)

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

Ahora que ya tenemos todo instalado es hora de hacer nuestra primera página web en PHP y acceder al SAP. Dentro de nuestro sitio web en Apache copiamos el archivo saprfc.php (que se encuentra dentro de saprfc-1.4.1.tar.gz). En este archivo se ha declarado una clase que nos ayudará conectarnos a SAP y hacer llamadas a sus funciones. Podemos utilizar esta clase o hacer llamadas directas a las funciones.

Ahora veamos un ejemplo de una llamada a una función que nos devuelve un listado de todos los usuarios que están dados de alta en SAP. Para los que conocen SAP, serian los usuarios que hay dentro de la transacción SU01.

<?php
   require_once('saprfc.php');

   $sap_parametros = array("logindata"=>array(
      "ASHOST"=>"misap.miempresa.com",
      "SYSNR"=>"00",
      "CLIENT"=>"300",
      "USER"=>"elusuario",
      "PASSWD"=>"lacontraseña"),"show_errors"=>false,"debug"=>false);

   $sap = new saprfc($sap_parametros);
   $result = $sap->callFunction("SO_USER_LIST_READ",
                   array(array("IMPORT", "USER_GENERIC_NAME", "*"),
                   array("TABLE","USER_DISPLAY_TAB",array()) ));         
    

   if ($sap->getStatus() == SAPRFC_OK) {
   ?><table>
     <tr><td>SAP-Name</td><td>User-Nummer</td></tr><? 
     foreach ($result["USER_DISPLAY_TAB"] as $user) {
        echo "<tr><td>", $user["SAPNAM"],"</td><td>",$user["USRNO"],"</td></tr>";
      }
      ?></table><?
   } else { 
      $sap->printStatus();
      $sap->getStatusText() or $sap->getStatusTextLong();
   }

   $sap->logoff();
  
?>
Lo primero que hacemos es cargar la librería con la clase desde un require_once(). Luego definimos una variable con los datos de conexión a SAP. Normalmente será la IP del servidor de SAP, el mandante (en mi caso 300), el usuario y la contraseña. Este usuario deberá tener permisos para ejecutar la función.

Luego creamos el objeto $sap con la funcion saprfc(). Desde este nuevo objeto podemos hacer una llamada a la función definida en SAP “SO_USER_LIST_READ”. Esta función esta creada por defecto en SAP.

La función recibe un parámetro de entrada (IMPORT) y un parámetro de salida (TABLE). El parámetro de import se llama USER_GENERIC_NAME que en este caso será “*” para que devuelva a todos los usuarios. El nombre de la tabla de salida es USER_DISPLAY_TAB y la inicializamos con un array vacío.

Una vez hacemos la llamada con el callFunction(), esta llamada puede ser correcta (SAPRFC_OK) o incorrecta. Si es incorrecta podemos consultar con un prinStatus() el mensaje de error. Puede ser que haya un error en los parámetros, que el servidor no esté disponible, que no tengamos permisos, etc.

Si por el contrario la llamada es correcta el resultado de la tabla lo tendremos en el array $result. Solo basta hacer un bucle para ir escribiendo los resultados por pantalla. Dentro de este array mostraremos los campo SAPNAM y USRNO.

Como veis, aparecen muchos nombre de tablas, nombre de funciones, imports o exports que están definidos por el programador de ABAP. Quiero decir que para hacer llamadas correctas a las funciones que se programen en ABAP (es decir funciones Z) debe haber una correcto entendimiento entre el programador de ABAP y el programador de PHP. Este es mi caso . Cada función creada en ABAP que necesitemos tendrá que venir acompañada de su documentación, donde especifique como se llama, cuantos parámetros de entrada y salida hay, sus tipos y sus nombres.

1 comentarios:

Unknown dijo...

Ya logre hacer la conexion pero ahora me sale una gran cantidad de codigo es normal