Ejemplo 5 - Exportando a una base de datos

Introducción y estructura de datos

 

Nuestro SDK además de exportar información está preparado, a través de la clase SalesLayer_Updater(), para enviar esta información a una base de datos. La clase SalesLayer_Updater() es una clase extendida de la clase SalesLayer_Conn(), añadiendo las funciones necesarias para exportar el esquema de campos de un conector en Sales Layer y crear las tablas y campos en la base de datos elegida. 

En este ejemplo de uso del SDK veremos cómo exportar la información del PIM a una base de datos local usando la clase SalesLayer_Updater().

Para exportar la información a una base de datos utilizamos el conector genérico, por lo tanto, usaremos una vez más el conector configurado en el Ejemplo 1, con la misma configuración de tablas, los mismos filtros y parámetros:

1

Para definir los ítems a exportar pondremos 14 categorías en estado visible:

2

Elegimos 15 productos aleatorios y los ponemos en estado visible:

3

Las variantes de estos productos estarán también en modo visible por lo que tendremos un total de 13 variantes:

4

 

Código

 

A continuación veremos cómo sería el script que exporta la información:

<?php 

define('LOC_BASE', dirname(__FILE__) . '/');

require(LOC_BASE.'SalesLayer-Updater.php');

require(LOC_BASE.'lib/nice_r-master/Nicer.php');

?>



<!DOCTYPE html>

<html dir="ltr" lang="en-US">

<head>

    <link rel="stylesheet" type="text/css" href="lib/nice_r-master/nice_r.css?version=<?php echo filemtime(LOC_BASE.'lib/nice_r-master/nice_r.css'); ?>"/>

    <script type="text/javascript" src="lib/nice_r-master/nice_r.js?version=<?php echo filemtime(LOC_BASE.'lib/nice_r-master/nice_r.js'); ?>"></script>

</head>

<body>

    <?php



    //DB credentials

    $dbname       = 'testesl';

    $dbhost       = 'localhost';

    $dbusername   = 'root';

    $dbpassword   = 'root';



    //SL credentials

    $connector_id = 'CN12347H3308C4486';

    $secret_key = '7aeb575d9bf15bfa238e8f01842417a2';



    //Create object with the credentials of the connector and database

    $SLConn = new SalesLayer_Updater ($dbname, $dbusername, $dbpassword, $dbhost, $connector_id, $secret_key);



    $SLConn->update();



    echo "Sync Initialized";



    if ($SLConn->has_response_error()) {



        echo "<h4>Error:</h4>\n\n Code: ".$SLConn->get_response_error().

             "<br>\nMessage: ".           $SLConn->get_response_error_message();



    } else {



        echo "<h4>Response OK</h4>\n".

             "<p>".

             "API version: <b>".            $SLConn->get_response_api_version()          ."</b><br />\n".

             "Time: <b>".                   $SLConn->get_response_time('unix')                 ."</b><br/>\n".

             "Default language: <b>".       $SLConn->get_response_default_language()     ."</b><br/>\n".

             "Database: <b>".       $SLConn->database     ."</b><br/><br />\n".

             "<br><b>SYNCHRONIZATION INTO THE DATABASE IS DONE, GOOD JOB!</b>". 

             "</p>";



            $n = new Nicer($SLConn->get_response_table_data());

            $n->render();

            echo "<hr/>";



    }       

    ?>

    </body>

</html>

Empezamos por definir las credenciales de acceso a la base de datos: $dbname, $dbhost, $dbusername y $dbpassword. Definimos las credenciales del conector en Sales Layer y terminamos  creando el objeto $SLConn con las variables definidas.

Atento: el SDK crea las tablas y sus campos en una base de datos ya creada pero no está preparado para crear la base de datos en sí. Por lo tanto, tendrá que haber sido creada con anterioridad.

Posteriormente llamamos a la función update() para hacer la exportación desde los ítems en Sales Layer a la base de datos definida en los parámetros iniciales. Siempre que se hace una llamada usando la función update() y se guarda en la base de datos la fecha actual para usar en la siguiente llamada. De esta forma, solo se exportarán los ítems que hayan sido modificados hasta ese momento

En la primera llamada, como en la base de datos no hay ninguna fecha, se exportan todos los ítems afectados por el conector. 

Después de verificar que la API no ha devuelto errores a través de la función has_response_error() imprimimos con las funciones del SDK la información relevante:

  • versión de la API a través de la función get_response_api_version()
  • fecha en UNIX de la hora exacta de la llamada a la API con la función get_response_time()
  • idioma por defecto del PIM llamando la función get_response_default_language() 
  • nombre de la base de datos local 

Posteriormente y con la ayuda de la librería Nice_r (https://github.com/uuf6429/nice_r) imprimimos los datos que nos ha devuelto la API y que han sido sincronizados en la base de datos con la función get_response_table_data().

 

Ejecución y resultados

 

Al ejecutar el script del código de ejemplo obtenemos el siguiente resultado:

5

Como podemos observar, los ítems en visible han sido exportados por la API y bien sincronizados en la base de datos. 

En la base de datos han sido creadas 4 tablas con el número de filas correspondiente a los ítems visibles por cada tabla exportada.

6

Atento: pueden cambiarse los nombres de las tablas  según las preferencias que se tengan. A través de la fórmula de la clase SalesLayer_Updater(), set_table_prefix() **** se puede definir el prefijo de la tabla (por defecto está “slyr_”), y a través del alias de la tabla en el conector se define la nomenclatura restante.

7

A parte de las tablas ya configuradas en el conector se ha creado la tabla “slyr___api_config”. Esta sirve para guardar la configuración del conector y tiene la siguiente estructura:

8

En esta tabla, entre otros campos, vemos el parámetro de last_update donde se guarda la fecha de la última llamada. Hay que tener en cuenta que se utilizará esta misma fecha en las siguientes llamadas. También vemos el parámetro data_schema donde se guarda la información del esquema de datos exportado por el conector.