Come utilizzare i modificatori di sincronizzazione
Panoramica
I modificatori sono un potente strumento che consente di modificare i dati dei prodotti dopo la sincronizzazione, senza dover ricorrere a uno sviluppatore per apportare modifiche al flusso di dati. Poiché si tratta di uno strumento sperimentale, per il momento può essere utilizzato solo dal personale interno dell’ufficio. Pertanto, se avete bisogno di questa funzionalità, contattate il supporto.
Supporta i seguenti comandi.
Comando | Effetto |
---|---|
imposta | Aggiunge un attributo a tutti i prodotti |
delete | Rimuove un attributo in tutti i prodotti |
update | Aggiorna un attributo su tutti i prodotti |
type | Cambia il tipo di attributo in tutti i prodotti |
split | Divide una stringa per separatore, in un elenco di stringhe. |
expression | Valuta un’espressione in un attributo |
format | Formatta una stringa in un attributo |
inferiore | Formatta una stringa con tutti i caratteri minuscoli |
upper | Formatta una stringa con tutti i caratteri maiuscoli |
Formatta una stringa con il primo carattere in maiuscolo. |
Tutti i comandi supportano anche la clausola if. La clausola if può essere aggiunta a qualsiasi cosa con un’affermazione e il comando verrà eseguito sull’attributo solo se l’affermazione è vera.
Comandi
Qui di seguito sono riportati tutti i comandi con un esempio, con le variabili necessarie. Tutti i comandi prendono un tipo che specifica quale comando eseguire e un attributo che indica su quale attributo eseguire il comando.
Imposta
Prende un nuovo_valore che indica il valore a cui impostare l’attributo; può essere usato sia come nuovo attributo, sia in aggiunta a uno esistente per sostituirlo.
{
"tipo": "set",
"attributo": ATTRIBUTO,
"nuovo_valore": NUOVO_VALORE
}
Esempio In questo esempio, sovrascriverò l’attributo ‘shown’ se il prodotto è esaurito.
{
"type": "set",
"attribute": "shown",
"new_value": "false",
"if": "stock < 1"
}
Dopo { “id”: 153, “nome”: “Scivolo per l’elettricista”, “prezzo”: 200.00, }
Aggiornamento
Se non siete tecnici e state leggendo questo articolo. Tenetevi forte perché stiamo usando regex con la libreria python.
Update prende l’attributo regexp che è un’espressione regex che corrisponde ad alcune parti dell’attributo e sostituisce ogni gruppo corrispondente con il contenuto di replace_by. Ecco uno strumento utile per creare la propria regex.
Un esempio di regex potrebbe essere [/]+ con un replace_by di ’/’, questo prenderebbe tutti i punti dell’attributo che hanno più / di fila e li sostituirebbe con un singolo /. Quindi https://test//tests diventerebbe https:/test/tests.
{
"tipo": "aggiornamento"
"attributo": ATTRIBUTO
"regexp": MATCH_REGEX
"replace_by": STRINGA
}
Esempio In questo caso, rimuoverò una parte dell’url, con una regex che macina l’ultima parte dell’url, assicurandosi di fare l’escape di /.
Prima
{
"id": 153,
"name": "Lineman Chute",
"stock" : 0,
"shown" : true,
"price": 200.00,
}
Formato
Permette di formattare le stringhe degli attributi. L’attributo al suo interno avrà probabilmente già una stringa formattabile, probabilmente creata dall’utente con set o update. Ma questo permette di inserire dinamicamente altre parti dei dati del prodotto in questo attributo.
Si potrebbe iniziare con l’aggiunta di {currency} alla fine dell’attributo del prezzo con un aggiornamento e poi richiamare questa funzione per aggiungere al prezzo la valuta dell’attributo dei prodotti.
Se i dati necessari non sono un attributo del prodotto, si può anche aggiungere l’attributo extra al comando.
{
"tipo": "formato",
"attributo": ATTRIBUTO,
... : ... #(può includere altri attributi necessari per la formattazione)
}
Esempio Qui aggiungerò una valuta alla fine del prezzo; per prima cosa dovrò cambiare il tipo in una stringa, poi iniettare la sintassi di formattazione e quindi farla formattare. Il comando update aggiunge il valore in replace_by alla fine del prezzo.
[
{"type": "tipo",
"attributo": "prezzo",
"new_type": "string"
},{
"tipo": "aggiornamento",
"attributo": "prezzo",
"regexp":"$",
"replace_by":"{currency}"
},{
"tipo": "formato",
"attributo": "price",
"currency":" DKK"
}
]
Dopo
{
"id": 153,
"name": "Lineman Chute",
"stock" : 0,
"shown" : false,
"price": 200.00,
}
Dopo { “id”: 153, “nome”: “Scivolo per l’elettricista”, “prezzo”: 200.00, “prezzo_alt”: “130.0”, }
Se
Se if viene aggiunto a uno dei comandi precedenti con un’affermazione, il comando verrà eseguito solo sugli attributi in cui l’affermazione data è vera.
Per un esempio si veda l’esempio del comando Set.
{
"tipo": "elimina"
"attributo": ATTRIBUTO,
"if": "prezzo < 200"
}
Esempio di modifica multipla
Ecco un esempio di modifiche multiple concatenate. Qui sto creando un nuovo attributo chiamato price_alt per un prodotto specifico. Prende sia il prezzo che la valuta e crea un nuovo campo con essi.
[{
"type": "set",
"attribute": "price_alt",
"new_value":"{proce}{currency}",
"if": "id == 153"
},{
"tipo: "update",
"attributo": "price_alt",
"regexp": "o",
"replace_by": "i",
"if": "id == 153"
},{
"tipo": "formato",
"attributo": "prezzo_alt",
"currency": "DKK",
"if": "id == 153"
}]
Elimina
Elimina l’attributo indicato da tutti i prodotti.
{
"type":"delete",
"attribute": ATTRIBUTE
}
Esempio Qui rimuoverò l’attributo mostrato per tutti i prodotti.
{
"type":"delete",
"attribute": "shown"
}
Prima
{
"id": 153,
"name": "Lineman Chute",
"shown": true,
"price": 200.00,
}
Dopo
{
"id": 153,
"name": "Lineman Chute",
"price": 200.00,
}
Aggiornamento
Se non siete tecnici e state leggendo questo articolo. Tenetevi forte perché stiamo usando regex con la libreria python.
Update prende l’attributo regexp che è un’espressione regex che corrisponde ad alcune parti dell’attributo e sostituisce ogni gruppo corrispondente con il contenuto di replace_by. Ecco uno strumento utile per creare la propria regex.
Un esempio di regex potrebbe essere [/]+ con un replace_by di ’/’, questo prenderebbe tutti i punti dell’attributo che hanno più / di fila e li sostituirebbe con un singolo /. Quindi https://test//tests diventerebbe https:/test/tests.
{
"type":"update",
"attribute": "ATTRIBUTE",
"regexp": "MATCH_REGEX",
"replace_by": "STRING",
}
Esempio Qui rimuoverò una parte dell’url, con una regex che macina l’ultima parte dell’url, assicurandosi di fare l’escape del /.
{
"type":"update",
"attribute": "url",
"regexp": "\/\/__example",
"replace_by": ""
}
Prima
{
"id": 153,
"name": "Lineman Chute",
"url": "https://example.domain/product/153//__example",
"price": 200.00
}
Dopo
{
"id": 153,
"name": "Lineman Chute",
"url": "https://example.domain/product/153",
"price": 200.00
}
Tipo
Consente di cambiare il tipo di attributo. Quindi, se il dato è un numero e si vuole che sia una stringa, si può usare questa funzione per effettuare la tipizzazione.
{
"type":"type",
"attribute": "ATTRIBUTE",
"new_type": any of ["string", "int", "float", "boolean"]
}
Esempio Qui stiamo cambiando il tipo di prezzo, da stringa a float.
{
"type":"type",
"attribute": "price",
"new_type": "float"
}
Prima
{
"id": 153,
"name": "Lineman Chute",
"price": "200",
}
Dopo
{
"id": 153,
"name": "Lineman Chute",
"price": 200.00,
}
Dividere
Consente di dividere una stringa da un separatore in un elenco di stringhe. Se non viene fornito alcun separatore, la suddivisione avviene per virgola.
{
"type":"split",
"attribute": "ATTRIBUTE",
"separator": "STRING"
}
Esempio Qui stiamo dividendo un attributo con delle categorie.
{
"type":"split",
"attribute": "string_categories"
}
Prima
{
"id": 153,
"name": "Lineman Chute",
"string_categories": "lineman, chute"
}
Dopo
{
"id": 153,
"name": "Lineman Chute",
"string_categories":["lineman","chute"]
}
Formato
Permette di creare una stringa formattata.
Potrebbe trattarsi della creazione di un nuovo valore valled {price} {currency}.
Se i dati necessari non sono un attributo del prodotto, si può anche aggiungere l’attributo extra al comando.
{
"type":"format",
"attribute": ATTRIBUTE,
"new_value": VALUE_TO_SET,
... : ... #(can include more attributes that are needed for formating)
}
Esempio Qui aggiungerò una valuta alla fine del prezzo; per prima cosa dovrò cambiare il tipo in una stringa, poi iniettare la sintassi formattata e infine farla formattare. Il comando update aggiunge il valore in replace_by alla fine del prezzo.
[
{
"type":"format",
"attribute": "price_with_currency",
"new_value": "{price} {currency}"
}
]
Prima
{
"id": 153,
"name": "Lineman Chute",
"currency": "DKK",
"price": 200.00,
}
Dopo
{
"id": 153,
"name": "Lineman Chute",
"currency": "DKK",
"price": 200.00,
"price_with_currency": "200.00 DKK"
}
Espressione
Valuta un’espressione che si trova nell’attributo dato. Per esempio, se c’è la stringa ‘prezzo * 0,8’ all’interno di un attributo e si esegue un’espressione su di essa, il risultato sarà l'80% di quanto contenuto nell’attributo prezzo.
{
"type":"expression",
"new_value": NEW_VALUE,
"attribute": ATTRIBUTE
}
Esempio Valuta un’espressione che si trova nell’attributo dato. Ad esempio, se all’interno di un attributo c’è la stringa ‘prezzo * 0,8’ e si esegue un’espressione su di essa, il risultato sarà l'80% di quanto contenuto nell’attributo prezzo.
[
{
"type": "expression",
"attribute": "price_alt",
"new_value": "price * 0.65"
}
]
Prima
{
"id": 153,
"name": "Lineman Chute",
"price": 200.00,
}
Dopo
{
"id": 153,
"name": "Lineman Chute",
"price": 200.00,
"price_alt": "130.0",
}
Se
Se if viene aggiunto a uno dei comandi precedenti con un’affermazione, il comando verrà eseguito solo sugli attributi in cui l’affermazione data è vera.
Gli operatori disponibili sono:
Operatore | Significato |
---|---|
= | Corrisponde a tutti i prodotti in cui l’attributo è uguale al valore. |
!= | Corrisponde a tutti i prodotti in cui l’attributo non è uguale al valore. |
> | Corrisponde a tutti i prodotti in cui l’attributo è maggiore del valore. |
>= | Abbina tutti i prodotti in cui l’attributo è maggiore o uguale al valore. |
< | Corrisponde a tutti i prodotti in cui l’attributo è inferiore al valore. |
`in | Corrisponde a una sottostringa in una stringa o a un elemento in un elenco |
Quando si confronta un attributo con un valore specifico, la sintassi è:
{
"type":"delete"
"attribute": ATTRIBUTE,
"if":"ATTRIBUTE OPERATOR VALUE"
}
Quando si valuta una sottostringa in una stringa o un elemento in un elenco, la sintassi è:
{
"type":"delete"
"attribute": ATTRIBUTE,
"if":"VALUE in ATTRIBUTE"
}
Esempio Confronto con un valore specifico
{
"type": "set",
"attribute": "shown",
"new_value": "false",
"if": "stock < 1"
}
Esempio Controllo di una sottostringa
{
"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'"
}
Esempio di modifica multipla
Ecco un esempio di modifiche multiple concatenate. Qui sto creando un nuovo attributo chiamato price_alt per un prodotto specifico. Prende sia il prezzo che la valuta e crea un nuovo campo con essi.
[{
"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"
}]
In questo modo si creerebbe un nuovo campo chiamato price_alt con il prezzo e le DKK alla fine.
Prima
{
"id": 153,
"name": "Lineman Chute",
"price": 200.00,
}
Dopo
{
"id": 153,
"name": "Lineman Chute",
"price": 200.00,
"price_alt": "200.00DKK"
}