Automatyczna synchronizacja cen pakietów w przypadku zmian cen wariantów
Automatyczna aktualizacja cen wariantów pakietów w Shopify w przypadku zmiany ceny wariantu składowego za pomocą Shopify Flow.
W przypadku korzystania z **aplikacji **Shopify Bundles do tworzenia zestawów produktów zmiana ceny wariantu produktu składowego nie powoduje automatycznej aktualizacji ceny wariantu produktu zestawowego. Wyzwalacz Zmiana ceny wariantu produktu z rozszerzeń Workflow Trigger Extensions rozwiązuje ten problem poprzez wykrywanie zmiany ceny oraz automatyczne przeliczanie i aktualizowanie ceny wariantu zestawu.
Aby zrozumieć, w jaki sposób można wykorzystać wyzwalacz Zmiana ceny wariantu produktu do synchronizacji cen zestawów, przyjmiemy następujący scenariusz.
Scenariusz: Automatyczna aktualizacja ceny pakietu w przypadku zmiany ceny wariantu komponentu
Proszę sobie wyobrazić, że posiada Pan/Pani produkt w pakiecie (np. zestaw koszulek) utworzony za pomocą aplikacji „Shopify Bundles”. Pakiet zawiera trzy produkty składowe: czarną koszulkę, szarą koszulkę i białą koszulkę, z których każdy kosztuje 10,00 € za wariant. Cena wariantu zestawu wynosi 30,00 € (suma cen wszystkich produktów składowych). Gdy zmienią Państwo cenę wariantu produktu składowego, ten proces automatycznie zaktualizuje odpowiednią cenę wariantu zestawu.
Proszę włączyć ten wyzwalacz w ustawieniach aplikacji -> Warianty produktów -> Zmiany cen wariantów
Zmieniono cenę wariantu produktu
Proszę pobrać produkt nadrzędny zestawu, obliczyć zaktualizowane ceny wariantów oraz zbiorczo zaktualizować ceny wariantów zestawu za pośrednictwem interfejsu API administratora
Przewodnik wideo
Poszczególne etapy można również obejrzeć na tym filmie (film nie zawiera dźwięku; można dostosować prędkość odtwarzania do własnych potrzeb)
Jak zamierzamy to zorganizować
Zrozumienie konfiguracji
- Oferujemy produkt składający się z elementów (np. szara koszulka) w wariantach rozmiarowych S, M, L, XL, 2XL, z których każdy kosztuje 10,00 €.
- Posiadamy produkt w pakiecie utworzony za pomocą aplikacji „Shopify Bundles”. Zawiera on 3 produkty w pakiecie (czarna koszulka, szara koszulka, biała koszulka), z których każdy ma 5 wariantów. Cena wariantu zestawu wynosi 30,00 € (suma cen poszczególnych elementów: 3 × 10,00 €).
Tutaj mogą Państwo zapoznać się z poszczególnymi etapami w formie graficznej:
- W aplikacji Workflow Trigger Extensions proszę otworzyć sekcję Triggers, wyszukać hasło Price i włączyć opcję Product Variant Price Changed. Wymagany jest dostęp do danych dotyczących produktów, wariantów i kolekcji; aplikacja poprosi o nadanie uprawnień, jeśli ich brakuje.
- Proszę utworzyć nowy, pusty przepływ pracy w aplikacji Shopify Flow i wybrać wyzwalacz Zmiana ceny wariantu produktu z aplikacji Workflow Trigger Extensions
- Proszę dodać akcję Pobierz dane produktu, aby pobrać zmieniony produkt za pomocą zaawansowanego zapytania, posortowanego według daty utworzenia w porządku rosnącym. Ten krok pobiera informacje o pakiecie nadrzędnym produktu za pośrednictwem pola
productParents. Zapytanie wygląda następująco:id:{{productVariant.product.id | split: "gid://shopify/Product/" | last}} - Proszę dodać krok Uruchom kod, aby wyodrębnić identyfikator produktu nadrzędnego z wyniku funkcji
getProductData. Kod wyodrębnia identyfikatory produktów nadrzędnych zproductParentsi tworzy ciąg znakówidsConditiondo wykorzystania w zapytaniu.
Krok Uruchom kod wykorzystuje poniższe dane wejściowe GraphQL, kod JavaScript oraz wyniki, aby uzyskać identyfikatory produktów nadrzędnych:
Krok „Uruchom kod” przedstawiający dane wejściowe GraphQL, kod JavaScript oraz podgląd wyników


{
getProductData {
productParents {
id
}
}
}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,
};
}type Output {
productId: String
productIds: [String!]!
idsCondition: String!
}- Proszę dodać krok Warunek, który sprawdzi, czy wartość
productIdwygenerowana przez kod „Uruchom” nie jest pusta i czy istnieje. Dzięki temu będziemy kontynuować tylko wtedy, gdy zmieniony produkt faktycznie wchodzi w skład pakietu. - Prawda → kontynuować aktualizację ceny pakietu
- Fałsz → zatrzymaj (produkt nie jest elementem pakietu)
- Jeśli warunek ma wartość True, proszę dodać kolejną akcję Pobierz dane produktu (1), aby pobrać dane dotyczące wariantów i cen produktu nadrzędnego w pakiecie, korzystając z parametru
idsConditionz kroku „Uruchom kod”. - Proszę dodać drugi krok Uruchom kod (1), aby obliczyć ceny nowych wariantów pakietów na podstawie zaktualizowanych cen komponentów. W wyniku tego kroku generowana jest tablica
variantPrices, zawierająca nowe ceny dla każdego wariantu pakietu.
Ten etap Uruchom kod (1) polega na ponownym obliczeniu cen wariantów pakietów na podstawie zaktualizowanej ceny komponentu. Oto, jak przebiega ten proces: Najpierw pobiera dwie kluczowe informacje z wyzwalacza:
changedVariantId- wariant, który właśnie został zmieniony (...158920)newPrice- nowa cena dla tego wariantu (11.00). Następnie program przechodzi cyklicznie przez każdy wariant zestawu i ponownie oblicza jego cenę całkowitą. Każdy wariant zestawu składa się z 3 wariantów składowych (czarna koszulka, szara koszulka, biała koszulka). Dla każdego elementu sprawdzane jest: czy jest to wariant, który właśnie uległ zmianie? Jeśli tak, należy zastosowaćnewPrice(11,00) zamiast nieaktualnej ceny nadal przechowywanej w Shopify (10,00). Jeśli nie, należy zastosować istniejącą wartośćcomponent.productVariant.price. Następnie sumowane są ceny elementów, aby uzyskać nową cenę wariantu zestawu.Można zaobserwować działanie tego mechanizmu w danych wyjściowych. Proszę zwrócić uwagę na wariant...088840, którego składniki obejmują...158920(zmieniony wariant). Jego cena wynosi zatem 11 + 10 + 10 = 31, podczas gdy suma cen wszystkich pozostałych wariantów zestawów nadal wynosi 30, ponieważ żaden z ich składników nie uległ zmianie.Jest to kluczowa informacja dotycząca tego etapu: Shopify nie zaktualizował jeszcze ceny komponentu w danych pakietu, więc kod nie może po prostu zsumować istniejących cen, lecz musi na bieżąco zastąpić cenę zmienionego wariantu nową wartością. Bez tego wszystkie warianty nadal wyświetlałyby wartość 30. Wynikowa tablicavariantPricesjest następnie przekazywana do pętli For each, która wywołuje funkcjęproductVariantsBulkUpdatew celu faktycznego zapisania tych ponownie obliczonych cen z powrotem w produkcie pakietowym.
{
productVariant {
id
}
priceChange {
oldPrice { amount }
newPrice { amount }
}
getProductData1 {
id
variants {
id
productVariantComponents {
productVariant {
id
price
}
}
}
}
}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 };
}type VariantPrice {
productId: String!
id: String!
price: Float!
}
type Output {
variantPrices: [VariantPrice!]!
}- Proszę dodać pętlę For each (iterację), która będzie przechodzić przez wszystkie pozycje w tablicy
runCode1.variantPrices. Dla każdej ceny wariantu pętla ta wykonuje akcję wysłania żądania do interfejsu API administratora przy użyciu mutacji**productVariantsBulkUpdate**w celu aktualizacji ceny wariantu pakietu. Można wykorzystać te dane wejściowe dla mutacji:
{
"variants": [
{
"id": "{{variantPricesForeachitem.id}}",
"price": "{{variantPricesForeachitem.price}}"
}
],
"productId": "{{variantPricesForeachitem.productId}}",
"allowPartialUpdates": true
}Jak to wszystko ze sobą współdziała
Gdy zmienia się cena wariantu produktu składowego (np. aktualizują Państwo cenę wariantu „Szara koszulka S” z 10,00 € na 15,00 €):
- Uruchamia się wyzwalacz Zmiana ceny wariantu produktu
- W ramach tego przepływu pobierany jest pakiet nadrzędny produktu za pomocą
productParents - Krok „Uruchom kod” wyodrębnia identyfikator produktu w pakiecie
- Warunek ten sprawdza, czy dany produkt wchodzi w skład zestawu
- Jeśli tak, pobiera dane dotyczące produktu w pakiecie
- W drugim etapie „Uruchom kod” następuje ponowne obliczenie cen wariantów pakietów
- Pętla przechodzi przez każdy wariant i aktualizuje cenę pakietu za pomocą mutacji Admin API o nazwie productVariantsBulkUpdate
Cena wariantu pakietu S uległaby teraz zmianie z 30,00 € na 35,00 € (15,00 € + 10,00 € + 10,00 €).
