Herramientas Informaticas

Categoría: Uncategorized Página 6 de 11

Crear Consultas Personalizadas en Service Layer SAP

En el service layer también tenemos la forma para crear nuestras consultas personalizadas, aunque tiene algunas limitaciones pero nos pueden ser muy útiles.

Para ello utilizaremos SQLQueries y el ejemplo básico seria de la siguiente manera

Hacemos la petición POST

https://localhost:50000/b1s/v1/SQLQueries

En el body le metemos el contenido JSON

{
  
  "SqlCode":"sql02",
  "SqlName":"listPrices",
  "SqlText":"select ItemCode,PriceList 
            from [ITM1]  
            where [PriceList] =:listaPrecios ",
  "ParamList" : "listaPrecios"
  
  
}

Al final quedaría de la siguiente forma

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

Actualización de CodeIgniter 4.4.4 a 4.5.1 Correcciones en Fuentes

Son varias las novedades y cambios que se vinieron en los cambios del Framework de PHP CodeIgniter 4 en su versión 4.5.1.

Las novedades ya lo pueden ver directamente en su web https://codeigniter4.github.io/userguide/installation/upgrade_450.html

Entre los cambios mas básicos que se tienen que hacer es copiar el archivo spark e index.php desde la carpeta de vendor al proyecto principal mas o menos asi

cp vendor/codeigniter4/framework/public/index.php public/index.php
cp vendor/codeigniter4/framework/spark spark

Esa parte es la mas básica pero en nuestro caso vimos que fallo en una biblioteca de manejo de usuarios Myth/Auth el cual no guardaba usuarios y nos arrojaba el siguiente error:

Could not check compatibility between Myth\Auth\Authentication\Passwords\CompositionValidator::check(string $password, ?CodeIgniter\Entity\Entity $user = null): bool and Myth\Auth\Authentication\Passwords\ValidatorInterface::check(string $password, ?CodeIgniter\Entity $user = null): bool, because class CodeIgniter\Entity is not available in D:\proyectoCodeIgniter\vendor\julio101290\auth\src\Authentication\Passwords\CompositionValidator.php

Error que se corrige solo con cambiar la linea de use CodeIgniter\Entity; a use CodeIgniter\Entity\Entity; en el archivo proyectoCodeIgniter\vendor\julio101290\auth\src\Authentication\Passwords\ValidatorInterface.php

Igual ya se actualizo el repositorio https://github.com/julio101290/myth-auth/releases/tag/v1.2.8

Si utilizan este fork de la librería solo hagan un composer update

Otro detalle al parecer la ruta el resources ya no tomo en automático el update, o quizás se definieron por seguridad otro tipo de reglas por lo cual se corrigió la biblioteca de boilerplate

En el archivo de vendor\julio101290\boilerplate\src\Config\Routes.php se agregaron el siguiente código para que pueda actualizar, igual si existe otra manejara dejarlo en la caja de comentarios

        /**
     * Users Update
     */
    $routes->post('user/manage/(:any)/update', 'UserController::update/$1', [
        'filter' => 'permission:back-office',
        'namespace' => 'julio101290\boilerplate\Controllers\Users',
        'except' => 'show',
        'as' => 'update',
    ]);

    $routes->post('role/(:any)/update', 'RoleController::update/$1', [
        'filter' => 'permission:role-permission',
        'namespace' => 'julio101290\boilerplate\Controllers\Users',
        'except' => 'show',
        'as' => 'updateRole',
    ]);
    

De igual manera se actualizo la biblioteca en https://github.com/julio101290/boilerplate/releases/tag/v1.3.8

Otro de las correcciones que se tienen que hacer es que si se hacen peticiones Ajax el método tiene que ir en minúscula por ejemplo:

Así estaba uno antes

  ajax: {
            url: '<?= base_url('admin/sells') ?>',
            method: 'GET',
            dataType: "json"
        },..........................

Ahora tendría que quedar así, muy simple, entenderle a primera no fue fácil

  ajax: {
            url: '<?= base_url('admin/sells') ?>',
            method: 'get',
            dataType: "json"
        },

Otros de los errores fue en el nivel de modelo, nos arrojo el siguiente error

CodeIgniter\\Database\\BaseBuilder::getOperatorFromWhereKey(): Argument #1 ($whereKey) must be of type string, int given

El detalle era en el where que antes funcionaba de la siguiente manera

->where('\'0\'', $empresa,true)

Ahora funciona de la siguiente manera

->where('\'0\'', $empresa,true)

Como recortar silencios incómodos automáticamente en los videos en Windows 10

Dentro del software libre tenemos muchas herramientas que nos permiten realizar nuestro trabajo y en este caso que es la edición de video hay una herramienta hecha en Python que nos permite quitar los silencios en un video, es decir, quitar esas regiones del video en las que no hablamos.

Bien para ello necesitaremos descargar el software jumpcutter que la pueden descargar desde Github, https://github.com/carykh/jumpcutter

Primero necesitaremos tener instalado Python en nuestro Windows 10 para ello solo entramos al CMD y escribimos Python nos mandara a la tienda de Windows y allí solo le damos obtener

Como instalar xDebug en PHP 8.2 Windows 10 2024

Para poder correr el fuente de un proyecto hecho en PHP 8.2 se necesita instalar xDebug, a continuación dejaremos los pasos para instalarlo correctamente

Entramos a la siguiente pagina https://xdebug.org/wizard

Abrimos la consola CMD y escribimos php -i y copiamos y pegamos en el área de texto de la pagina de xdebug y de damos click al boton de analyse my phpinfo() output

¿Contempla la agenda 2030 la hipervigilancia?

La Agenda 2030 no menciona explícitamente la hipervigilancia. Sin embargo, algunos de sus objetivos podrían conducir a la implementación de políticas de hipervigilancia.

Por ejemplo, el Objetivo 16, que se centra en la paz, la justicia y las instituciones sólidas, establece la meta de promover sociedades pacíficas e inclusivas para el desarrollo sostenible, proporcionar acceso a la justicia para todos y construir instituciones eficaces, responsables e inclusivas a todos los niveles.

Este objetivo podría conducir a la implementación de políticas de vigilancia para combatir el crimen y el terrorismo. Por ejemplo, los gobiernos podrían implementar sistemas de vigilancia de video en las calles y los espacios públicos para identificar y rastrear a los criminales y terroristas.

Además, el Objetivo 17, que se centra en la cooperación para el desarrollo sostenible, establece la meta de fortalecer los medios de implementación y revitalizar la Alianza Mundial para el Desarrollo Sostenible.

Este objetivo podría conducir a la cooperación entre los gobiernos para compartir información y datos de vigilancia. Esto podría facilitar la vigilancia a nivel internacional.

Sin embargo, es importante señalar que la Agenda 2030 también reconoce la importancia de la privacidad y la protección de los datos. El Objetivo 16 establece la meta de garantizar el acceso a la información y proteger la privacidad en línea y fuera de línea.

Este objetivo podría conducir a la implementación de políticas que protejan la privacidad de las personas frente a la vigilancia. Por ejemplo, los gobiernos podrían aprobar leyes que regulen la recopilación y el uso de datos personales.

En última instancia, el impacto de la Agenda 2030 en la hipervigilancia dependerá de las políticas específicas que se adopten. Es posible que la Agenda 2030 conduzca a un aumento de la hipervigilancia, pero también es posible que conduzca a la implementación de políticas que protejan la privacidad de las personas.

Página 6 de 11

Creado con WordPress & Tema de Anders Norén