Den här guiden ger praktiska exempel på Jinja2-mallmappningar i GelatoConnect för att hjälpa dig implementera vanliga scenarier för datatransformation. Oavsett om du mappar orderdata, transformerar aviseringar eller implementerar uppslagningar kommer dessa exempel att ge dig en solid grund.
Grundläggande exempel på orderläggning
Här ser du hur du kan skicka in en vanlig order:
Indata:
{ \"order\": { \"id\": \"12345\", \"customer_email\": \"[email protected]\", \"items\": [ { \"id\": \"item-1\", "product_code": "POSTER-A3", \"quantity\": 2, "file_url": "https://example.com/files/poster.pdf" } ], \"shipping\": { \"mottagare\": { \"first_name\": \"John\", \"last_name\": \"Smith\" }, \"address\": { \"line1\": \"123 Main St\", \"line2\": \"Lägenhet 4B\", \"city\": \"New York\", \"postnummer\": \"10001\", \"country\": \"US\", \"state\": \"NY\" }, \"phone\": \"212-555-1234\" } }}
Mallkopplare:
{ "orderReferenceId": "####{{ order.id }}", "orderType": "order", "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 %} ]}
Jobba med flera produktfiler
Det här exemplet hanterar produkter med flera filer (fram- och baksida):
Indata:
{ "orderReferenceId": "####{{ order.id }}", \"orderType\": \"order\", "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 %} ]}
Mallkartläggare:
{ \"orderReferenceId\": \"####{{ orderNumber }}\", \"orderType\": \"order\", \"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 }}, \"files\": [ { "type": "framsida", "url": "####{{ product.files.front }}" }, { "type": "tillbaka", "url": "####{{ product.files.back }}" } ] }{% if not loop.last %},{% endif %} {% endfor %} ]}
Exempel på villkorsstyrd logik
Det här exemplet visar villkorsstyrd logik för att hantera olika produkttyper:
Inmatade uppgifter:
{ \"orderId\": \"ORD-5555\", "customer": { "name": "Alice Johnson", "email": "[email protected]", "phone": "555-123-4567" }, "shipping": { "address": "789 Pine St", "apartment": "lägenhet", "city": "Boston", "state": "MA", \"postnummer\": \"02108\", \"country\": \"US\" }, "items": [ { \"id\": \"ITEM-A\", \"type\": \"poster\", \"sku\": \"POSTER-LG\", \"antal\": 1, "image": "https://example.com/files/poster.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\" } ]}
Mallkoppling:
{ \"orderReferenceId\": \"####{{ orderId }}\", \"orderType\": \"order\", "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 }}, \"files\": [ {% if item.type == 'poster' %} { "type": "standard", "url": "####{{ item.image }}" } {% elif item.type == 'card' %} { \"type\": \"front\", "url": "####{{ item.frontImage }}" }, { "type": "tillbaka", \"url\": \"####{{ item.backImage }}\" } {% endif %} ] }{% if not loop.last %},{% endif %} {% endfor %} ]}
Exempel på statusuppdatering för beställning
Här visar vi hur du kan utforma en postback-notis när orderstatus ändras:
Indata:
{ \"orderId\": \"a6a1f9ce-2bdd-4a9e-9f8d-0009df0e24d9\", \"orderReferenceId\": \"J123X456\", \"customerReferenceId\": \"CUST-789\", \"fulfillmentStatus\": \"skickad\", "created": "2023-04-12T10:26:52+00:00", "items": [ { "itemReferenceId": "123", "fulfillmentStatus": "skickad", "fulfillments": [ { "trackingCode": "TRK123456789", \"trackingUrl\": \"https://example.com/tracking?code=TRK123456789\", \"carrierName\": \"FedEx\", \"carrierUid\": \"fed_ex_ground\", \"fulfillmentCountry\": \"US\", \"fulfillmentStateProvince\": \"NY\" } ] } ]}
Mallkartläggare:
{ \"event\": \"ORDER_SHIPPED\", \"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 %} ] }}
Exempel på avancerade sökningar
Det här exemplet visar hur du kan göra smarta val för att matcha produkter och välja leveranssätt:
Inmatningsdata:
{ "reference": "ORDER-8888", "mottagare": { "fullName": "Robert Brown", "emailAddress": "[email protected]", "phoneNumber": "888-555-1212", "shippingInformation": { "streetAddress": "Ekvägen 321", "city": "Chicago", "state": "IL", \"postalCode\": \"60601\", "countryCode": "US" } }, \"orderItems\": [ { \"lineItemId\": \"LI-001\", \"productReference\": { "code": "BK-HCVR-A5", \"type\": \"inbunden_bok\", \"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"}
Mallkartläggare:
{% 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": "bokprodukt_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\": \"book_product_pf_a5_pt_standard_cl_4-4_scvr\"}) %}{ \"orderReferenceId\": \"####{{ reference }}\", "orderType": "order", \"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": "inuti", \"url\": \"####{{ item.assetUrls.interiorFile }}\" } ] }{% if not loop.last %},{% endif %} {% endfor %} ]}
Arbeta med datum och formatering
Det här exemplet visar datumformatering och strängmanipulation:
Inmatningsdata:
{ "orderNum": "INV-20230412-001", \"datePlaced\": \"2023-04-12T14:30:00Z\", "clientDetails": { "id": "CLIENT001", "contactInfo": { \"name\": \"SARAH WILLIAMS\", "email": "[email protected]", \"telefon\": \"1.212.555.7890\" }, "deliveryAddress": { "line1": "555 Broadway", \"line2\": \"Våning 10\", "city": "New York", "region": "New York", \"code\": \"10012\", "country": "USA" } }, "lineItems": [ { \"refCode\": \"LI-001-A\", "productIdentifier": "BROCHURE-A4-GLOSSY", "amount": 250, "artwork": "https://example.com/files/brochure.pdf" } ]}
Mallkopplare:
{% set country_codes = { "United States": "USA", "United Kingdom": "GB", "Kanada": "CA", "Australien": "AU", \"Tyskland\": \"DE\", "Frankrike": "FR"} %}{% set date_parts = datePlaced.split('T')[0].split('-') %}{% set formatted_date = date_parts[2] + '/' + date_parts[1] + '/' + date_parts[0] %}{ "orderReferenceId": "####{{ orderNum }}", "orderType": "order", "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 }}\", \"telefon\": \"####{{ clientDetails.contactInfo.telephone | replace('.', '-') }}\" }, \"items\": [ {% for item in lineItems %} { "itemReferenceId": "####{{ item.refCode }}", \"productUid\": \"####{{ lookups({'product_id': item.productIdentifier}, strict=False, default='') }}\", \"quantity\": ####{{ item.amount }}, \"files\": [ { \"type\": \"default\", \"url\": \"####{{ item.artwork }}\"" } ] }{% if not loop.last %},{% endif %} {% endfor %} ]}
Felhantering och standardvärden
Det här exemplet visar robust felhantering med standardvärden:
Indata:
{ \"id\": \"ORD-91011\", "köpare": { "name": "Michael Johnson" // E-postfält saknas }, "shipping": { "name": "Michael Johnson", "address": "111 River Rd", // Saknar stad \"province\": \"Ontario\", "postal": "M5V 2H1", \"country\": \"CA\" }, "items": [ { \"id\": \"ITEM-001\", "sku": "CALENDAR-WALL", \"antal\": 1, \"assets\": { "main": "https://example.com/files/calendar.pdf" } }, { // Ofullständig post "id": "ITEM-002" } ]}
Mallkopplare:
{ \"orderReferenceId\": \"####{{ id }}\", "orderType": "order", \"currency\": \"CAD\", \"shippingAddress\": { {% set recipient = shipping.name | default('') %} {% set name_parts = recipient.split(' ') if recipient else ['', ''] %} \"firstName\": \"####{{ name_parts[0] | default('Unknown') }}\", \"lastName\": \"####{{ name_parts[1:] | join(' ') | default('Kund') }}\", "addressLine1": "####{{ shipping.address | default('Adress saknas') }}", "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 and item.sku and item.quantity %} { \"itemReferenceId\": \"####{{ item.id }}\", "productUid": "####{{ lookups({'sku': item.sku}, strict=False, default='') }}", \"quantity\": ####{{ item.quantity }}, "filer": [ { \"type\": \"default\", "url": "####{{ item.assets.main | default('') }}" } ] }{% if not loop.last %},{% endif %} {% endif %} {% endfor %} ]}
Att samla flera källor
Det här exemplet kombinerar data från flera källor:
Inmatningsdata:
{ "order": { "id": "PO-12345", "type": "standard" }, "customer": { \"id\": \"CUST-789\", "segment": "business" }, \"recipient\": { "first": "David", \"last\": \"Miller\", "email": "[email protected]", \"telefon\": \"303-555-1212\", "leverans": { \"address\": \"987 State St\", \"suite\": \"Suite 500\", \"city\": \"Denver\", "state": "CO", "zip": "80202", "country": "US" } }, \"products\": [ { "id": "PROD-A1", "code": "FLYER-A4-FULL", "count": 500, \"artwork\": \"https://example.com/files/flyer.pdf\" } ], "frakt": { "method": "marktransport", "expectedDays": 3 }, "kampanj": { \"campaign\": \"SPRING2023\", "source": "e-post" }}
Mallkoppling:
{% set shipping_method_map = { "overnight": "fed_ex_priority_overnight", \"express\": \"fed_ex_2_day\", "ground": "fed_ex_ground"} %}{ \"orderReferenceId\": \"####{{ order.id }}\", "orderType": "####{{ 'utkast' if order.type == 'förbeställning' else 'order' }}", \"currency\": \"USD\", "customerReferenceId": "####{{ customer.id }}", "shipmentMethodUid": "####{{ shipping_method_map.get(shipping.method, 'normal') }}", "metadata": [ { "key": "kampanj", "value": "####{{ promotional.campaign }}" }, { "key": "källa", \"value\": \"####{{ promotional.source }}\"" }, { \"key\": \"segment\", "value": "####{{ customer.segment }}" }, { "key": "förväntad leverans", "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 }}, \"files\": [ { "type": "standard", "url": "####{{ product.artwork }}" } ] }{% if not loop.last %},{% endif %} {% endfor %} ]}
Att jobba med krångliga och invecklade strukturer
Här ser du ett exempel på hur du kan ta hand om riktigt invecklade datastrukturer:
Indata:
{ \"data\": { \"transaction\": { "identifiers": { "internalRef": "TX-44556", "customerRef": "CUST-ABC123" }, \"metadata\": { \"createdAt\": \"2023-04-12T09:15:00Z\", "källa": "webb", \"tags\": [\"priority\", \"corporate\"] } }, \"parties\": { "sender": { \"organization\": \"Acme Corp\", "contact": { \"person\": { \"givenName\": \"Thomas\", "familyName": "Anderson" }, "details": { "email": { \"address\": \"[email protected]\" }, "phone": { "number": "415-555-9876", "anknytning": "123" } } } }, \"mottagare\": { "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": "Kalifornien", "postalCode": "90210", "country": "USA" } } } }, \"contents\": { "items": [ { "beskrivning": { "id": "ITM-X789", \"type\": \"broschyr\", "specifikationer": { "format": "A4", "paperType": "Blankt", "colorProfile": "CMYK" } }, \"quantity\": { "value": 1000, \"unit\": \"st\"" }, "digitalAssets": { "printable": { "fileLocation": "https://example.com/files/brochure-complex.pdf" } } } ] } }}
Mallkoppling:
{% set country_map = { \"USA\": \"US\", \"United States\": \"US\", "United States of America": "USA", \"UK\": \"GB\", \"Storbritannien\": \"GB\", \"England\": \"GB\"} %}{ \"orderReferenceId\": \"####{{ data.transaction.identifiers.internalRef }}\", "orderType": "order", \"currency\": \"USD\", \"customerReferenceId\": \"####{{ data.transaction.identifiers.customerRef }}\", "metadata": [ { \"key\": \"createdAt\", "value": "####{{ data.transaction.metadata.createdAt }}" }, { "key": "källa", "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, 'papper': item.descriptor.specifications.paperType }, strict=False, default='') }}\"," \"quantity\": ####{{ item.quantity.value }}, \"files\": [ { "type": "standard", "url": "####{{ item.digitalAssets.printable.fileLocation }}" } ] }{% if not loop.last %},{% endif %} {% endfor %} ]}
Tips för att bli en grym mallskapare
När du jobbar med Jinja2 Template Mappers i GelatoConnect, tänk på de här smarta tipsen:
Använd felsökningstekniker:
Lägg till tillfälliga fält för att visa mellanliggande värden
Använd {% raw %}####{{ variable | tojson }}{% endraw %} filtret för att felsöka komplexa objekt
Kombinera Set-satser med villkor:
jinja{% set shipping_type = 'express' if order.priority == 'high' else 'standard' %}
Hantera saknad eller kapslad data:
jinja####{{ data.get('nested', {}).get('deeply', {}).get('property', 'default_value') }}
Skapa kartläggningar för vanliga kopplingar:
{% set status_map = {'NEW': 'received', 'SHIPPED': 'shipped', 'DELIVERED': 'delivered'} %}"status": "####{{ status_map.get(input_status, 'okänd') }}"
Kapsla in återanvändbar logik i makron:
{% macro format_phone(phone) %}####{{ phone | replace(' ', '') | replace('.', '-') }}{% endmacro %}
Använd filter för att omvandla data:
trim
: Ta bort blankstegreplace
: Ersätt textupper
/lower
/title
: Ändra skiftlägedefault
: Ange reservvärdentojson
: Formatera som JSON-sträng
Tänk på prestandan vid stora datamängder:
Räkna ut värden i förväg innan du kör loopen
Använd set-satser utanför loopar
Håll mallar fokuserade och specifika
Nästa steg
Nu när du har sett de här konkreta exemplen kan du:
Anpassa dessa mallar efter dina specifika integrationsbehov
Skapa mer komplexa transformationer genom att kombinera tekniker
Testa dina mallar noggrant med verklig data
Konfigurera postback-utlösare med hjälp av dessa mallar
Implementera uppslagningar för effektiv värdemappning