Denne guiden gir deg praktiske eksempler på Jinja2-mal-mappere i GelatoConnect, slik at du enkelt kan løse vanlige utfordringer med datatransformasjon. Enten du skal mappe ordredata, tilpasse varsler eller sette opp oppslag, finner du gode utgangspunkter her.
Eksempel på enkel bestilling
Dette eksempelet viser hvordan du kan sende inn en vanlig bestilling:
Inndata:
{ "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": "Hovedgata 123", "line2": "Leilighet 4B", "city": "New York", "postal_code": "10001", "country": "US", "state": "NY" }, "phone": "212-555-1234" } }}
Malvelger:
{ "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": "standard", "url": "####{{ item.file_url }}" } ] }{% if not loop.last %},{% endif %} {% endfor %} ]}
Jobbe med flere produktfiler
Dette eksempelet viser hvordan du håndterer produkter med flere filer, forside og bakside:
Inndata:
{ "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": "standard", "url": "####{{ item.file_url }}" } ] }{% if not loop.last %},{% endif %} {% endfor %} ]}
Malvelger:
{ "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({'sku': product.sku}, strict=False, default='') }}", "quantity": ####{{ product.qty }}, "filer": [ { "type": "forside", "url": "####{{ product.files.front }}" }, { "type": "tilbake", "url": "####{{ product.files.back }}" } ] }{% if not loop.last %},{% endif %} {% endfor %} ]}
Eksempel på betinget logikk
Dette eksempelet viser hvordan du kan bruke betinget logikk for å håndtere ulike produkttyper:
Inndata:
{ "orderId": "ORD-5555", "customer": { "name": "Alice Johnson", "email": "[email protected]", "telefon": "555-123-4567" }, "shipping": { "address": "789 Pine St", "apartment": "leilighet", "city": "Boston", "state": "MA", "zipCode": "02108", "country": "US" }, "items": [ { "id": "ITEM-A", "type": "plakat", "sku": "POSTER-LG", "quantity": 1, "image": "https://example.com/files/plakat.jpg" }, { "id": "ITEM-B", "type": "kort", "sku": "CARD-SM", "quantity": 100, "frontImage": "https://example.com/files/card-front.jpg", "backImage": "https://example.com/files/card-back.jpg" } ]}
Malvelger:
{ "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({'sku': 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": "tilbake", "url": "####{{ item.backImage }}" } {% endif %} ] }{% if not loop.last %},{% endif %} {% endfor %} ]}
Eksempel på oppdatering av ordrestatus
Dette eksempelet viser hvordan du kan sette opp et varsel når ordrestatusen endres:
Inndata:
{ "orderId": "a6a1f9ce-2bdd-4a9e-9f8d-0009df0e24d9", "orderReferenceId": "J123X456", "customerReferenceId": "KUNDE-789", "fulfillmentStatus": "sendt", "created": "2023-04-12T10:26:52+00:00", "items": [ { "itemReferenceId": "123", "fulfillmentStatus": "sendt", "produksjoner": [ { "trackingCode": "TRK123456789", "trackingUrl": "https://example.com/tracking?code=TRK123456789", "carrierName": "FedEx", "carrierUid": "fed_ex_ground", "fulfillmentCountry": "US", "fulfillmentStateProvince": "NY" } ] } ]}
Mal-oversikt:
{ "event": "BESTILLING_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 }}", "sporing": { {% for produksjon in item.fulfillments %} "carrier": "####{{ fulfillment.carrierName }}", "tracking_number": "####{{ fulfillment.trackingCode }}", "tracking_url": "####{{ fulfillment.trackingUrl }}", "sendt_fra": { "country": "####{{ fulfillment.fulfillmentCountry }}", "state": "####{{ fulfillment.fulfillmentStateProvince }}" } {% endfor %} } }{% if not loop.last %},{% endif %} {% endif %} {% endfor %} ] }}
Eksempel på avanserte oppslag
Dette eksempelet viser hvordan du kan koble produkter og velge transportør på en smart måte:
Inndata:
{ "reference": "ORDER-8888", "mottaker": { "fullName": "Robert Brown", "emailAddress": "[email protected]", "phoneNumber": "888-555-1212", "shippingInformation": { "streetAddress": "Eikekroken 321", "city": "Chicago", "state": "IL", "postalCode": "60601", "countryCode": "US" } }, "orderItems": [ { "lineItemId": "LI-001", "productReference": { "code": "BK-HCVR-A5", "type": "innbundet_bok", "size": "A5" }, "antall": 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": "nord-amerika"}
Mal-velger:
{% 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": "bokprodukt_pf_a5_pt_premium_cl_4-4_scvr", "BK-SCVR-A5-standard": "bokprodukt_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": "omslag", "url": "####{{ item.assetUrls.coverFile }}" }, { "type": "innside", "url": "####{{ item.assetUrls.interiorFile }}" } ] }{% if not loop.last %},{% endif %} {% endfor %} ]}
Jobbe med datoer og formatering
Dette eksempelet viser hvordan du kan formatere datoer og jobbe med tekst:
Inndata:
{ "orderNum": "INV-20230412-001", "datePlaced": "2023-04-12T14:30:00Z", "clientDetails": { "id": "CLIENT001", "contactInfo": { "name": "SARAH WILLIAMS", "email": "[email protected]", "telephone": "1.212.555.7890" }, "deliveryAddress": { "line1": "555 Broadway", "line2": "10. etasje", "city": "New York", "region": "New York", "code": "10012", "country": "USA" } }, "lineItems": [ { "refCode": "LI-001-A", "productIdentifier": "BROSJYRE-A4-GLOSSY", "amount": 250, "design": "https://example.com/files/brochure.pdf" } ]}
Malvelger:
{% set country_codes = { "United States": "USA", "Storbritannia": "GB", "Canada": "CA", "Australia": "AU", "Tyskland": "DE", "Frankrike": "FR"} %}{% set date_parts = datePlaced.split('T')[0].split('-') %}{% set formatted_date = date_parts[1] + '/' + date_parts[2] + '/' + 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.design }}" } ] }{% if not loop.last %},{% endif %} {% endfor %} ]}
Feilhåndtering og standardverdier
Dette eksempelet viser hvordan du kan håndtere feil på en trygg måte ved å bruke standardverdier:
Inndata:
{ "id": "ORD-91011", "buyer": { "name": "Michael Johnson" // Mangler e-postfelt }, "shipping": { "name": "Michael Johnson", "address": "111 River Rd", // Mangler by "province": "Ontario", "postal": "M5V 2H1", "country": "CA" }, "items": [ { "id": "ITEM-001", "sku": "CALENDAR-WALL", "quantity": 1, "assets": { "main": "https://example.com/files/kalender.pdf" } }, { // Ufullstendig element "id": "ITEM-002" } ]}
Malvelger:
{ "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('Ukjent') }}", "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({'sku': 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 møtes
Her ser du et eksempel der vi henter data fra flere steder:
Inndata:
{ "order": { "id": "PO-12345", "type": "standard" }, "customer": { "id": "CUST-789", "segment": "bedrift" }, "recipient": { "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, "design": "https://example.com/files/flyer.pdf" } ], "shipping": { "method": "bakke", "expectedDays": 3 }, "promotional": { "campaign": "SPRING2023", "source": "e-post" }}
Malvelger:
{% set shipping_method_map = { "overnight": "fed_ex_priority_overnight", "express": "fed_ex_2_day", "ground": "fed_ex_ground"} %}{ "orderReferenceId": "####{{ order.id }}", "orderType": "####{{ 'kladd' if order.type == 'preorder' else 'ordre' }}", "currency": "USD", "customerReferenceId": "####{{ customer.id }}", "shipmentMethodUid": "####{{ shipping_method_map.get(shipping.method, 'normal') }}", "metadata": [ { "key": "kampanje", "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.design }}" } ] }{% if not loop.last %},{% endif %} {% endfor %} ]}
Å jobbe med komplekse, innfløkte strukturer
Dette eksempelet viser hvordan du kan håndtere dypt nestede datastrukturer:
Inndata:
{ "data": { "transaction": { "identifiers": { "internalRef": "TX-44556", "customerRef": "CUST-ABC123" }, "metadata": { "createdAt": "2023-04-12T09:15:00Z", "source": "web", "etiketter": ["priority", "corporate"] } }, "parties": { "sender": { "organization": "Acme Corp", "contact": { "person": { "givenName": "Thomas", "familyName": "Anderson" }, "detaljer": { "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": "California", "postalCode": "90210", "country": "USA" } } } }, "innhold": { "items": [ { "descriptor": { "id": "ITM-X789", "type": "brosjyre", "specifications": { "format": "A4", "paperType": "Blankt", "colorProfile": "CMYK" } }, "quantity": { "value": 1000, "unit": "stk" }, "digitalAssets": { "printable": { "fileLocation": "https://example.com/files/brosjyre-complex.pdf" } } } ] } }}
Malvelger:
{% set country_map = { "USA": "US", "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.etiketter %} { "key": "etikett_####{{ 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": "standard", "url": "####{{ item.digitalAssets.printable.fileLocation }}" } ] }{% if not loop.last %},{% endif %} {% endfor %} ]}
Gode råd for å lage smarte maler
Når du jobber med Jinja2 Template Mappers i GelatoConnect, kan disse smarte tipsene være nyttige:
Bruk feilsøkingsmetoder:
Legg til midlertidige felt for å vise mellomverdier
Bruk {% raw %}####{{ variable | tojson }}{% endraw %}-filteret for å feilsøke komplekse objekter
Kombiner sett-setninger med betingelser:
jinja{% set shipping_type = 'ekspress' if order.priority == 'high' else 'standard' %}
Håndter manglende eller innfløkt data:
jinja####{{ data.get('nested', {}).get('deeply', {}).get('property', 'default_value') }}
Lag oversikter for vanlige koblinger:
{% set status_map = {'NEW': 'mottatt', 'SHIPPED': 'sendt', 'DELIVERED': 'levert'} %}"status": "####{{ status_map.get(input_status, 'ukjent') }}"
Samle gjenbrukbar logikk i makroer:
{% macro format_phone(phone) %}####{{ phone | replace(' ', '') | replace('.', '-') }}{% endmacro %}
Bruk filtre for å endre data:
trim
: Fjern mellomromreplace
: Bytt ut tekstupper
/lower
/title
: Endre bokstavtypedefault
: Bruk standardverdier hvis noe manglertojson
: Formater som en JSON-streng
Tenk på ytelsen når du jobber med store datamengder:
Regn ut verdier på forhånd før du går inn i løkker
Bruk setninger utenfor løkker
Hold malene enkle og målrettede
Hva skjer nå
Nå som du har sett disse praktiske eksemplene, kan du gjøre dette:
Tilpass disse malene til det du trenger for din integrasjon
Lag mer avanserte endringer ved å kombinere ulike teknikker
Test malene dine grundig med ekte data
Sett opp postback-utløsere med disse malene
Bruk oppslag for å gjøre det enklere å finne riktige verdier