Herramientas Informaticas

Mes: agosto 2024

Obtener la lista de precios de SAP a través Service Layer

Para traer la el catalogo de listas de precios usaremos la siguiente URL en GET

https://localhost:50000/b1s/v1/PriceLists?$select=PriceListNo,PriceListName&$filter=Active eq 'tYES'  and substringof('TRIT',PriceListNo) or substringof('TRIT',PriceListName)

Como pueden observar usamos la funcion substringof como el equivalente al like de SQL

Quedaría mas o menos de esta forma

Ahora la función quedaría de la siguiente forma

    /* =============================================
      MOSTRAR
      ============================================= */

    static public function ctrMostrar($cookie, $filtro) {


        $curl = curl_init();

        curl_setopt_array($curl, [
            CURLOPT_PORT => "50000",
            CURLOPT_URL => "https://localhost:50000/b1s/v1/PriceLists?%24select=PriceListNo%2CPriceListName&%24filter=Active%20eq%20'tYES'%20%20and%20substringof('$filtro'%2CPriceListNo)%20or%20substringof('$filtro'%2CPriceListName)",
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_ENCODING => "",
            CURLOPT_COOKIE => $cookie,
            CURLOPT_SSL_VERIFYHOST => false,
            CURLOPT_SSL_VERIFYPEER => false,
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 30,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST => "GET",
            CURLOPT_HTTPHEADER => [
                "Accept: */*",
                "User-Agent: Thunder Client (https://www.thunderclient.com)"
            ],
        ]);

        $response = curl_exec($curl);
        $err = curl_error($curl);

        curl_close($curl);

        if ($err) {
            return "cURL Error #:" . $err;
        } else {
            return json_decode($response);
        }


        $response = json_decode($response);

        return $response;
    }

Y bien saben el resto es historia

Obtener lista de usuarios SAP a través de Service Layer

Lo que haremos en esta ocasión en hacer la consulta al service layer para usarlo en un Select2 vía AJAX y PHP primera mente usaremos la siguiente petición de tipo GET URL

https://localhost:50000/b1s/v1/Users?$select=InternalKey,UserCode,Group,UserName&$filter=Group eq 'ug_Regular'  and substringof('Julio',UserName)  or substringof('Julio',UserCode)&$orderby=InternalKey

Como ven usamos la función substringof que seria el equivalente en SQL al like ‘%%’

Quedando mas o menos asi

Ahora transformamos la petición a una función de PHP en la que recibimos la cookie y el filtro para buscar los usuarios

    /* =============================================
      MOSTRAR
      ============================================= */

    static public function ctrMostrar($cookie, $filtro) {


        $curl = curl_init();

        curl_setopt_array($curl, [
            CURLOPT_PORT => "50000",
            CURLOPT_URL => "https://localhost:50000/b1s/v1/Users?%24select=InternalKey%2CUserCode%2CGroup%2CUserName&%24filter=Group%20eq%20'ug_Regular'%20%20and%20substringof('$filtro'%2CUserName)%20%20or%20substringof('$filtro'%2CUserCode)&%24orderby=InternalKey",
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_ENCODING => "",
            CURLOPT_COOKIE => $cookie,
            CURLOPT_SSL_VERIFYHOST => false,
            CURLOPT_SSL_VERIFYPEER => false,
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 30,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST => "GET",
            CURLOPT_HTTPHEADER => [
                "Accept: */*",
                "User-Agent: Thunder Client (https://www.thunderclient.com)"
            ],
        ]);

        $response = curl_exec($curl);
        $err = curl_error($curl);

        curl_close($curl);

        if ($err) {
            return "cURL Error #:" . $err;
        } else {
            return json_decode($response);
        }


        $response = json_decode($response);

        return $response;
    }

Ahora en el archivo de consulta se usaría de la siguiente forma, hacemos el Login, consultamos, hacemos el Logout, y formamos la cadena JSON de la siguiente forma

   $busqueda = $_POST["searchTerm"];

    $conexionSAP = ServiceLayer::login();

    $cookie = "B1SESSION=" . $conexionSAP->SessionId . ";  ROUTEID=.node1";

    $usuariosSAP = ControladorUsuariosSAP::ctrMostrar($cookie, $busqueda);

    $usuariosSAPLista = $usuariosSAP->value;

    $usuariosSAP = ServiceLayer::logout($cookie);

    $jsonVariable = ' { "results": [';

    foreach ($usuariosSAPLista as $keyUsuarios1 => $valueUsuarios1) {


        $jsonVariable .= ' {
      "id": "' . $valueUsuarios1->UserCode . '",
      "text": "' . utf8_encode($valueUsuarios1->UserCode . " - " . $valueUsuarios1->UserName) . '"
    },';
    }

    $jsonVariable = substr($jsonVariable, 0, -1);

    $jsonVariable .= ' ]
}';

    echo ($jsonVariable);

Y listo ya esto obtenemos los datos requeridos

Haciendo Logout en Service Layer en SAP y pasar el código en PHP 8.3

Bien ahora vamos a mostrar como hacer el logout, es decir, cerrar la sesión, vamos hacer la petición tipo GET con la siguiente URL

https://localhost:50000/b1s/v1/Logout

Quedando de la siguiente forma

La función en PHP seria la siguiente

 static public function logout($cookie) {

        $curl = curl_init();

        curl_setopt_array($curl, [
            CURLOPT_PORT => "50000",
            CURLOPT_URL => "https://hanagusa:50000/b1s/v1/Logout",
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_ENCODING => "",
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 30,
            CURLOPT_COOKIE => $cookie,
            CURLOPT_SSL_VERIFYHOST => false,
            CURLOPT_SSL_VERIFYPEER => false,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST => "POST",
            CURLOPT_HTTPHEADER => [
                "Accept: */*",
                "User-Agent: Gisa Web Client (https://www.thunderclient.com)"
            ],
        ]);

        $response = curl_exec($curl);
        $err = curl_error($curl);

        curl_close($curl);

        if ($err) {
            return "cURL Error #:" . $err;
        } else {
            return $response;
        }
    }

Ya al momento de usarlo en PHP desde el Login has ta el Logout seria de la siguiente forma

$conexionSAP = ServiceLayer::login();

// Construimos la cookie

$cookie = "B1SESSION=" . $conexionSAP->SessionId . ";  ROUTEID=.node1";

$sucursalesSAP = ControladorSucursalSAP::ctrMostrar($cookie);

$sucursalesSAP = $sucursalesSAP->value;

// Cerramos la session enviando la Cookie
$conexionSAP = ServiceLayer::logout($cookie);

Ejemplos Service Layer SAP

A continuación pondremos a su disposición algunos ejemplos de peticiones al Service Layer del SAP así como el código en PHP

  1. Postman en Visual Studio Code
  2. Haciendo Login en Service Layer en SAP y pasar el código en PHP 8.3
  3. Haciendo Logout en Service Layer en SAP y pasar el código en PHP 8.3
  4. Obtener lista de usuarios SAP a través de Service Layer
  5. Obtener la lista de precios de SAP a través Service Layer
  6. Crear Consultas Personalizadas en Service Layer SAP
  7. Modificar consultas Personalizadas en Service Layer SAP
  8. Leer consultas Personalizadas en Service Layer SAP

Haciendo Login en Service Layer en SAP y pasar el código en PHP 8.3

El primer paso para comenzar usar el service layer es lógicamente hacer el login para posteriormente hacer las consultas necesarias

En la extensión Thunder Client abrimos la petición de tipo POST y ponemos la siguiente URL

https://localhost:50000/b1s/v1/Login

Lógicamente en donde dice localhost va la IP de su servidor

En la sección de Body elegimos el contenido JSON y le ponemos el siguiente código con los datos de inicio de sesión

{
    "CompanyDB": "TEST_GUSA",
    "Password": "sap123",
    "UserName": "LMPROGRAM"
}

Quedaría tal y como se ve en la imagen de arriba

Como resultado dará el código que se muestra abajo

{
  "odata.metadata": "https://localhost:50000/b1s/v1/$metadata#B1Sessions/@Element",
  "SessionId": "1d66ff02-6169-11ef-c000-000c2949cf9d-139784632008704-3563",
  "Version": "1000201",
  "SessionTimeout": 30
}

Ahora creamos nuestra función para hacer esa petición desde el código PHP

    static public function login() {


        $curl = curl_init();

        curl_setopt_array($curl, [
            CURLOPT_PORT => "50000",
            CURLOPT_URL => "https://localhost:50000/b1s/v1/Login",
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_ENCODING => "",
            CURLOPT_SSL_VERIFYHOST => false,
            CURLOPT_SSL_VERIFYPEER => false,
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 30,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST => "POST",
            CURLOPT_POSTFIELDS => "{\n    \"CompanyDB\": \"BASE DE DATOS PRUEBA\",\n    \"Password\": \"PASWORD\",\n    \"UserName\": \"NOMBREUSUARIO\"\n}\n",
            CURLOPT_HTTPHEADER => [
                "Accept: */*",
                "Content-Type: application/json",
                "User-Agent: (https://www.thunderclient.com)"
            ],
        ]);

        $response = curl_exec($curl);
        $err = curl_error($curl);

        curl_close($curl);

        if ($err) {
            return "cURL Error #:" . $err;
        } else {

            return json_decode($response);
        }
    }

Y listo ya con eso iniciamos sesión desde PHP, y nos regresa las variables necesarias para crear la cookie

Postman en Visual Studio Code

Algunas veces en el desarrollo es necesario consumir web Service para los proyectos, como puede ser facturación electrónica mexica, obtener el precio del dólar del DOF ETC .

Existen herramientas ya conocidas para realizar las pruebas como Postman las cuales funcionan muy bien y cuentan con excelentes funciones como la de exportar la petición al lenguaje que estemos utilizando ya sea PHP, C#, Java, Python,Ruby on Rails ETC

Pero como siempre hay alternativas en todo.

Existe una buena alternativa y es una extensión de Visual Studio Code.

Thunder Client es una extensión de cliente Rest API liviana para VS Code, diseñada a mano por Ranga Vadhineni con un enfoque en la simplicidad, el diseño limpio y el almacenamiento local.

Para instalarlo nomas vamos a extensiones buscamos Thunder Client, le damos instalar y listo

Y listo ya podemos hacer pruebas con los webservice

Creado con WordPress & Tema de Anders Norén