Denne guide giver dig konkrete eksempler på Jinja2 template mappers i GelatoConnect, så du nemt kan komme i gang med de mest almindelige dataforvandlinger. Uanset om du arbejder med at matche ordredata, tilpasse notifikationer eller lave opslag, får du her et stærkt udgangspunkt.
Eksempel på enkel ordreafgivelse
Dette eksempel viser, hvordan du kan sende en almindelig ordre:
Indtast data:
{ "order": { "id": "12345", "customer_email": "[email protected]", "items": [ { "id": "item-1", "product_code": "POSTER-A3", "quantity": 2, "file_url": "https://example.com/files/plakat.pdf" } ], "shipping": { "recipient": { "first_name": "John", "last_name": "Smith" }, "address": { "line1": "123 Main St", "line2": "Lejl. 4B", "city": "New York", "postal_code": "10001", "country": "US", "state": "NY" }, "phone": "212-555-1234" } }}
Skabelon-mapper:
{ "orderReferenceId": "####{{ order.id }}", "orderType": "ordre", "currency": "USD", "shippingAddress": { "firstName": "####{{ order.shipping.recipient.first_name }}", "lastName": "####{{ order.shipping.recipient.last_name }}", "addressLine1": "####{{ order.shipping.address.line1 }}", "addressLine2": "####{{ order.shipping.address.line2 }}", "city": "####{{ order.shipping.address.city }}", "postCode": "####{{ order.shipping.address.postal_code }}", "country": "####{{ order.shipping.address.country }}", "state": "####{{ order.shipping.address.state }}", "email": "####{{ order.customer_email }}", "phone": "####{{ order.shipping.phone }}" }, "items": [ {% for item in order.items %} { "itemReferenceId": "####{{ item.id }}", "productUid": "####{{ lookups({'product_code': item.product_code}, strict=False, default='') }}", "quantity": ####{{ item.quantity }}, "filer": [ { "type": "default", "url": "####{{ item.file_url }}" } ] }{% if not loop.last %},{% endif %} {% endfor %} ]}
Sådan arbejder du med flere produktfiler
Dette eksempel viser, hvordan du håndterer produkter med flere filer – forside og bagside:
Indtast data:
{ "orderReferenceId": "####{{ order.id }}", "orderType": "ordre", "currency": "USD", "shippingAddress": { "firstName": "####{{ order.shipping.recipient.first_name }}", "lastName": "####{{ order.shipping.recipient.last_name }}", "addressLine1": "####{{ order.shipping.address.line1 }}", "addressLine2": "####{{ order.shipping.address.line2 }}", "city": "####{{ order.shipping.address.city }}", "postCode": "####{{ order.shipping.address.postal_code }}", "country": "####{{ order.shipping.address.country }}", "state": "####{{ order.shipping.address.state }}", "email": "####{{ order.customer_email }}", "phone": "####{{ order.shipping.phone }}" }, "items": [ {% for item in order.items %} { "itemReferenceId": "####{{ item.id }}", "productUid": "####{{ lookups({'product_code': item.product_code}, strict=False, default='') }}", "quantity": ####{{ item.quantity }}, "filer": [ { "type": "default", "url": "####{{ item.file_url }}" } ] }{% if not loop.last %},{% endif %} {% endfor %} ]}
Skabelonoversigt:
{ "orderReferenceId": "####{{ orderNumber }}", "orderType": "ordre", "currency": "USD", "shippingAddress": { {% set nameParts = deliveryDetails.contactName.split(' ') %} "firstName": "####{{ nameParts[0] }}", "lastName": "####{{ nameParts[1:] | join(' ') }}", "addressLine1": "####{{ deliveryDetails.address.street }}", "city": "####{{ deliveryDetails.address.city }}", "state": "####{{ deliveryDetails.address.state }}", "postCode": "####{{ deliveryDetails.address.zip }}", "country": "####{{ deliveryDetails.address.country }}", "email": "####{{ deliveryDetails.email }}", "phone": "####{{ deliveryDetails.phone }}" }, "items": [ {% for product in products %} { "itemReferenceId": "####{{ product.productId }}", "productUid": "####{{ lookups({'VARENUMMER': product.sku}, strict=False, default='') }}", "quantity": ####{{ product.qty }}, "filer": [ { "type": "forside", "url": "####{{ product.files.front }}" }, { "type": "bagside", "url": "####{{ product.files.back }}" } ] }{% if not loop.last %},{% endif %} {% endfor %} ]}
Eksempel på betinget logik
Dette eksempel viser, hvordan du kan bruge betinget logik til at håndtere forskellige produkttyper:
Indtast data:
{ "orderId": "ORD-5555", "customer": { "name": "Alice Johnson", "email": "[email protected]", "phone": "555-123-4567" }, "shipping": { "address": "Pine St 789", "apartment": "lejlighed", "city": "Boston", "state": "MA", "zipCode": "02108", "country": "US" }, "items": [ { "id": "ITEM-A", "type": "plakat", "sku": "PLAKAT-LG", "quantity": 1, "image": "https://example.com/files/plakat.jpg" }, { "id": "ITEM-B", "type": "kort", "sku": "KORT-SM", "quantity": 100, "frontImage": "https://example.com/files/card-front.jpg", "backImage": "https://example.com/files/card-back.jpg" } ]}
Skabelonoversigt:
{ "orderReferenceId": "####{{ orderId }}", "orderType": "ordre", "currency": "USD", "shippingAddress": { {% set nameParts = customer.name.split(' ') %} "firstName": "####{{ nameParts[0] }}", "lastName": "####{{ nameParts[1:] | join(' ') }}", "addressLine1": "####{{ shipping.address }}", {% if shipping.apartment %} "addressLine2": "####{{ shipping.apartment }}", {% endif %} "city": "####{{ shipping.city }}", "state": "####{{ shipping.state }}", "postCode": "####{{ shipping.zipCode }}", "country": "####{{ shipping.country }}", "email": "####{{ customer.email }}", "phone": "####{{ customer.phone }}" }, "items": [ {% for item in items %} { "itemReferenceId": "####{{ item.id }}", "productUid": "####{{ lookups({'VARENUMMER': item.sku}, strict=False, default='') }}", "quantity": ####{{ item.quantity }}, "filer": [ {% if item.type == 'poster' %} { "type": "standard", "url": "####{{ item.image }}" } {% elif item.type == 'card' %} { "type": "forside", "url": "####{{ item.frontImage }}" }, { "type": "bagside", "url": "####{{ item.backImage }}" } {% endif %} ] }{% if not loop.last %},{% endif %} {% endfor %} ]}
Eksempel på opdatering af ordrestatus
Her kan du se, hvordan du kan sætte en postback-notifikation op, når ordrestatus ændrer sig:
Indtast data:
{ "orderId": "a6a1f9ce-2bdd-4a9e-9f8d-0009df0e24d9", "orderReferenceId": "J123X456", "customerReferenceId": "CUST-789", "fulfillmentStatus": "afsendt", "created": "2023-04-12T10:26:52+00:00", "items": [ { "itemReferenceId": "123", "fulfillmentStatus": "afsendt", "fulfillments": [ { "trackingCode": "TRK123456789", "trackingUrl": "https://example.com/tracking?code=TRK123456789", "carrierName": "FedEx", "carrierUid": "fed_ex_ground", "fulfillmentCountry": "US", "fulfillmentStateProvince": "NY" } ] } ]}
Skabelonoversigt:
{ "event": "ORDRE_SENDT", "timestamp": "####{{ created }}", "order": { "id": "####{{ orderReferenceId }}", "customer_id": "####{{ customerReferenceId }}", "status": "####{{ fulfillmentStatus | upper }}", "shipped_items": [ {% for item in items %} {% if item.fulfillmentStatus == 'shipped' %} { "item_id": "####{{ item.itemReferenceId }}", "tracking": { {% for fulfillment in item.fulfillments %} "carrier": "####{{ fulfillment.carrierName }}", "tracking_number": "####{{ fulfillment.trackingCode }}", "tracking_url": "####{{ fulfillment.trackingUrl }}", "shipped_from": { "country": "####{{ fulfillment.fulfillmentCountry }}", "state": "####{{ fulfillment.fulfillmentStateProvince }}" } {% endfor %} } }{% if not loop.last %},{% endif %} {% endif %} {% endfor %} ] }}
Eksempel på avancerede opslag
Her viser vi, hvordan du nemt kan matche produkter og vælge den rigtige transportør:
Indtast data:
{ "reference": "ORDER-8888", "modtager": { "fullName": "Robert Brown", "emailAddress": "[email protected]", "phoneNumber": "888-555-1212", "shippingInformation": { "streetAddress": "Egetræ Allé 321", "city": "Chicago", "state": "IL", "postalCode": "60601", "countryCode": "US" } }, "orderItems": [ { "lineItemId": "LI-001", "productReference": { "code": "BK-HCVR-A5", "type": "hardcover_book", "size": "A5" }, "quantity": 1, "assetUrls": { "coverFile": "https://example.com/files/book-cover.pdf", "interiorFile": "https://example.com/files/book-interior.pdf" }, "additionalAttributes": { "pageCount": 120, "paperType": "premium" } } ], "shippingPreference": "standard", "region": "nordamerika"}
Template Mapper:
{% set shipping_lookup = { "express_north_america": "fed_ex_2_day", "express_europe": "dhl_express_eu", "standard_north_america": "ups_ground", "standard_europe": "dhl_parcel_eu"} %}{% set product_lookup = {} %}{% set product_lookup = product_lookup.update({ "BK-HCVR-A5-premium": "book_product_pf_a5_pt_premium_cl_4-4_hcvr", "BK-HCVR-A5-standard": "book_product_pf_a5_pt_standard_cl_4-4_hcvr", "BK-SCVR-A5-premium": "book_product_pf_a5_pt_premium_cl_4-4_scvr", "BK-SCVR-A5-standard": "bogprodukt_pf_a5_pt_standard_cl_4-4_scvr"}) %}{ "orderReferenceId": "####{{ reference }}", "orderType": "ordre", "currency": "USD", {% set shipping_key = shippingPreference + '_' + region %} "shipmentMethodUid": "####{{ shipping_lookup.get(shipping_key, 'normal') }}", "shippingAddress": { {% set name_parts = recipient.fullName.split(' ') %} "firstName": "####{{ name_parts[0] }}", "lastName": "####{{ name_parts[1:] | join(' ') }}", "addressLine1": "####{{ recipient.shippingInformation.streetAddress }}", "city": "####{{ recipient.shippingInformation.city }}", "state": "####{{ recipient.shippingInformation.state }}", "postCode": "####{{ recipient.shippingInformation.postalCode }}", "country": "####{{ recipient.shippingInformation.countryCode }}", "email": "####{{ recipient.emailAddress }}", "phone": "####{{ recipient.phoneNumber }}" }, "items": [ {% for item in orderItems %} { "itemReferenceId": "####{{ item.lineItemId }}", {% set product_key = item.productReference.code + '-' + item.additionalAttributes.paperType %} "productUid": "####{{ product_lookup.get(product_key, lookups({'code': item.productReference.code, 'paper': item.additionalAttributes.paperType}, strict=False, default='')) }}", "quantity": ####{{ item.quantity }}, "pageCount": ####{{ item.additionalAttributes.pageCount }}, "filer": [ { "type": "cover", "url": "####{{ item.assetUrls.coverFile }}" }, { "type": "inde", "url": "####{{ item.assetUrls.interiorFile }}" } ] }{% if not loop.last %},{% endif %} {% endfor %} ]}
Sådan arbejder du med datoer og formatering
Dette eksempel viser, hvordan du kan formatere datoer og arbejde med tekst:
Indtast data:
{ "orderNum": "INV-20230412-001", "datePlaced": "12/04/2023 14:30", "clientDetails": { "id": "CLIENT001", "contactInfo": { "name": "SARAH WILLIAMS", "email": "[email protected]", "telephone": "1.212.555.7890" }, "deliveryAddress": { "line1": "555 Broadway", "line2": "10. sal", "city": "New York", "region": "New York", "code": "10012", "country": "USA" } }, "lineItems": [ { "refCode": "LI-001-A", "productIdentifier": "BROCHURE-A4-GLOSSY", "amount": 250, "kunstværk": "https://example.com/files/brochure.pdf" } ]}
Skabelon-mapper:
{% set country_codes = { "United States": "USA", "United Kingdom": "GB", "Canada": "CA", "Australien": "AU", "Tyskland": "DE", "Frankrig": "FR"} %}{% set date_parts = datePlaced.split('T')[0].split('-') %}{% set formatted_date = date_parts[2] + '/' + date_parts[1] + '/' + date_parts[0] %}{ "orderReferenceId": "####{{ orderNum }}", "orderType": "ordre", "currency": "USD", "metadata": [ { "key": "clientId", "value": "####{{ clientDetails.id }}" }, { "key": "orderDate", "value": "####{{ formatted_date }}" } ], "shippingAddress": { {% set name_parts = clientDetails.contactInfo.name | lower | title | split(' ') %} "firstName": "####{{ name_parts[0] }}", "lastName": "####{{ name_parts[1:] | join(' ') }}", "addressLine1": "####{{ clientDetails.deliveryAddress.line1 }}", "addressLine2": "####{{ clientDetails.deliveryAddress.line2 }}", "city": "####{{ clientDetails.deliveryAddress.city }}", "state": "####{{ clientDetails.deliveryAddress.region }}", "postCode": "####{{ clientDetails.deliveryAddress.code }}", "country": "####{{ country_codes.get(clientDetails.deliveryAddress.country, 'US') }}", "email": "####{{ clientDetails.contactInfo.email }}", "phone": "####{{ clientDetails.contactInfo.telephone | replace('.', '-') }}" }, "items": [ {% for item in lineItems %} { "itemReferenceId": "####{{ item.refCode }}", "productUid": "####{{ lookups({'product_id': item.productIdentifier}, strict=False, default='') }}", "quantity": ####{{ item.amount }}, "filer": [ { "type": "default", "url": "####{{ item.kunstværk }}" } ] }{% if not loop.last %},{% endif %} {% endfor %} ]}
Fejlhåndtering og standardværdier
Dette eksempel viser, hvordan du kan håndtere fejl på en smart måde ved at bruge standardværdier:
Indtast data:
{ "id": "ORD-91011", "buyer": { "name": "Michael Johnson" // Manglende e-mailfelt }, "shipping": { "name": "Michael Johnson", "address": "111 River Rd", // Mangler by "province": "Ontario", "postal": "M5V 2H1", "country": "CA" }, "items": [ { "id": "ITEM-001", "sku": "KALENDER-VÆG", "quantity": 1, "assets": { "main": "https://example.com/files/calendar.pdf" } }, { // Ufuldstændig vare "id": "ITEM-002" } ]}
Skabelonoversigt:
{ "orderReferenceId": "####{{ id }}", "orderType": "ordre", "currency": "CAD", "shippingAddress": { {% set recipient = shipping.name | default('') %} {% set name_parts = recipient.split(' ') if recipient else ['', ''] %} "firstName": "####{{ name_parts[0] | default('Ukendt') }}", "lastName": "####{{ name_parts[1:] | join(' ') | default('Kunde') }}", "addressLine1": "####{{ shipping.address | default('Adresse mangler') }}", "city": "####{{ shipping.city | default('Toronto') }}", "state": "####{{ shipping.province | default('ON') }}", "postCode": "####{{ shipping.postal | default('') }}", "country": "####{{ shipping.country | default('CA') }}", "email": "####{{ buyer.email | default('[email protected]') }}", "phone": "####{{ buyer.phone | default('000-000-0000') }}" }, "items": [ {% for item in items %} {% if item.id og item.sku og item.quantity %} { "itemReferenceId": "####{{ item.id }}", "productUid": "####{{ lookups({'VARENUMMER': item.sku}, strict=False, default='') }}", "quantity": ####{{ item.quantity }}, "filer": [ { "type": "standard", "url": "####{{ item.assets.main | default('') }}" } ] }{% if not loop.last %},{% endif %} {% endif %} {% endfor %} ]}
Når flere kilder smelter sammen
Dette eksempel samler data fra flere forskellige kilder:
Indtast data:
{ "order": { "id": "PO-12345", "type": "standard" }, "customer": { "id": "CUST-789", "segment": "forretning" }, "modtager": { "first": "David", "last": "Miller", "email": "[email protected]", "phone": "303-555-1212", "delivery": { "address": "987 State St", "suite": "Suite 500", "city": "Denver", "state": "CO", "zip": "80202", "country": "US" } }, "produkter": [ { "id": "PROD-A1", "code": "FLYER-A4-FULL", "count": 500, "kunstværk": "https://example.com/files/flyer.pdf" } ], "shipping": { "method": "ground", "expectedDays": 3 }, "promotional": { "campaign": "SPRING2023", "source": "email" }}
Skabelon-mapper:
{% set shipping_method_map = { "overnight": "fed_ex_priority_overnight", "express": "fed_ex_2_day", "ground": "fed_ex_ground"} %}{ "orderReferenceId": "####{{ order.id }}", "orderType": "####{{ 'kladde' if order.type == 'preorder' else 'ordre' }}", "currency": "USD", "customerReferenceId": "####{{ customer.id }}", "shipmentMethodUid": "####{{ shipping_method_map.get(shipping.method, 'normal') }}", "metadata": [ { "key": "kampagne", "value": "####{{ promotional.campaign }}" }, { "key": "kilde", "value": "####{{ promotional.source }}" }, { "key": "segment", "value": "####{{ customer.segment }}" }, { "key": "forventetLevering", "value": "####{{ shipping.expectedDays }}" } ], "shippingAddress": { "firstName": "####{{ recipient.first }}", "lastName": "####{{ recipient.last }}", "addressLine1": "####{{ recipient.delivery.address }}", "addressLine2": "####{{ recipient.delivery.suite }}", "city": "####{{ recipient.delivery.city }}", "state": "####{{ recipient.delivery.state }}", "postCode": "####{{ recipient.delivery.zip }}", "country": "####{{ recipient.delivery.country }}", "email": "####{{ recipient.email }}", "phone": "####{{ recipient.phone }}" }, "items": [ {% for product in products %} { "itemReferenceId": "####{{ product.id }}", "productUid": "####{{ lookups({'product_code': product.code}, strict=False, default='') }}", "quantity": ####{{ product.count }}, "filer": [ { "type": "standard", "url": "####{{ product.kunstværk }}" } ] }{% if not loop.last %},{% endif %} {% endfor %} ]}
Sådan arbejder du med komplekse, indlejrede strukturer
Her kan du se, hvordan du arbejder med data, der ligger i flere lag:
Indtast data:
{ "data": { "transaction": { "identifiers": { "internalRef": "TX-44556", "customerRef": "CUST-ABC123" }, "metadata": { "createdAt": "12/04/2023 09:15", "source": "web", "tags": ["priority", "corporate"] } }, "parter": { "sender": { "organization": "Acme Corp", "contact": { "person": { "givenName": "Thomas", "familyName": "Anderson" }, "details": { "email": { "address": "[email protected]" }, "phone": { "number": "415-555-9876", "extension": "123" } } } }, "recipient": { "person": { "givenName": "Sarah", "familyName": "Connor" }, "contactDetails": { "emailAddress": "[email protected]", "phoneNumber": "213-555-4321" }, "location": { "address": { "street": "1984 Tech Blvd", "unit": "#42", "locality": "Los Angeles", "region": "Californien", "postalCode": "90210", "country": "USA" } } } }, "contents": { "items": [ { "descriptor": { "id": "ITM-X789", "type": "Brochure", "specifikationer": { "format": "A4", "paperType": "Glossy", "colorProfile": "CMYK" } }, "quantity": { "value": 1000, "unit": "stk." }, "digitalAssets": { "printable": { "fileLocation": "https://example.com/files/brochure-complex.pdf" } } } ] } }}
Template Mapper:
{% set country_map = { "USA": "USA", "United States": "USA", "United States of America": "USA", "UK": "GB", "United Kingdom": "GB", "England": "GB"} %}{ "orderReferenceId": "####{{ data.transaction.identifiers.internalRef }}", "orderType": "ordre", "currency": "USD", "customerReferenceId": "####{{ data.transaction.identifiers.customerRef }}", "metadata": [ { "key": "createdAt", "value": "####{{ data.transaction.metadata.createdAt }}" }, { "key": "kilde", "value": "####{{ data.transaction.metadata.source }}" }, {% for tag in data.transaction.metadata.tags %} { "key": "tag_####{{ loop.index }}", "value": "####{{ tag }}" }{% if not loop.last %},{% endif %} {% endfor %} ], "shippingAddress": { "firstName": "####{{ data.parties.recipient.person.givenName }}", "lastName": "####{{ data.parties.recipient.person.familyName }}", "addressLine1": "####{{ data.parties.recipient.location.address.street }}", "addressLine2": "####{{ data.parties.recipient.location.address.unit }}", "city": "####{{ data.parties.recipient.location.address.locality }}", "state": "####{{ data.parties.recipient.location.address.region }}", "postCode": "####{{ data.parties.recipient.location.address.postalCode }}", "country": "####{{ country_map.get(data.parties.recipient.location.address.country, data.parties.recipient.location.address.country) }}", "email": "####{{ data.parties.recipient.contactDetails.emailAddress }}", "phone": "####{{ data.parties.recipient.contactDetails.phoneNumber }}" }, "items": [ {% for item in data.contents.items %} { "itemReferenceId": "####{{ item.descriptor.id }}", "productUid": "####{{ lookups({ 'type': item.descriptor.type, 'format': item.descriptor.specifications.format, 'paper': item.descriptor.specifications.paperType }, strict=False, default='') }}", "quantity": ####{{ item.quantity.value }}, "filer": [ { "type": "default", "url": "####{{ item.digitalAssets.printable.fileLocation }}" } ] }{% if not loop.last %},{% endif %} {% endfor %} ]}
Gode råd til dig, der vil mestre Template Mappers
Når du arbejder med Jinja2 Template Mappers i GelatoConnect, så husk disse gode råd:
Brug fejlfindingsteknikker:
Tilføj midlertidige felter for at vise de værdier, du arbejder med undervejs
Brug {% raw %}####{{ variable | tojson }}{% endraw %}-filteret til at fejlsøge komplekse objekter
Kombinér sætninger med betingelser:
jinja{% set shipping_type = 'express' if order.priority == 'high' else 'standard' %}
Håndter manglende eller indlejrede data:
jinja####{{ data.get('nested', {}).get('deeply', {}).get('property', 'default_value') }}
Lav kort-opslagsværker til de mest almindelige sammenhænge:
{% set status_map = {'NEW': 'modtaget', 'SHIPPED': 'sendt', 'DELIVERED': 'leveret'} %}"status": "####{{ status_map.get(input_status, 'ukendt') }}"
Saml genbrugbar logik i makroer:
{% macro format_phone(phone) %}####{{ phone | replace(' ', '') | replace('.', '-') }}{% endmacro %}
Brug filtre til at forvandle dine data:
Beskæring
: Fjern mellemrumreplace
: Erstat tekstupper
/lower
/title
: Skift store/små bogstaverdefault
: Giv standardværdier som backuptojson
: Formater som JSON-streng
Tænk over ydeevnen ved store datamængder:
Beregn værdier på forhånd, før du går i gang med løkker
Brug set-sætninger uden for loops
Hold skabelonerne skarpe og målrettede
Sådan kommer du videre
Nu hvor du har set de her praktiske eksempler, kan du:
Tilpas de her skabeloner, så de passer til dine integrationsbehov
Skab endnu vildere forvandlinger ved at blande forskellige teknikker
Test dine skabeloner grundigt med rigtige data
Opsæt postback-triggere med de her skabeloner
Brug opslag for at matche værdier hurtigt og effektivt