6 - Importación en Sales Layer

Modificado el Vie, 15 May a 6:06 P. M.

Entrada de datos y estructura


A través de la API y del SDK, es posible importar datos directamente en Sales Layer utilizando SalesLayer_Conn(). Esto te permite automatizar importaciones desde sistemas como un ERP y enviar los datos directamente a la plataforma.

En este ejemplo, el SDK se utiliza para importar información en una cuenta de prueba, actualizando registros existentes y creando nuevos ítems al mismo tiempo.

Antes de trabajar con este ejemplo, es recomendable revisar la documentación de la API y configurar un conector de importación genérico en la Tienda de canales.



El primer paso es definir una clave privada y elegir los idiomas que se van a conectar.



La opción Sobrescribir siempre al importar se utiliza para la sincronización de CSV a través de Fuentes vinculadas, por lo que no es relevante para este ejemplo con SDK.



Después de la configuración inicial, configura las tablas que quieres importar. En cada tabla, añade los campos que quieres actualizar o crear.


En el ejemplo, se configuran categorías, productos y variantes con los campos necesarios para la importación de prueba.





Si solo quieres actualizar ítems existentes, elige en la opción del conector para trabajar solo con ítems existentes. Si también quieres crear nuevos ítems, elige No.



Al elegir No, aparece una segunda opción para definir el estado de los nuevos ítems. En este escenario, los nuevos ítems se crean como borrador.



En la columna izquierda del conector debes definir los nombres exactos de los campos que después enviarás a través del SDK. Estos nombres deben coincidir exactamente con la estructura de importación, incluidos espacios, mayúsculas, minúsculas y signos de puntuación.



10


Una vez configuradas y guardadas las tablas, el conector está listo. Como este ejemplo utiliza la API, no se usa la pestaña Fuentes vinculadas.


Código


El siguiente script define las credenciales del conector, crea el objeto de conexión, establece la versión de la API en 1.18, prepara la estructura input_data y la envía con set_info().

<?php 
define('LOC_BASE', dirname(__FILE__) . '/');
require(LOC_BASE.'SalesLayer-Conn.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
    //SL import connector 
    $connector_id = "CN17533H3908C4486";
    $secret_key = "cd6a8653823248296079e595e772f9b2";

    //Create object with the credentials of the connector
    $SLConn = new SalesLayer_Conn ($connector_id, $secret_key);

    //API Version 
    $SLConn->set_API_version('1.18');

    //Import Data 
    $input_data = [
        "categories" => [
            [
                "Section Reference" => "CHAQ01",
                "Section name" => "Jackets 2022"
            ], 

            [
                "Section Reference" => "CAMI03",
                "Section Description" => "Summer T-shirts, Collection of 2022! The best choice..."
            ],

            [
                "Section Reference" => "SH01",
                "Section name" => "Shoes",
                "Section Description" => "Summer Shoes Collection. Choose the best that suits you!",
                "Parent Section Reference" => "VERA01"
            ],

        ],

        "products" => [
            [
                "Product Reference" => "42PM020100483",
                "Product Description:en" => "Brown mohair coat with detachable funnel neck, raglan sleeves and concealed clip button fastening."
            ], 
            [
                "Product Reference" => "AAPA10L63534",
                "Product Name:en" => "Phone Cover",
                "Product Name:es" => "Funda Móvil",
                "Section Reference" => "ACCE02",
                "Product Description:en" => "Phone cover that will protect your phone even with the strongest falls. The phone cover you need!",
                "Product Description:es" => "Funda para tu movil que protegerá incluso con las caídas más fuertes. ¡La funda de que necesitas!",
                "Product Color" => "Black"
            ], 
        ],

        "variants" => [
            [
                "Product Reference" => "42PM020100483",
                "Variant Reference" => "FR1342",
                "Variant Size" => "L", 
                "Variant Price" => "24.99" 
            ],  
            [                
                "Variant Reference" => "F234944",
                "Variant Price" => "49.99" 
            ],
        ]
    ];

    // set_info function
    $response = $SLConn->set_info($input_data);

    //error verification
    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".
             "Connector ID: <b>". $SLConn->get_identification_code()."</b><br />\n".
             "Time: <b>".       $SLConn->get_response_time()       ."</b> (GMT 0)<br/>\n".
             "</p>";

        //tracking functions
        do {
            $status = $SLConn->get_input_tracking_status();
            echo "Status: ".    $status.
                 ', percent: '. $SLConn->get_input_tracking_percent().
                 '%, message: '.$SLConn->get_input_tracking_message()." <br>\n";
            flush(); ob_flush(); sleep(1);
        } while (!in_array($status, ['error', 'end']));

        //Resume of Total Information
        echo "<br />\n".
             "Total information: ". print_r($SLConn->get_data_returned(), 1);
    }  
    ?>
    </body>
</html>


La estructura de input_data sigue siempre este patrón:

$input_data = [ "table" => [ [ "reference" => "", "field1" => "", "field2" => "" ], ... ], ... ];

En los registros de categorías del ejemplo, se actualizan dos categorías y se crea una nueva categoría. No es necesario enviar todos los campos de categoría al crear un nuevo registro, solo los campos requeridos por el conector y el campo de referencia.

En el bloque de productos, se actualiza la descripción de un producto en inglés y se crea un segundo producto con valores multidioma para el nombre y la descripción.


!

Aviso:
El campo de referencia relacionado es obligatorio en todas las tablas. Es necesario para crear nuevos ítems y también es el campo que permite a Sales Layer reconocer los ítems existentes que deben actualizarse.

Para importar valores multidioma, los idiomas correspondientes deben estar habilitados en los parámetros del conector y los nombres de campo en "input_data" deben incluir el sufijo ISO correcto, como "Product Name:en" o "Product Description:es".

En el bloque de variantes, se crea una variante y se actualiza otra variante modificando solo el campo de precio.

Después de enviar la solicitud de importación, el script comprueba si hay errores y utiliza las funciones de seguimiento para monitorizar el progreso: get_input_tracking_status(), get_input_tracking_percent() y get_input_tracking_message().


Ejecución y resultados


Cuando se ejecuta el script, el conector devuelve la versión de la API, el ID del conector, la hora de la solicitud, el estado del seguimiento y la cantidad total de información importada.





Una vez finalizado el proceso, puedes verificar los datos importados en Sales Layer revisando las tablas de categorías, productos y variantes.





La API también se puede utilizar para eliminar información existente. Para hacerlo, incluye el campo Status en el conector y envía el valor X para la referencia que quieres eliminar.



Después de ejecutar esa importación, el ítem se elimina y deja de aparecer en Sales Layer.




Por último, en lugar de enviar una estructura input_data en línea, el SDK también puede importar un archivo CSV alojado en un servidor. En ese caso, la solicitud incluye la URL del archivo y cualquier dato de conexión necesario, como usuario, contraseña y puerto.



¿Le ha sido útil este artículo?

¡Qué bien!

Gracias por sus comentarios

¡Sentimos mucho no haber sido de ayuda!

Gracias por sus comentarios

¡Háganos saber cómo podemos mejorar este artículo!

Seleccione al menos una de las razones
Se requiere la verificación del CAPTCHA.

Sus comentarios se han enviado

Agradecemos su esfuerzo e intentaremos corregir el artículo