Cómo utilizar los modificadores de sincronización

Overview #

Modificadores es una potente herramienta que le permite cambiar los datos del producto después de la sincronización sin necesidad de que un desarrollador realice cambios en la fuente de datos. Dado que se trata de una herramienta experimental, por el momento sólo puede utilizarla el personal interno. Así que por favor contacte con soporte si necesita esta funcionalidad.

Soporta los siguientes comandos.

Comando Efecto
Establecer: Añade un atributo a todos los productos.
deleteElimina un atributo en todos los productos
Actualiza un atributo en todos los productos.
Tipo: Cambia el tipo de un atributo en todos los productos.
splitDivide una cadena por separador, en una lista de cadenas.
ExpresiónEvalúa una expresión en un atributo
Formatear: Formatea una cadena en un atributo.
Formatea una cadena con todos los caracteres en minúsculas.
Formatea una cadena con todos los caracteres en mayúsculas.
Formatea una cadena a mayúsculas con el primer carácter en mayúscula.

Todos los comandos admiten también la cláusula if. La cláusula if puede añadirse a cualquier cosa con una sentencia, y el comando sólo se ejecutará en el atributo si la sentencia se evalúa como verdadera.

Comandos #

Aquí están cada uno de los comandos con un ejemplo, con variables según sea necesario. Todos los comandos toman un tipo que especifica qué comando ejecutar, y un atributo que indica sobre qué atributo ejecutar el comando.

Set #

Toma un new_value que indica a que valor establecer el atributo, puede ser usado tanto como un nuevo atributo, o sobre uno existente para reemplazarlo.

{
  "type": "set",
  "attribute": ATRIBUTO,
  "nuevo_valor": NUEVO_VALOR
}

Ejemplo En este ejemplo sobrescribiré el atributo ‘shown’ si el producto está agotado.

{
    "type": "set",
    "attribute": "shown",
    "new_value": "false",
    "if": "stock < 1"
}

Después { “id”: 153, “name”: “Paracaídas Lineman”, “price”: 200.00, }

Actualización #

Si no eres técnico y estás leyendo esto. Ponte al día porque estamos usando regex con la librería python.

Update toma el atributo regexp que es una expresión regex que coincide en algunas partes del atributo y reemplaza cada grupo coincidente con el contenido de replace_by. Aquí hay una herramienta de ayuda para que elabores tu regex.

Un ejemplo de regex podría ser [/]+ con un replace_by de ’/’, esto tomaría todos los lugares en el atributo que tiene múltiples / en una fila y los reemplazaría con / singular. Así, https://test//tests se convertiría en https:/test/tests.

{
  "type": "update"
  "attribute": ATRIBUTO
  "regexp": MATCH_REGEX
  "replace_by": STRING
}

Ejemplo Aquí voy a eliminar una parte de la url, con una regex que machaque la última parte de la url, asegurándome de escapar el /.

Antes de #

{
  "id": 153,
  "name": "Lineman Chute",
  "stock" : 0,
  "shown" : true,
  "price": 200.00,
}

Formato #

Permite formatear cadenas de atributos. El atributo en su interior probablemente ya tendría una cadena formateable, probablemente hecha por usted con set o update. Pero esto permite entradas dinámicas de otras partes de los datos del producto en este atributo.

Esto podría empezar con la adición de {currency} al final del atributo de precio con una actualización y, a continuación, llamando a esto se sumará lo que está en la moneda atributo de productos en el precio.

Si los datos necesarios no es un atributo en el producto, también puede agregar el atributo extra al comando.

{
  "tipo": "formato",
  "atributo": ATRIBUTO,
  ... : ... #(puede incluir más atributos que sean necesarios para formatear)
}

Ejemplo Aquí voy a añadir una moneda al final del precio, primero tendré que cambiar el tipo a cadena, luego inyectarle la sintaxis de formateado, y después conseguiré formatearlo. El comando update añade el valor en replace_by al final del precio.

[
{ "type": "tipo",
  "attribute": "precio",
  "nuevo_tipo": "cadena"
},{
  "type": "update",
  "attribute": "price",
  "regexp":"$",
  "replace_by":"{currency}"
},{
  "type": "format",
  "attribute": "price",
  "currency":" DKK"
}
]

En #

{
  "id": 153,
  "name": "Lineman Chute",
  "stock" : 0,
  "shown" : false,
  "price": 200.00,
}

Después { “id”: 153, “name”: “Paracaídas Lineman”, “price”: 200.00, “precio_alt”: “130.0”, }

Si #

Si se añade if a cualquiera de los comandos anteriores con una sentencia, el comando sólo se ejecutará en los atributos en los que la sentencia dada se evalúe como verdadera.

Para ver un ejemplo, consulte el ejemplo del comando Set.

{
  "tipo": "eliminar"
  "atributo": ATRIBUTO,
  "if": "precio &lt; 200"
}

Ejemplo de modificación múltiple #

He aquí un ejemplo de múltiples modificaciones encadenadas. Aquí estoy haciendo un nuevo atributo llamado price_alt para un producto específico. Toma tanto el precio y la moneda y hacer un nuevo campo con ellos.

[{
  "type": "set",
  "attribute": "precio_alt",
  "new_value":"{proce}{currency}",
  "if": "id == 153"
},{
  "type": "update",
  "attribute": "price_alt",
  "regexp": "o",
  "replace_by": "i",
  "if": "id == 153"
},{
  "type": "format",
  "attribute": "precio_alt",
  "currency": "DKK",
  "if": "id == 153"
}]

Borrar #

Elimina el atributo dado de todos los productos.

{
  "type":"delete",
  "attribute": ATTRIBUTE
}

**Ejemplo Aquí voy a eliminar el atributo mostrado para todos los productos.

{
  "type":"delete",
  "attribute": "shown"
}

Antes de #

{
  "id": 153,
  "name": "Lineman Chute",
  "shown": true,
  "price": 200.00,
}

En #

{
  "id": 153,
  "name": "Lineman Chute",
  "price": 200.00,
}

Actualización #

Si no eres técnico y estás leyendo esto. Ponte al día porque estamos usando regex con la librería python.

Update toma el atributo regexp que es una expresión regex que coincide en algunas partes del atributo y reemplaza cada grupo coincidente con el contenido de replace_by. Aquí hay una herramienta de ayuda para que elabores tu regex.

Un ejemplo de regex podría ser [/]+ con un replace_by de ’/’, esto tomaría todos los lugares en el atributo que tiene múltiples / en una fila y los reemplazaría con / singular. Así, https://test//tests se convertiría en https:/test/tests.

{
  "type":"update",
  "attribute": "ATTRIBUTE",
  "regexp": "MATCH_REGEX",
  "replace_by": "STRING",
}

**Ejemplo Aquí voy a eliminar una parte de la url, con una regex que machaque la última parte de la url, asegurándome de escapar el /.

{
  "type":"update",
  "attribute": "url",
  "regexp": "\/\/__example",
  "replace_by": ""
}

Antes de #

{
  "id": 153,
  "name": "Lineman Chute",
  "url": "https://example.domain/product/153//__example",
  "price": 200.00
}

En #

{
  "id": 153,
  "name": "Lineman Chute",
  "url": "https://example.domain/product/153",
  "price": 200.00
}

Tipo #

Permite el cambio de tipos en un atributo. Así que si el dato es un número y necesitas que sea una cadena, puedes usar esto para encasillarlo.

{
  "type":"type",
  "attribute": "ATTRIBUTE",
  "new_type": any of ["string", "int", "float", "boolean"]
}

**Ejemplo Aquí estamos cambiando el tipo del precio, de string a float.

{
  "type":"type",
  "attribute": "price",
  "new_type": "float"
}

Antes de #

{
  "id": 153,
  "name": "Lineman Chute",
  "price": "200",
}

En #

{
  "id": 153,
  "name": "Lineman Chute",
  "price": 200.00,
}

Dividir #

Permite dividir una cadena por un separador, en una lista de cadenas. Por defecto se divide por comas si no se da ningún separador.

{
  "type":"split",
  "attribute": "ATTRIBUTE",
  "separator": "STRING"
}

**Ejemplo Aquí estamos dividiendo un atributo con categorías.

{
  "type":"split",
  "attribute": "string_categories"
}

Antes de #

{
  "id": 153,
  "name": "Lineman Chute",
  "string_categories": "lineman, chute"
}

En #

{
  "id": 153,
  "name": "Lineman Chute",
  "string_categories":["lineman","chute"]
}

Formato #

Permite crear una cadena formateada.

Esto podría estar haciendo un nuevo valor valled {price} {currency}.

Si los datos necesarios no es un atributo en el producto, también puede agregar el atributo extra al comando.

{
  "type":"format",
  "attribute": ATTRIBUTE,
  "new_value": VALUE_TO_SET,
  ... : ... #(can include more attributes that are needed for formating)
}

**Ejemplo Aquí voy a añadir una moneda al final del precio, primero tendré que cambiar el tipo a cadena, luego inyectar la sintaxis formateada, y luego le daré formato. El comando update añade el valor en replace_by al final del precio.

[
{
  "type":"format",
  "attribute": "price_with_currency",
  "new_value": "{price} {currency}"
}
]

Antes de #

{
  "id": 153,
  "name": "Lineman Chute",
  "currency": "DKK",
  "price": 200.00,
}

En #

{
  "id": 153,
  "name": "Lineman Chute",
  "currency": "DKK",
  "price": 200.00,
  "price_with_currency": "200.00 DKK"
}

Expresión #

Evalúa una expresión que está en el atributo dado. Por ejemplo, si hay la cadena ‘precio * 0.8’ dentro de un atributo y ejecutamos la expresión sobre ella, el resultado será el 80% de lo que hay en el atributo precio.

{
  "type":"expression",
  "new_value": NEW_VALUE,
  "attribute": ATTRIBUTE
}

**Ejemplo Evalúa una expresión que está en el atributo dado. Por ejemplo, si hay la cadena ‘precio * 0.8’ dentro de un atributo y ejecutamos la expresión sobre ella, el resultado será el 80% de lo que hay en el atributo precio.

[
    {
        "type": "expression",
        "attribute": "price_alt",
        "new_value": "price * 0.65"
    }
]

Antes de #

{
  "id": 153,
  "name": "Lineman Chute",
  "price": 200.00,
}

En #

{
  "id": 153,
  "name": "Lineman Chute",
  "price": 200.00,
  "price_alt": "130.0",
}

If #

Si se añade if a cualquiera de los comandos anteriores con una sentencia, el comando sólo se ejecutará en los atributos en los que la sentencia dada se evalúe como verdadera.

Los operadores disponibles son:

Operador Significado
Coincide con todos los productos en los que el atributo es igual al valor.
Coinciden con todos los productos en los que el atributo no es igual al valor.
Coinciden con todos los productos cuyo atributo es mayor que el valor.
Coinciden con todos los productos cuyo atributo es mayor o igual que el valor.
Coinciden con todos los productos cuyo atributo es menor que el valor.
`inCoincidir con una subcadena de una cadena o un elemento de una lista

Cuando se compara un atributo con un valor específico, la sintaxis es:

{
  "type":"delete"
  "attribute": ATTRIBUTE,
  "if":"ATTRIBUTE OPERATOR VALUE"
}

Cuando se evalúa una subcadena de una cadena o un elemento de una lista, la sintaxis es:

{
  "type":"delete"
  "attribute": ATTRIBUTE,
  "if":"VALUE in ATTRIBUTE"
}

**Ejemplo Comparación con un valor específico

{
    "type": "set",
    "attribute": "shown",
    "new_value": "false",
    "if": "stock < 1"
}

**Ejemplo Comprobación de una subcadena

{
    "type": "set",
    "attribute": "shown",
    "new_value": "false",
    "if": "'withdrawn' in name"
}

if statements can be also grouped using ‘and’/‘or’ in statements:

{
    "type": "set",
    "attribute": "shown",
    "new_value": "false",
    "if": "(stock < 1 and 'withdrawn' in name) or brand = 'Nike'"
}

Ejemplo de modificación múltiple #

He aquí un ejemplo de múltiples modificaciones encadenadas. Aquí estoy haciendo un nuevo atributo llamado price_alt para un producto específico. Toma tanto el precio y la moneda y hacer un nuevo campo con ellos.

[{
  "type":"set",
  "attribute":"price_alt",
  "new_value":"{price}{currency}",
  "if":"id == 153"
},{
  "type":"update",
  "attribute":"price_alt",
  "regexp":"o",
  "replace_by":"i",
  "if":"id == 153"
},{
  "type":"format",
  "attribute":"price_alt",
  "currency":"DKK",
  "if":"id == 153"
}]

Esto crearía un nuevo campo llamado price_alt con el precio y DKK al final.

Antes de #

{
  "id": 153,
  "name": "Lineman Chute",
  "price": 200.00,
}

En #

{
  "id": 153,
  "name": "Lineman Chute",
  "price": 200.00,
  "price_alt": "200.00DKK"
}