Gå til hovedinnhold

[Ordreinngang – GCW] Eksempler på maltilordning

T
Skrevet av Toby Dawson
Oppdatert for over 3 uker siden

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:

  1. Bruk feilsøkingsmetoder:

    • Legg til midlertidige felt for å vise mellomverdier

    • Bruk {% raw %}####{{ variable | tojson }}{% endraw %}-filteret for å feilsøke komplekse objekter

  2. Kombiner sett-setninger med betingelser:

    jinja{% set shipping_type = 'ekspress' if order.priority == 'high' else 'standard' %}
  3. Håndter manglende eller innfløkt data:

    jinja####{{ data.get('nested', {}).get('deeply', {}).get('property', 'default_value') }}
  4. Lag oversikter for vanlige koblinger:

    {% set status_map = {'NEW': 'mottatt', 'SHIPPED': 'sendt', 'DELIVERED': 'levert'} %}"status": "####{{ status_map.get(input_status, 'ukjent') }}"
  5. Samle gjenbrukbar logikk i makroer:

    {% macro format_phone(phone) %}####{{ phone | replace(' ', '') | replace('.', '-') }}{% endmacro %}
  6. Bruk filtre for å endre data:

    • trim: Fjern mellomrom

    • replace: Bytt ut tekst

    • upper/lower/title: Endre bokstavtype

    • default: Bruk standardverdier hvis noe mangler

    • tojson: Formater som en JSON-streng

  7. 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:

  1. Tilpass disse malene til det du trenger for din integrasjon

  2. Lag mer avanserte endringer ved å kombinere ulike teknikker

  3. Test malene dine grundig med ekte data

  4. Sett opp postback-utløsere med disse malene

  5. Bruk oppslag for å gjøre det enklere å finne riktige verdier

Svarte dette på spørsmålet?