På den här sidan: Lär dig mer om hanterarfält och PQL personaliseringssyntax i Adobe Journey Optimizer, inklusive allmänna regler, reserverade nyckelord, typtvång, tillgängliga namnutrymmen och bästa praxis.
Personalization i Journey Optimizer använder två kompletterande syntaxer som fungerar tillsammans i samma uttryck:
- Handlebars (
{{...}}) - används för att återge profilattribut, göra en slinga över arrayer och anropa blockhjälpredor. En fullständig referens finns i HandlebarsJS-dokumentationen. - Profile Query Language (PQL) (
{%= ... %}) - används för att anropa inbyggda funktioner (t.ex.upperCase(),formatDate(),dateDiff()) och utvärderar villkorsuttryck.
Att förstå vilket sammanhang du befinner dig i är avgörande för att undvika körningsfel. Ett PQL-funktionsanrop som placerats i {{...}} kommer till exempel att misslyckas eftersom Handlebars försöker att lösa det som en hjälp i stället för att utvärdera det som ett PQL-uttryck.
Exempel:
{{profile.person.name.firstName}}{%= upperCase(profile.person.name.firstName) %}{%#if profile.loyalty.tier = "gold"%}...{%/if%}{{#each profile.orders}}...{{/each}}Attributstrukturen definieras i ett Adobe Experience Platform XDM-schema. Läs mer.
Allmänna syntaxregler general-rules
-
Identifierare kan vara vilket Unicode-tecken som helst förutom följande specialtecken, som är reserverade för Handlebars-syntaxen:
code language-none Whitespace ! " # % & ' ( ) * + , . / ; < = > @ [ \ ] ^ ` { | } ~ -
Syntaxen är skiftlägeskänslig.
-
Orden true, false, null och undefined tillåts bara i den första delen av ett sökvägsuttryck.
-
I Handlebars är värdena som returneras av {{expression}} HTML-escape. Om uttrycket innehåller
&genereras returnerade HTML-escape-utdata som&. Om du inte vill att Handlebars ska hoppa över ett värde använder du “trippelstreck”.Anta att värdet för fältet
profile.person.nameär “Mark & Mary”. Syntaxen{{profile.person.name}}visarMark & Marymedan{{{profile.person.name}}}visarMark & Mary. -
När det gäller argument för literala funktioner saknar den mallande språkparsern stöd för ett omvänt snedstreck (
\) av typen unescape. Det här tecknet måste föregås av ett ytterligare omvänt snedstreck (\). Exempel:{%= regexGroup("abc@xyz.com","@(\\w+)", 1)%} -
Om du vill inkludera ett literalt dubbelcitattecken i ett strängvärde (t.ex. när JSON-utdata genereras) kan du undvika det med ett omvänt snedstreck (
\"):code language-handlebars { "message": "Hello \"{{profile.person.name.firstName}}\"" }Utdata:
{ "message": "Hello \"John\"" }Du kan också använda trippelstrecket
{{{ }}}för att skriva ut unescape-konverterade HTML när själva värdet innehåller specialtecken som du inte vill ha HTML-kodade.
Reserverade nyckelord reserved-keywords
Vissa nyckelord är reserverade i Profile Query Language (PQL) och kan inte användas direkt som fält- eller variabelnamn i personaliseringsuttryck. Om XDM-schemat innehåller fält med namn som matchar reserverade nyckelord måste du undvika dem med hjälp av bakterier (`) för att referera till dem i dina uttryck.
Reserverade nyckelord är:
nextlastthis
Exempel:
Om ditt profilschema har ett fält med namnet next måste du omsluta det med bakgrunder:
{{profile.person.`next`.name}}
Utan de här blocken misslyckas personaliseringsredigeraren med valideringen och ett fel inträffar.
{{...}}-handtagssökvägar och {%= ... %} PQL-uttryck, eftersom dessa nyckelord är reserverade på sökvägsupplösningsnivån. Detta skiljer sig från avstavade fältnamn, där backtick escape-funktioner endast stöds i PQL-uttryck. Se Avstavade attributnycklar.PQL syntaxregler för specialattributnycklar pql-special-keys
Förutom reserverade nyckelord krävs ytterligare två fall för att undvika backtick i PQL-uttryck.
Avstavade attributnycklar hyphenated-keys
Om ditt XDM-schema innehåller fältnamn med bindestreck (t.ex. my-field, event-type) eller namn som börjar med eller innehåller siffror, radbryt nyckeln i bakslag i PQL-uttryck:
{%= profile.events.`order-total` > 100 %}
{%= ... %}). Det stöds inte i Handlebars-interpolation ({{...}}). Avstavade fältnamn kan dock refereras direkt i {{...}} block (t.ex. {{profile.my-custom-field}}); endast backtick-syntax misslyckas där.Om det inte finns några bakgrunder i ett PQL-uttryck tolkas bindestrecket som en subtraktionsoperator och orsakar ett syntaxfel i PQL.
Numeriska händelse-ID:n i kontextattribut numeric-event-ids
När kontexthändelseattribut refereras till där händelse-ID är ett tal (t.ex. 1697323153), radbryt den i backticks. Detta gäller även inuti funktioner som formatDate():
Typtvång type-coercion
PQL är starkt typat. När värden jämförs eller skickas måste båda sidorna vara av samma typ. Vanliga fall:
stringToNumber() före aritmetik eller jämförelse: {%= stringToNumber(profile.loyalty.pointsBalance) > 500 %}string_to_integer() eller stringToNumber() före aritmetisktoBool() för att konvertera: {%= toBool(profile.consents.email.val) = true %}Tillgängliga namnutrymmen namespaces
-
Profil
Med det här namnutrymmet kan du referera till alla attribut som definieras i profilschemat som beskrivs i dokumentationen för Adobe Experience Platform datamodell (XDM).
Attributen måste definieras i schemat innan de refereras i ett Journey Optimizer-anpassningsblock.
Mer information om hur du återanvänder profilattribut i villkor finns i det här avsnittet.
accordion Exempelreferenser {{profile.person.name.fullName}}{{profile.person.name.firstName}}{{profile.person.gender}}{{profile.personalEmail.address}}{{profile.mobilePhone.number}}{{profile.homeAddress.city}}{{profile.faxPhone.number}}
-
Målgrupp
Mer information om segmenteringstjänsten finns i den här dokumentationen.
-
Erbjudanden
Med det här namnutrymmet kan du referera till befintliga offertbeslut.
Om du vill hänvisa till ett erbjudande måste du deklarera en sökväg med den information som definierar ett erbjudande. Den här sökvägen har följande struktur:
offers.Type.[Placement Id].[Activity Id].Attributedär:
offersidentifierar sökvägsuttrycket som tillhör namnutrymmet offerTypebestämmer typen av erbjudanderepresentation. Möjliga värden är:image,htmlochtextPlacement IdochActivity Idär placerings- och aktivitetsidentifierareAttributeserbjuder specifika attribut som är beroende av erbjudandetypen. Exempel:deliveryUrlför bilder
Mer information om beslut-API och om offertrepresentationer finns på den här sidan
Alla referenser valideras mot offertschema med en valideringsmekanism som beskrivs på den här sidan
accordion Exempelreferenser -
Plats där bilden finns:
offers.image.[offers:xcore:offer-placement:126f767d74b0da80].[xcore:offer-activity:125e2c6889798fd9].deliveryUrl -
Mål-URL när du klickar på bilden:
offers.image.[offers:xcore:offer-placement:126f767d74b0da80].[xcore:offer-activity:125e2c6889798fd9].linkUrl -
Innehåll i det erbjudande som kommer från beslutsmotorn:
offers.text.[offers:xcore:offer-placement:126f767d74b0da80].[xcore:offer-activity:125e2c6889798fd9].content -
HTML innehåll i erbjudandet som kommer från beslutsmotorn:
offers.html.[offers:xcore:offer-placement:126f767d74b0da80].[xcore:offer-activity:125e2c6889798fd9].content
Hjälpmedel helpers-all
Handtag-hjälpen är en enkel identifierare som kan följas av parametrar. Varje parameter är ett Handlebars-uttryck. Hjälpprogrammen kan nås från alla sammanhang i en mall.
Dessa blockhjälpare identifieras av en # före hjälpnamnet och kräver en matchande avslutande / med samma namn.
Blocken är uttryck som har ett blocköppning ({{# }}) och stängning ({{/}}).
Mer information om hjälpfunktioner finns i det här avsnittet.
Literala typer literal-types
Adobe Journey Optimizer stöder följande literaltyper:
Exempel:
"prospect", "jobs", "articles"Exempel:
-201, 0, 412Obs! Du kan inte komma åt egenskaper direkt för objekt i en array.
Exempel:
[1, 4, 7], ["US", "FR"]God praxis best-practices
Granska dessa syntaxregler innan du skapar personaliseringsuttryck. De flesta runtime-fel uppstår när du blandar handtag och PQL-kontexter.
Använd rätt villkorsstyrd blocksyntax
Använd alltid {%#if%} / {%else if%} / {%else%} / {%/if%}. Syntaxen {% if %} / {% elseif %} / {% endif %} stöds inte.
Anropa inte PQL-funktioner i {{...}} Handlebars blocks
{{...}} löser endast hanterarfältsvariabler och hjälpprogram - det utvärderas inte av PQL. Om en PQL-funktion som upperCase() i {{...}} kapslas in uppstår felet"det gick inte att hitta hjälpen". Använd {%= ... %} i stället:
{{upperCase(cleanName)}}{%= upperCase(cleanName) %}Använd ett namngivet loopalias när {{#each}} kombineras med{%#if%}
this.field löses av Handlebars-renderaren men inte av PQL-utvärderaren i ett {%#if%} -villkor. Definiera ett namngivet alias med as |item| så att båda kontexterna kan matcha fältet:
Tilldela PQL-funktionsresultat till en variabel innan slingor
PQL UDF som topN kan inte anropas direkt i {{#each}}. Utvärdera dem först med {% let %} och iterera sedan över resultatet:
Använd {% let %} för att undvika upprepade funktionsanrop
När ett beräknat värde behövs mer än en gång, sparar du det i en variabel. Detta förbättrar läsbarheten och förhindrar överflödiga utvärderingar:
Använd rätt argumentordning fördateDiff
dateDiff(start, end) tar det tidigare datumet först. Om du vill beräkna återstående dagar till ett framtida datum skickar du aktuellt datum som det första argumentet:
Använd = för likhetsjämförelser i PQL, inte==
PQL använder en enskild =-operator för likhet. Om du använder == uppstår ett syntaxfel.
Använd bakterier för avstavade fältnamn - endast i PQL-uttryck
Om ett XDM-schemafältnamn innehåller ett bindestreck (t.ex. order-total), radbryt det i bakslag för att förhindra att bindestrecket tolkas som en subtraktionsoperator. Detta stöds endast i {%= ... %} PQL-uttryck, inte i {{...}} Handlebars-block:
{%= profile.events.`order-total` > 100 %}
Mer information om färdiga uttryck som du kan kopiera direkt till ditt innehåll finns i Personalization recept.