Variabler i Shopify Flow
Variabler er pladsholdere der erstattes af værdier, når et workflow kører. Disse variabler beskriver attributterne for kunderne, ordrerne og produkterne, der var involveret i dit workflow. Der er f.eks. variabler for ordrenummer, pris for ordren, kundens navn osv.
Flow bruger en anden version af Liquid end Shopify-temaer, og du kan tilgå alle de variabler, der er tilgængelige via GraphQL Admin API'en.
Navnene på de fleste variabler forklarer sig selv. Variablen, der viser produktets navn, er, for eksempel {{ product.title }}
. Når beskeden er sendt, erstattes denne variabel af navnet på det bestilte produkt: Large Coffee Mug
.
Sådan føjer du variabler til handlinger
Du kan føje variabler til alle tekstfelter, der indeholder linket Tilføj variabel. Klik på linket Tilføj variabel under det relevante felt, og vælg derefter en variabel på listen.
Variablerne på listen Tilføj variabeler filtrerede, så du kun ser de variabler, der er relevante for den valgte udløser. Når du har valgt en variabel på listen formateres den korrekt og føjes til tekstfeltet for dig.
Flow understøtter næsten alle GraphQL Admin API-felter.
Liquid-variabler
Hvis du er udvikler med erfaring i at skrive Liquid-kode, kan du bruge Liquid til at skrive dine variabler eller til at redigere de variabler, som du indsætter, ved hjælp af linket Tilføj variabel. Få mere at vide under referencen for GraphQL Admin API'en.
Betingede tags og gentagne tags
Du kan føje variable Liquid-tags til dine beskeder om workflow manuelt. Du kan bruge disse tags til at inkludere flere oplysninger i dine beskeder.
Du kan f.eks. bruge et for loop
-objekt til at gentagelser via en liste med objekter, såsom varelinjer for en ordre. Du kan bruge disse tags til at oprette beskeder med oplysninger, såsom produkttitel, SKU, pris og mængde for hver varelinje i en ordre og spare dine modtager fra at bruge tid på at slå disse oplysninger op i din Shopify-administrator.
Flow understøtter følgende betingede tags (eller kontrolflow-tags) i Liquid:
- if
- medmindre
- elsif/else
- case/when
- and/or (flere betingelser)
Flow understøtter også følgende gentagne tags i Liquid:
Filtre
Flow understøtter følgende filtre i Liquid:
Filternavn | Filtertype |
---|---|
abs | Math |
append | Streng |
at_least | Math |
at_most | Math |
capitalize | Streng |
ceil | Math |
concat | Array |
dato | Yderligere |
standard | Yderligere |
divided_by | Math |
downcase | Streng |
escape | Streng |
først | Array |
floor | Math |
join | Array |
last | Array |
lstrip | Streng |
kort | Array |
minus | Math |
modulo | Math |
newline_to_br | Streng |
plus | Math |
prepend | Streng |
fjern | Streng |
remove_first | Streng |
erstat | Streng |
replace_first | Streng | reverse | Array |
round | Math |
rstrip | Streng |
størrelse | Array |
slice | Streng |
sortér | Array |
split | Streng |
strip | Streng |
strip_html | Streng |
strip_newlines | Streng |
gange | Math |
truncate | Streng |
trunkatewords | Streng |
uniq | Array |
upcase | Streng |
url_encode | Streng |
hvor | Array |
Eksempler på variabler
Hvis du f.eks. vil oprette et workflow, der sender en mail til en medarbejder, når en kunde bruger mere end 500 USD på en ordre. Du opretter et workflow ved hjælp af udløseren Ordren blev oprettet, angiver en betingelse, der er sand, hvis ordretotalen er over 500 USD, og bruger handlingen Send intern mail. Du bruger følgende variabler under handlingen Send intern mail i afsnittet Besked.
Input | Output |
---|---|
Send en personlig takkebesked til {{ order.customer.firstName }} {{ order.customer.lastName }}({{ order.customer.email }}) for at afgive en ordre på {{ order.totalPriceSet.shopMoney.amount }} USD. | Send en personlig takkebesked til Jeanne Dupont (jeanne@example.com) for at afgive en ordre på 763,42 USD. |
Du beslutter, at du skal informere medarbejderne, når et produktlager er lavt, og der skal afgives en ordre på ekstra lagerbeholdning. Du opretter et workflow, der starter med udløseren Lagerantallet er ændret, og angiver en betingelse, der er sand, hvis det forudgående lagerantal er mindre end eller lig med 10. Du bruger følgende variabler under handlingen Send intern mail i afsnittet Besked.
Input | Output |
---|---|
Genbestil {{ product.title }}. Send mail til ejer@butik.com for at kontrollere, om de har modtaget købsordren. | Genbestil Leggings med høj talje – Sorte. Send mail til ejer@example.com for at kontrollere, om de har modtaget købsordren. |
Du vil annullere ordrer, der har et højt risikoniveau, men foretrækker, at dine medarbejdere annullerer ordren manuelt. Du opretter et workflow, der starter med udløseren Ordren blev oprettet, og angiver en betingelse, der er sand, hvis risikoniveauet for ordren er lig med højt. Du bruger følgende variabler under handlingen Send intern mail i afsnittet Besked.
Input | Output |
---|---|
Vores Shopify-butik har modtaget en ordre med en høj risiko for svindel. Vi vil gerne annullere denne ordre med det samme, inden den sendes til produktion: {{ order.name }} {{ order.billingAddress.lastName }}, {{ order.billingAddress.firstName }} {{ order.email }} Bekræft den nye ordrestatus. Tak! |
Vores Shopify-butik har modtaget en ordre med en høj risiko for svindel. Vi vil gerne annullere denne ordre med det samme, inden den sendes til produktion: #1001 Dupont, Jeanne jeanne@example.com Bekræft den nye ordrestatus. Tak! |
Til Loop-eksempler
Når en ordre er modtaget, kan det være nyttigt at sende en besked, der indeholder de bestilte produkter. Du kan gøre dette ved at bruge for loop
, som gentagne gange udfører en kodeblok. Tekstfelter, der understøtter variabler, understøtter også for loops og forloop-objektet.
Du vil f.eks. oprette et workflow, der returnerer en liste over alle SKU'er og antal i en ordre. Du bruger følgende variabler under handlingen Send intern mail i afsnittet Besked.
Input | Output |
---|---|
Ordreoversigt: {% for a in order.lineItems %} SKU: {{a.sku}} ( {{a.quantity}} ), {% endfor %} |
Ordreoversigt: 8987097979 (50) 8877778887 (3) 888998898B (1) |
Du beslutter dig for at tilføje flere oplysninger i mailen, herunder produktnavnet, SKU'er, pris pr. vare og kundens leveringsoplysninger. Du bruger følgende variabler under handlingen Send intern mail i afsnittet Besked.
Input | Output |
---|---|
Ordreoversigt: {% for a in order.lineItems %} Produkt: {{a.title}} SKU: {{a.sku}} Pris (pr. enhed): USD {{a.originalUnitPriceSet.shopMoney.amount}} Antal: {{a.quantity}} {% endfor %} |
Ordreoversigt: Produkt: Leggings med høj talje – Sorte SKU: 8987097979 Pris (pr enhed): 8,49 USD Antal: 5 Produkt: Sportsstrømper – Blå SKU: 888998898B Pris (pr. enhed): 5,61 USD Antal: 2 |
Du skal spore solgte varer, der leveres af en bestemt forhandler. Du bruger følgende variabler og inkluderer en if
-erklæring i dit for loop
under handlingen Send intern mail i afsnittet Besked.
Input | Output |
---|---|
Solgt Acme-produkt: {% for x in order.lineItems %} {% if x.vendor == 'acme-vendor' %} Produktnavn: {{x.title}} SKU: {{x.sku}} {% endif %} {% endfor %} |
Solgt Acme-produkt: Produktnavn: Leggings med høj talje – Sorte SKU: 8987097979 |
Komplekse dataobjekter i Shopify Flow
Shopify Flow understøtter ikke udlæsning af matrixer og objekter af følgende årsager:
- Udlæsning af data, der ikke er påkrævet, frarådes for GraphQL API'en, da det kan skabe store forespørgselsstørrelser, som kan få dit workflow til at mislykkes.
- Der tilføjes nye API-felter, når der introduceres nye funktioner. Dette kan ødelægge dit workflow.
Workflowet mislykkes, hvis der sendes for mange data automatisk. I stedet for at kalde matrixer og objekter direkte, bør du loope over matrixer og kun medtage de ønskede felter.
Eksempel: Brug følgende formater til at kalde specifikke felter i stedet for at kalde {{ order.lineItems }}
direkte. Disse eksempler inkluderer alle de felter, der ville være inkluderet ved direkte kald til matrixen eller objektet. Kopiér og indsæt de felter, du har brug for.
{% for li in order.lineItems %}
{% comment %}li.contract - omitted{% endcomment %}
{% for ca in li.customAttributes %}
{{ ca.key }}
{{ ca.value }}
{% endfor %}
{% for da in li.discountAllocations %}
{{ da.allocatedAmountSet.presentmentMoney.amount }}
{{ da.allocatedAmountSet.presentmentMoney.currencyCode }}
{{ da.allocatedAmountSet.shopMoney.amount }}
{{ da.allocatedAmountSet.shopMoney.currencyCode }}
{% endfor %}
{{ li.discountedTotalSet.presentmentMoney.amount }}
{{ li.discountedTotalSet.presentmentMoney.currencyCode }}
{{ li.discountedTotalSet.shopMoney.amount }}
{{ li.discountedTotalSet.shopMoney.currencyCode }}
{{ li.discountedUnitPriceSet.presentmentMoney.amount }}
{{ li.discountedUnitPriceSet.presentmentMoney.currencyCode }}
{{ li.discountedUnitPriceSet.shopMoney.amount }}
{{ li.discountedUnitPriceSet.shopMoney.currencyCode }}
{% comment %}li.duties - omitted {% endcomment %}
{{ li.fulfillableQuantity }}
{{ li.fulfillmentService.callbackUrl }}
{{ li.fulfillmentService.fulfillmentOrdersOptIn }}
{{ li.fulfillmentService.handle }}
{{ li.fulfillmentService.id }}
{{ li.fulfillmentService.inventoryManagement }}
{% comment %}rest of location omitted{% endcomment %}
{{ li.fulfillmentService.location.name }}
{{ li.fulfillmentService.productBased }}
{{ li.fulfillmentService.serviceName }}
{% for sm in li.fulfillmentService.shippingMethods %}
{{ sm.code }}
{{ sm.label }}
{% endfor %}
{{ li.fulfillmentService.type }}
{{ li.fulfillmentStatus }}
{{ li.id }}
{{ li.image.altText }}
{{ li.image.height }}
{{ li.image.id }}
{% comment %}li.image.metafield omitted{% endcomment %}
{% comment %}li.image.privateMetafield omitted{% endcomment %}
{{ li.image.width }}
{{ li.merchantEditable }}
{{ li.name }}
{{ li.nonFulfillableQuantity }}
{{ li.originalTotalSet.presentmentMoney.amount }}
{{ li.originalTotalSet.presentmentMoney.currencyCode }}
{{ li.originalTotalSet.shopMoney.amount }}
{{ li.originalTotalSet.shopMoney.currencyCode }}
{{ li.originalUnitPriceSet.presentmentMoney.amount }}
{{ li.originalUnitPriceSet.presentmentMoney.currencyCode }}
{{ li.originalUnitPriceSet.shopMoney.amount }}
{{ li.originalUnitPriceSet.shopMoney.currencyCode }}
{% comment %}rest of product omitted{% endcomment %}
{{ li.product.title }}
{{ li.quantity }}
{{ li.refundableQuantity }}
{{ li.requiresShipping }}
{{ li.restockable }}
{{ li.sellingPlan.name }}
{{ li.sku }}
{% for tl in li.taxLines %}
{{ tl.priceSet.presentmentMoney.amount | json }}
{{ tl.priceSet.presentmentMoney.currencyCode | json }}
{{ tl.priceSet.shopMoney.amount | json }}
{{ tl.priceSet.shopMoney.currencyCode | json }}
{{ tl.rate | json }}
{{ tl.ratePercentage | json }}
{{ tl.title | json }}
{% endfor %}
{{ li.taxable }}
{{ li.title }}
{{ li.totalDiscountSet.presentmentMoney.amount }}
{{ li.totalDiscountSet.presentmentMoney.currencyCode }}
{{ li.totalDiscountSet.shopMoney.amount }}
{{ li.totalDiscountSet.shopMoney.currencyCode }}
{{ li.unfulfilledDiscountedTotalSet.presentmentMoney.amount }}
{{ li.unfulfilledDiscountedTotalSet.presentmentMoney.currencyCode }}
{{ li.unfulfilledDiscountedTotalSet.shopMoney.amount }}
{{ li.unfulfilledDiscountedTotalSet.shopMoney.currencyCode }}
{{ li.unfulfilledOriginalTotalSet.presentmentMoney.amount }}
{{ li.unfulfilledOriginalTotalSet.presentmentMoney.currencyCode }}
{{ li.unfulfilledOriginalTotalSet.shopMoney.amount }}
{{ li.unfulfilledOriginalTotalSet.shopMoney.currencyCode }}
{{ li.unfulfilledQuantity }}
{% comment %}rest of variant omitted{% endcomment %}
{{ li.variant.title }}
{{ li.variantTitle }}
{{ li.vendor }}
{% endfor %}
{
"lineItems": [
{% for li in order.lineItems %}
{% if forloop.first != true %},{% endif %}
{
"contract": {
{% comment %}rest of contract omitted{% endcomment %}
"id": {{ li.contract.id | json }}
},
"customAttributes": [
{% for ca in li.customAttributes %}
{% if forloop.first != true %},{% endif %}
{
"key":{{ ca.key | json }},
"value":{{ ca.value | json }}
}
{% endfor %}
],
"discountAllocations": [
{% for da in li.discountAllocations %}
{% if forloop.first != true %},{% endif %}
"allocatedAmountSet": {
"presentmentMoney" : {
"amount": {{ da.allocatedAmountSet.presentmentMoney.amount | json }},
"currencyCode": {{ da.allocatedAmountSet.presentmentMoney.currencyCode | json }}
},
"shopMoney": {
"amount": {{ da.allocatedAmountSet.shopMoney.amount | json }},
"currencyCode": {{ da.allocatedAmountSet.shopMoney.currencyCode | json }}
}
}
{% endfor %}
],
"discountedTotalSet": {
"presentmentMoney" : {
"amount": {{ li.discountedTotalSet.presentmentMoney.amount | json }},
"currencyCode": {{ li.discountedTotalSet.presentmentMoney.currencyCode | json }}
},
"shopMoney": {
"amount": {{ li.discountedTotalSet.shopMoney.amount | json }},
"currencyCode": {{ li.discountedTotalSet.shopMoney.currencyCode | json }}
}
},
"discountedUnitPriceSet": {
"presentmentMoney" : {
"amount": {{ li.discountedUnitPriceSet.presentmentMoney.amount | json }},
"currencyCode": {{ li.discountedUnitPriceSet.presentmentMoney.currencyCode | json }}
},
"shopMoney": {
"amount": {{ li.discountedUnitPriceSet.shopMoney.amount | json }},
"currencyCode": {{ li.discountedUnitPriceSet.shopMoney.currencyCode | json }}
}
},
"duties": [
{% for duty li.duties %}
{% if forloop.first != true %},{% endif %}
{
{% comment %}rest of duties omitted{% endcomment %}
"id": {{ duty.id | json }}
}
{% endfor %}
],
"fulfillableQuantity": {{ li.fulfillableQuantity | json }},
"fulfillmentService": {
"callbackUrl":{{ li.fulfillmentService.callbackUrl | json }},
"fulfillmentOrdersOptIn": {{ li.fulfillmentService.fulfillmentOrdersOptIn | json }},
"handle": {{ li.fulfillmentService.handle | json }},
"id": {{ li.fulfillmentService.id | json }},
"inventoryManagement": {{ li.fulfillmentService.inventoryManagement | json }},
{% comment %}fulfillmentService.inventoryManagement - omitted {% endcomment %}
"productBased": {{ li.fulfillmentService.productBased | json }},
"serviceName": {{ li.fulfillmentService.serviceName | json }},
"shippingMethods": [
{% for sm in li.fulfillmentService.shippingMethods %}
{% if forloop.first != true %},{% endif %}
{
"code": {{ sm.code | json }},
"label": {{ sm.label | json }}
}
{% endfor %}
],
"type": {{ li.fulfillmentService.type | json }}
},
"fulfillmentStatus": {{ li.fulfillmentStatus | json }},
"id": {{ li.id | json }},
"image": {
"altText": {{ li.image.altText | json }},
"height": {{ li.image.height | json }},
"id": {{ li.image.id | json }},
{% comment %}li.image.metafield omitted{% endcomment %}
{% comment %}li.image.privateMetafield omitted{% endcomment %}
"width":{{ li.image.width | json }}
},
"merchantEditable": {{ li.merchantEditable | json }},
"name": {{ li.name | json }},
"nonFulfillableQuantity": {{ li.nonFulfillableQuantity | json }},
"originalTotalSet": {
"presentmentMoney" : {
"amount": {{ li.originalTotalSet.presentmentMoney.amount | json }},
"currencyCode": {{ li.originalTotalSet.presentmentMoney.currencyCode | json }}
},
"shopMoney": {
"amount": {{ li.originalTotalSet.shopMoney.amount | json }},
"currencyCode": {{ li.originalTotalSet.shopMoney.currencyCode | json }}
}
},
"originalUnitPriceSet": {
"presentmentMoney" : {
"amount": {{ li.originalUnitPriceSet.presentmentMoney.amount | json }},
"currencyCode": {{ li.originalUnitPriceSet.presentmentMoney.currencyCode | json }}
},
"shopMoney": {
"amount": {{ li.originalUnitPriceSet.shopMoney.amount | json }},
"currencyCode": {{ li.originalUnitPriceSet.shopMoney.currencyCode | json }}
}
},
"product": {
{% comment %}rest of Product omitted{% endcomment %}
"title": {{ li.product.title | json }}
},
"quantity": {{ li.quantity | json }},
"refundableQuantity": {{ li.refundableQuantity | json }},
"requiresShipping": {{ li.requiresShipping | json }},
"restockable": {{ li.restockable | json }},
"sellingPlan": {
"name": {{ li.sellingPlan.name | json }}
},
"sku": {{ li.sku | json }},
"taxLines": [
{% for tl in li.taxLines %}
{% if forloop.first != true %},{% endif %}
{
"priceSet": {
"presentmentMoney" : {
"amount": {{ tl.priceSet.presentmentMoney.amount | json }},
"currencyCode": {{ tl.priceSet.presentmentMoney.currencyCode | json }}
},
"shopMoney": {
"amount": {{ tl.priceSet.shopMoney.amount | json }},
"currencyCode": {{ tl.priceSet.shopMoney.currencyCode | json }}
}
},
"rate": {{ tl.rate | json }},
"ratePercentage": {{ tl.ratePercentage | json }},
"title": {{ tl.title | json }}
}
{% endfor %}
],
"taxable":{{ li.taxable | json }},
"title":{{ li.title | json }},
"totalDiscountSet": {
"presentmentMoney" : {
"amount": {{ li.totalDiscountSet.presentmentMoney.amount | json }},
"currencyCode": {{ li.totalDiscountSet.presentmentMoney.currencyCode | json }}
},
"shopMoney": {
"amount": {{ li.totalDiscountSet.shopMoney.amount | json }},
"currencyCode": {{ li.totalDiscountSet.shopMoney.currencyCode | json }}
}
},
"unfulfilledDiscountedTotalSet": {
"presentmentMoney" : {
"amount": {{ li.unfulfilledDiscountedTotalSet.presentmentMoney.amount | json }},
"currencyCode": {{ li.unfulfilledDiscountedTotalSet.presentmentMoney.currencyCode | json }}
},
"shopMoney": {
"amount": {{ li.unfulfilledDiscountedTotalSet.shopMoney.amount | json }},
"currencyCode": {{ li.unfulfilledDiscountedTotalSet.shopMoney.currencyCode | json }}
}
},
"unfulfilledOriginalTotalSet": {
"presentmentMoney" : {
"amount": {{ li.unfulfilledOriginalTotalSet.presentmentMoney.amount | json }},
"currencyCode": {{ li.unfulfilledOriginalTotalSet.presentmentMoney.currencyCode | json }}
},
"shopMoney": {
"amount": {{ li.unfulfilledOriginalTotalSet.shopMoney.amount | json }},
"currencyCode": {{ li.unfulfilledOriginalTotalSet.shopMoney.currencyCode | json }}
}
},
"unfulfilledQuantity": {{ li.unfulfilledQuantity | json }},
"variant": {
{% comment %}rest of variant omitted {% endcomment %}
"title": {{ li.variant.title | json }}
},
"variantTitle": {{ li.variantTitle | json }},
"vendor": {{ li.vendor | json }}
}
{% endfor %}
]
}