Sincronizzazione automatica dei prezzi dei pacchetti in caso di variazioni dei prezzi delle varianti

Sincronizzazione automatica dei prezzi dei pacchetti in caso di variazioni dei prezzi delle varianti

Copia pagina

Aggiorna automaticamente il prezzo delle varianti dei pacchetti Shopify Bundles quando cambia il prezzo di una variante componente, con Shopify Flow.

Quando si utilizza l’app Shopify Bundles per creare pacchetti di prodotti, la modifica del prezzo di una variante di un prodotto componente non comporta l’aggiornamento automatico del prezzo della variante del pacchetto. Il trigger “Product Variant Price Changed” disponibile all’indirizzo Workflow Trigger Extensions risolve questo problema rilevando la variazione di prezzo e ricalcolando e aggiornando automaticamente il prezzo della variante del pacchetto.


Ipermetteremo il seguente scenario per comprendere in che modo è possibile utilizzare il trigger “Modifica del prezzo della variante del prodotto” per mantenere sincronizzati i prezzi dei pacchetti.

Scenario: Aggiornamento automatico del prezzo del pacchetto in caso di variazione del prezzo di una variante di un componente

Immagini di avere un prodotto in bundle (ad esempio, un bundle di magliette) creato con l’app “ShopifyBundles”. Il bundle contiene tre prodotti componenti: maglietta nera, maglietta grigia e maglietta bianca, ciascuno al prezzo di 10,00 € per variante. Il prezzo della variante del pacchetto è di 30,00 € (la somma dei prezzi di tutti i prodotti che lo compongono). Quando modifica il prezzo di una variante di un prodotto che compone il pacchetto, questo Shopify Flow aggiornerà automaticamente il prezzo della variante corrispondente del pacchetto.

Attivi questo trigger dalle impostazioni dell'app -> Varianti del prodotto -> Modifiche ai prezzi delle varianti

Modifica del prezzo di una variante del prodotto

Recuperare il prodotto principale del pacchetto, calcolare i prezzi aggiornati delle varianti e aggiornare in blocco i prezzi delle varianti del pacchetto tramite l’API di amministrazione

Guida video

Potete seguire visivamente i passaggi anche in questo video (il video è muto; potete regolare la velocità del video in base alle vostre esigenze)

Come intendiamo organizzare Shopify Flow per questo processo

Comprendere la configurazione

  • Abbiamo un prodotto composto (ad esempio, una maglietta grigia) con le varianti S, M, L, XL, 2XL, ciascuna al prezzo di 10,00 €.
  • Disponiamo di un prodotto in bundle creato con l’app “Shopify Bundles”. Esso contiene 3 prodotti in bundle (maglietta nera, maglietta grigia, maglietta bianca), ciascuno con 5 varianti. Il prezzo della variante del bundle è di 30,00 € (somma dei prezzi dei componenti: 3 × 10,00 €).

Qui potete vedere visivamente i passaggi seguiti:

  • In "Workflow Trigger Extensions", apra la sezione "Trigger", cerchi "Prezzo" e attivi l’opzione "Modifica del prezzo della variante del prodotto". È necessario disporre dell’accesso ai dati relativi a prodotti, varianti e collezioni; l’app richiederà tale autorizzazione qualora non fosse presente.
  • Creare un nuovo workflow vuoto dall’app Shopify Flow e selezionare il trigger “Variante del prodotto Price Changed” dall’app “Workflow Trigger Extensions”
  • Aggiunga un'azione "Recupera dati prodotto" per recuperare il prodotto modificato utilizzando una query avanzata, ordinata in ordine crescente in base al campo "data di creazione". Questo passaggio recupera le informazioni relative al bundle padre del prodotto tramite il campo productParents. La query è la seguente: id:{{productVariant.product.id | split: "gid://shopify/Product/" | last}}
  • Aggiunga un passaggio "Esegui codice" per estrarre l'ID del prodotto principale dal risultato di getProductData. Il codice estrae gli ID dei prodotti principali da productParents e genera una stringa idsCondition da utilizzare per l'interrogazione.

Il passaggio "Esegui codice" utilizza il seguente input GraphQL, il codice JavaScript e i risultati in uscita per ottenere gli ID dei prodotti principali:

Esecuzione del passaggio "Esegui codice" che mostra l'input GraphQL, il codice JavaScript e l'anteprima dell'output

Nella pagina "Trigger" è stata effettuata una ricerca per "Prezzo", con l'opzione "Modifica del prezzo della variante del prodotto" attivata
Nell'app: in "Trigger", cercate "Prezzo" e attivate l'opzione "Modifica del prezzo della variante del prodotto".
Il selettore di variabili di Shopify Flow per la modifica del prezzo delle varianti del prodotto, con i parametri oldPrice, newPrice, delta, percentChange e direction
La sezione “Prezzo modificato della variante del prodotto” fornisce le seguenti informazioni: il prezzo prima e dopo la modifica, la differenza, la percentuale e la direzione della variazione.
bash
{
  getProductData {
    productParents {
      id
    }
  }
}
javascript
export default function main(input) {
  const productIds = input.getProductData[0]?.productParents?.map(p => p.id) ?? [];
  const productId = productIds[0] ?? null;

  const idsCondition = productIds
    .map(gid => "id:" + gid.split("gid://shopify/Product/").pop())
    .join(" OR ");

  return {
    productId: productId,
    productIds: productIds,
    idsCondition: idsCondition,
  };
}
typescript
type Output {
  productId: String
  productIds: [String!]!
  idsCondition: String!
}
  • Aggiunga un passaggio "Condizione" che verifichi se l'output del codice "Esegui" productId non sia vuoto ed esista effettivamente. Ciò garantisce che si proceda solo quando il prodotto modificato fa effettivamente parte di un pacchetto.
  • Vero → continuare ad aggiornare il prezzo del pacchetto
  • Falso → interrompere (il prodotto non è un componente del pacchetto)
  • Se la condizione è vera, aggiunga un’altra azione “Recupera dati prodotto (1)” per recuperare i dati relativi alle varianti e ai prezzi del prodotto bundle principale utilizzando l’idsCondition dal passaggio “Esegui codice”.
  • Aggiunga un secondo passaggio "Esegui codice (1)" per calcolare i prezzi delle nuove varianti di pacchetto in base ai prezzi aggiornati dei componenti. Questo passaggio genera un array di tipo variantPrices contenente i nuovi prezzi per ciascuna variante di pacchetto.

Questa fase del codice "Esegui" (1) ricalcola i prezzi delle varianti del pacchetto in base al prezzo aggiornato dei componenti. Ecco come funziona: innanzitutto, estrae due informazioni fondamentali dal trigger:

  • changedVariantId le varianti che sono state appena modificate (...158920)
  • newPrice il nuovo prezzo di quella variante (11.00). Successivamente, esegue un ciclo su ogni variante del pacchetto e ricalcola il relativo prezzo totale. Ogni variante del pacchetto comprende 3 varianti di componenti (maglietta nera, maglietta grigia, maglietta bianca). Per ogni componente, verifica: si tratta della variante appena modificata? In caso affermativo, utilizza newPrice (11,00) anziché il prezzo obsoleto ancora memorizzato in Shopify (10,00). In caso negativo, utilizza il prezzo esistente component.productVariant.price.It. Il sistema somma i prezzi dei componenti per ottenere il nuovo prezzo della variante del pacchetto. Potete osservarne il funzionamento nei vostri dati di output. Si osservi la variante ...088840: i suoi componenti includono ...158920 (la variante modificata). Pertanto, il suo prezzo è 11 + 10 + 10 = 31, mentre tutte le altre varianti del pacchetto mantengono un totale di 30 poiché nessuno dei loro componenti è stato modificato.Questo è il concetto chiave di questa fase: Shopify non ha ancora aggiornato il prezzo del componente nei dati del pacchetto, pertanto il codice non può limitarsi a sommare i prezzi esistenti, ma deve sostituire al volo il prezzo della variante modificata con quello nuovo. Senza questa operazione, tutte le varianti continuerebbero a visualizzare il valore 30. L’array di output variantPricesviene quindi trasmesso al ciclo «For each», il quale richiama la funzione productVariantsBulkUpdateper riscrivere effettivamente questi prezzi ricalcolati nel prodotto in bundle.
bash
{
  productVariant {
    id
  }
  priceChange {
    oldPrice { amount }
    newPrice { amount }
  }
  getProductData1 {
    id
    variants {
      id
      productVariantComponents {
        productVariant {
          id
          price
        }
      }
    }
  }
}
javascript
export default function main(input) {
  const changedVariantId = input.productVariant.id;
  const newPrice = parseFloat(input.priceChange.newPrice.amount);

  const variantPrices = input.getProductData1.flatMap(product =>
    product.variants.map(variant => ({
      productId: product.id,
      id: variant.id,
      price: variant.productVariantComponents.reduce((sum, component) => {
        const p = component.productVariant.id === changedVariantId
          ? newPrice
          : parseFloat(component.productVariant.price);
        return sum + p;
      }, 0)
    }))
  );

  return { variantPrices };
}
yaml
type VariantPrice {
  productId: String!
  id: String!
  price: Float!
}
type Output {
  variantPrices: [VariantPrice!]!
}
  • Aggiunga un ciclo “For each” (iterazione) che scorra tutti gli elementi presenti in runCode1.variantPrices. Per ogni variante di prezzo, esegua l’azione “Invia richiesta API di amministrazione” utilizzando la mutazione productVariantsBulkUpdate per aggiornare il prezzo della variante del pacchetto. È possibile utilizzare questo input per la mutazione:
json
{
  "variants": [
    {
      "id": "{{variantPricesForeachitem.id}}",
      "price": "{{variantPricesForeachitem.price}}"
    }
  ],
  "productId": "{{variantPricesForeachitem.productId}}",
  "allowPartialUpdates": true
}

Come funziona il tutto nel suo insieme

Quando il prezzo di una variante di un prodotto (ad esempio, se aggiorna il prezzo della variante “S” della maglietta grigia da 10,00 € a 15,00 €):

  1. Si attiva il trigger “Modifica del prezzo della variante del prodotto”
  2. Shopify Flow recupera il bundle padre del prodotto utilizzando productParents
  3. La fase "Esegui codice" estrae l'ID del prodotto in bundle
  4. Questa condizione verifica se il prodotto in questione fa parte di un pacchetto
  5. In caso affermativo, recupera i dati relativi al pacchetto di prodotti
  6. Una seconda fase di esecuzione del codice ricalcola i prezzi delle varianti del pacchetto
  7. Il ciclo esegue un'iterazione su ciascuna variante e aggiorna il prezzo del pacchetto tramite la mutazione dell'API di amministrazione productVariantsBulkUpdate

Il prezzo della variante "Bundle S" verrebbe ora aggiornato da 30,00 € a 35,00 € (15,00 € + 10,00 € + 10,00 €).