Funksjoner
Oversikt over dynamiske uttrykk definert i JSON
Funksjoner
Disse funksjonene er tilgjengelige for bruk i uttrykk:
Sammenligning av verdier
| Funksjonsnavn | Parametre | Returverdi | Frontend | Backend |
|---|---|---|---|---|
compare | Se detaljert beskrivelse | Boolsk | ✅ | ✅ |
equals | Streng, Streng | Boolsk | ✅ | ✅ |
notEquals | Streng, Streng | Boolsk | ✅ | ✅ |
not | Boolsk | Boolsk | ✅ | ✅ |
greaterThan | Tall, Tall | Boolsk | ✅ | ✅ |
greaterThanEq | Tall, Tall | Boolsk | ✅ | ✅ |
lessThan | Tall, Tall | Boolsk | ✅ | ✅ |
lessThanEq | Tall, Tall | Boolsk | ✅ | ✅ |
concat | Ingen eller flere strenger | Streng | ✅ | ✅ |
contains | Streng, Streng | Boolsk | ✅ | ✅ |
notContains | Streng, Streng | Boolsk | ✅ | ✅ |
commaContains | Streng, Streng | Boolsk | ✅ | ✅ |
startsWith | Streng, Streng | Boolsk | ✅ | ✅ |
endsWith | Streng, Streng | Boolsk | ✅ | ✅ |
Logikk
| Funksjonsnavn | Parametre | Returverdi | Frontend | Backend |
|---|---|---|---|---|
and | En eller flere boolske verdier | Boolsk | ✅ | ✅ |
or | En eller flere boolske verdier | Boolsk | ✅ | ✅ |
if | Se detaljert beskrivelse | Se detaljert beskrivelse | ✅ | ✅ |
Strenger og tall
| Funksjonsnavn | Parametre | Returverdi | Frontend | Backend |
|---|---|---|---|---|
lowerCase | Streng | Streng | ✅ | ✅ |
upperCase | Streng | Streng | ✅ | ✅ |
lowerCaseFirst | Streng | Streng | ✅ | ✅ |
upperCaseFirst | Streng | Streng | ✅ | ✅ |
stringLength | Streng | Tall | ✅ | ✅ |
stringIndexOf | Streng, Streng | Tall | ✅ | ✅ |
stringSlice | Streng, Tall, valgfritt Tall | Streng | ✅ | ✅ |
stringReplace | Streng, Streng, Streng | Streng | ✅ | ✅ |
text | Streng | Streng | ✅ | ❌ |
language | Ingenting | Streng | ✅ | ❌ |
displayValue | Streng | Streng | ✅ | ❌ |
round | Tall, valgfritt Tall | Streng | ✅ | ✅ |
formatDate | Dato/tid, valgfri Streng | Streng | ✅ | ✅ |
plus | Ett eller flere tall | Tall | ✅ | ✅ |
minus | Tall, tall | Tall | ✅ | ✅ |
multiply | Ett eller flere tall | Tall | ✅ | ✅ |
divide | Tall, tall | Tall | ✅ | ✅ |
Lister og objekter
| Funksjonsnavn | Parametre | Returverdi | Frontend | Backend |
|---|---|---|---|---|
jmespath | Vilkårlig type, streng | Liste, objekt, streng, tall, boolsk eller null | ✅ | ✅ |
list | Ubegrenset antall verdier | Liste | ✅ | ✅ |
object | Et partall antall verdier, hvor oddetallsverdiene er strenger | Objekt | ✅ | ✅ |
count | Liste | Tall | ✅ | ✅ |
sum | Liste | Tall | ✅ | ✅ |
average | Liste, tall | Tall | ✅ | ✅ |
Oppslag, komponenter og data
| Funksjonsnavn | Parametre | Returverdi | Frontend | Backend |
|---|---|---|---|---|
instanceContext | Streng | Streng | ✅ | ✅ |
frontendSettings | Streng | Streng | ✅ | ✅ |
countDataElements | Streng | Tall | ✅ | ✅ |
dataModel | Streng, valgfri streng | Streng, liste eller objekt | ✅ | ✅ |
component | Streng | Streng, liste eller objekt | ✅ | ✅ |
linkToPage | Streng, Streng, Boolsk (valgfri) | Streng | ✅ | ❌ |
linkToComponent | Streng, Streng, Boolsk (valgfri) | Streng | ✅ | ❌ |
optionLabel | Streng, Streng | Streng | ✅ | ❌ |
externalApi | Streng, Streng | Streng | ✅ | ❌ |
Spesialfunksjoner
| Funksjonsnavn | Parametre | Returverdi | Frontend | Backend |
|---|---|---|---|---|
argv | Tall | Streng | ✅ | ✅ |
value | valgfri Streng | Streng | ✅ | ❌ |
Detaljerte beskrivelser og eksempler
Funksjonen compare er en generisk sammenligningsfunksjon som kan brukes til å sammenligne to verdier. Funksjonen tar
tre eller fire argumenter. Den første og siste argumentene er alltid verdiene som skal sammenlignes. Argumentene i
midten må være en gyldig operator, potensielt med et not foran for å invertere sammenligningen.
Noen eksempler:
["compare", 5, "greaterThan", 3]
["compare", "foo", "equals", "bar"]
["compare", 5, "not", "equals", 3]
Funksjonen returnerer en boolsk verdi basert på sammenligningen. De aksepterte datatypene for sammenligning avhenger av
operatoren som brukes. For eksempel kan operatoren equals sammenligne strenger, tall og boolske verdier, mens
greaterThan og lessThan kun kan sammenligne tall.
| Operator | Parametre | Beskrivelse |
|---|---|---|
equals | Alle typer | Returnerer true om de to verdiene er like, false ellers. |
greaterThan | Tall | Returnerer true om det første tallet er større enn det andre tallet, false ellers. |
greaterThanEq | Tall | Returnerer true om det første tallet er større enn eller lik det andre tallet, false ellers. |
lessThan | Tall | Returnerer true om det første tallet er mindre enn det andre tallet, false ellers. |
lessThanEq | Tall | Returnerer true om det første tallet er mindre enn eller lik det andre tallet, false ellers. |
isBefore | Dato/tid | Returnerer true om den første datoen er før den andre datoen, false ellers. |
isBeforeEq | Dato/tid | Returnerer true om den første datoen er før eller lik den andre datoen, false ellers. |
isAfter | Dato/tid | Returnerer true om den første datoen er etter den andre datoen, false ellers. |
isAfterEq | Dato/tid | Returnerer true om den første datoen er etter eller lik den andre datoen, false ellers. |
isSameDay | Dato/tid | Returnerer true om de to datoene er på samme dag, false ellers. |
Disse to funksjonene sammenligner to strenger for å sjekke om de er like (equals) eller ulike (notEquals). Hvis du sender inn andre verdier enn strenger, konverteres verdiene og sammenlignes som strenger.
Eksempler:
App/ui/{taskId}/layouts/{page}.json{
"id": "lastName",
"type": "Input",
...
"hidden": ["equals",
["dataModel", "My.Model.FirstName"],
"John"
],
"readOnly": ["notEquals",
["frontendSettings", "FormIsEditable"],
true
]
}
notEquals er i prinsippet det samme som, og en snarvei til, ["not", ["equals", ...]].
Se også tips og triks under Streng eller mindre streng sammenligning?
Denne funksjonen tar inn en boolsk verdi eller noe som kan konverteres til en boolsk verdi, og returnerer den motsatte boolske verdien. Sann konverteres til usann, usann konverteres til sann.
Funksjonen kan være nyttig hvis du vil snu et uttrykk. I stedet for å tenke at du skal skrive et uttrykk som skjuler en komponent gitt noen forutsetninger, kan du pakke uttrykket inn i not og skrive uttrykket ut fra hva som skal til for å vise komponenten:
App/ui/{taskId}/layouts/{page}.json{
"id": "lastName",
"type": "Input",
"hidden": [
"not",
["or", ["dataModel", "ShowLastName"], ["frontendSettings", "ShowAllFields"]]
]
}
Disse fire funksjonene forventer to tall inn, og sammenligner det første med det andre. Det vil si, for funksjonen greaterThan er uttrykket sant hvis det første tallet er større enn det andre.
| Funksjon | Beskrivelse | Symbol |
|---|---|---|
greaterThan | Er det første tallet større enn det andre tallet? | > |
greaterThanEq | Er det første tallet større enn eller lik det andre tallet? | ≥ |
lessThan | Er det første tallet mindre enn det andre tallet? | < |
lessThanEq | Er det første tallet mindre enn eller lik det andre tallet? | ≤ |
Hvis noen av argumentene til disse funksjonene er null, er resultatet false (uavhengig av om det er det første eller andre argumentet).
Eksempel som sjekker om alder er over (eller lik) 18:
["greaterThanEq", ["component", "alder"], 18]
Denne funksjonen tar inn 0 eller flere strenger som argumenter, og returnerer en streng hvor alle strengene i argumentene er slått sammen. Kalles funksjonen uten noen argumenter gis det en tom streng.
Legg merke til at funksjonen ikke automatisk legger til mellomrom eller komma når den slår sammen strenger. For å gi et mer lesbart resultat anbefales det å legge inn bindetegn hvor nødvendig:
["concat", "Gratulerer med ", ["component", "alder"], "-årsdagen!"]
Uttrykket over gir teksten Gratulerer med 18-årsdagen! hvis verdien i alder-komponenten var 18.
I concat-funksjonen tolkes null-verdier som tomme strenger. Boolske verdier skrives ut som strengene "true" og "false".
Funksjonene and og or forventer 1 eller flere boolske verdier, og gir et resultat ut fra om henholdsvis alle eller
minst en av verdiene var sanne (true).
| Funksjon | Beskrivelse |
|---|---|
and | Er alle argumentene sanne? (true) |
or | Er minst ett av argumentene sanne? (true) |
Hvis du bruker null-verdier, tolkes disse som usann (false). Eksempler på bruk finnes under Streng eller mindre streng sammenligning?
if-funksjonen kan brukes for å forgrene et uttrykk slik at returverdien styres av resultatet av et annet
boolsk uttrykk. Funksjonen kan kalles på to forskjellige måter; med 2 eller 4 argumenter:
| Argument | Alternativ 1 | Alternativ 2 |
|---|---|---|
| Første argument | Boolsk | Boolsk |
| Andre argument | Vilkårlig type | Vilkårlig type |
| Tredje argument | Strengen "else" | |
| Fjerde argument | Vilkårlig type |
I alternativ 1 blir returverdien til funksjonen verdien gitt som andre argument hvis første argument er sant (true). Hvis ikke, returneres verdien null.
I alternativ 2 blir returverdien til funksjonen verdien gitt som andre argument hvis første argument er sant (true). Hvis ikke, returneres verdien gitt i fjerde argument. Du må alltid bruke strengen "else" som tredje argument hvis du vil kalle funksjonen med fire argumenter. Det tredje argumentet er bare til for å gjøre uttrykket mer lesbart, og har ingen funksjon ellers.
Hvis du ønsker flere betingelser og mulige returverdier, kan du nøste flere kall til if inne i andre eller fjerde argument:
[
"if",
["greaterThan", ["component", "birthYear"], 1945],
"Du ble født etter verdenskrigene",
"else",
[
"if",
["greaterThanEq", ["component", "birthYear"], 1939],
"Du ble født under andre verdenskrig",
"else",
"Du ble født før andre verdenskrig"
]
]
Funksjonen language returnerer brukerens valgte språkkode.
Eksempel:
App/ui/{taskId}/layouts/{page}.json{
"id": "lastName",
"type": "Input",
...
"readOnly": ["equals", ["language"], "en"],
}
Funksjonen returnerer språket appen har valgt blant språkene den støtter. Se hvordan appen velger språk.
Merk: Denne funksjonen er ikke tilgjengelig i backend-kode ennå, og gir derfor en feilmelding hvis den blir brukt noen steder hvor uttrykk kjøres på backend, og hvis du har slått på funksjonaliteten for å automatisk slette skjulte data RemoveHiddenDataPreview.
Funksjonen startsWith sjekker om strengen gitt som første argument starter med strengen gitt i andre argument, og
på samme vis vil funksjonen endsWith sjekke om første streng slutter med den andre strengen.
["startsWith", ["dataModel", "My.Model.FirstName"], "Jo"]
["endsWith", ["dataModel", "My.Model.FirstName"], "hn"]
Noen detaljer som er verdt å nevne om disse funksjonene:
- Alle funksjoner starter og slutter med en tom streng, så
startsWithogendsWithreturnerer alltidtruehvis du bruker et uttrykk["startsWith", "...", ""]. Dette er viktig å passe på hvis du bruker verdien til en komponent eller et oppslag i datamodellen som andre argument. - Ingen strenger starter eller slutter med en
null-verdi. Hvis du bruker et uttrykk som dette:blir alltid resultatet[ "startsWith", ["dataModel", "My.Model.FullName"], ["dataModel", "My.Model.FirstName"] ]falseså lenge fornavnet ikke er gitt. Men som nevnt over, hvis fornavnet er satt til en tom streng (for eksempel hvis brukeren har visket ut fornavnet sitt), gir uttrykkettruehvis et fullt navn er satt. Hvis du vil unngå noe av denne oppførselen, kan du brukeif-funksjonen sammen medequalstil å sjekke om noe er satt til en tom streng. ["startsWith", null, null]gir alltidfalse.
Funksjonen stringIndexOf tar imot to argumenter: en streng og en delstreng. Den returnerer indeksen til første forekomst av delstrengen i strengen. Hvis delstrengen ikke finnes i strengen, returnerer funksjonen null.
Eksempel:
["stringIndexOf", ["dataModel", "My.Model.FullName"], " "]
Dette eksempelet returnerer indeksen til det første mellomrommet i fullt navn. Hvis fullt navn er “John Doe”, returnerer funksjonen 4.
Funksjonen stringSlice tar imot en streng som første argument (den originale strengen) og ett eller to tall som andre og tredje argument (startindeksen og valgfri sluttindeks). Den returnerer en delstreng av den originale strengen som starter på startindeksen. Hvis en sluttindeks er gitt, stopper delstrengen før tegnet på den indeksen. Tegnet på startindeksen er altså med, mens tegnet på sluttindeksen ikke er det. Indeksene starter på 0, og en negativ indeks telles fra slutten av strengen. Merk at tredje argument er en sluttindeks, ikke en lengde.
Eksempel:
["stringSlice", ["dataModel", "My.Model.FullName"], 5, 8]
Dette eksempelet returnerer en delstreng av det fulle navnet, fra og med indeks 5 til, men ikke med, indeks 8. Hvis det fulle navnet er “John Doe”, returnerer funksjonen “Doe”. For å hente to tegn fra indeks 6 bruker du 6, 8 (ikke 6, 2), slik at ["stringSlice", "12345678901", 6, 8] gir “78”.
Funksjonen stringReplace tar imot tre argumenter: en streng, en delstreng som skal erstattes, og en erstatningsstreng.
Den returnerer en ny streng hvor alle forekomster av delstrengen i strengen er erstattet med erstatningsstrengen.
Eksempel:
["stringReplace", ["dataModel", "My.Model.FullName"], " ", "-"]
Dette eksempelet erstatter alle mellomrom i fullt navn med bindestreker. Hvis fullt navn er “John Doe”, returnerer funksjonen “John-Doe”.
Disse to funksjonene sjekker om streng A inkluderer eller ikke inkluderer streng B. Både contains og notContains skiller mellom store og små bokstaver. Det betyr at strengen “Hei” ikke inkluderer “hei”. Hvis du vil sammenligne uavhengig av store og små bokstaver, kan du bruke funksjonene lowerCase eller upperCase sammen med contains eller notContains.
Eksempel:
App/ui/{taskId}/layouts/{page}.json{
"id": "lastName",
"type": "Input",
...
"hidden": [
"contains",
["dataModel", "My.Model.FirstName"],
"J"
],
"readOnly": [
"notContains",
["dataModel", "My.Model.FirstName"],
"D"
]
}
Hvis du vil sjekke om verdier finnes i en kommaseparert liste, kan du bruke funksjonen commaContains.
Funksjonen commaContains tar imot to argumenter. Det første argumentet er en kommaseparert streng, og det andre argumentet er strengen du vil sjekke om er blant de kommaseparerte verdiene i første argument.
Eksempel:
App/ui/{taskId}/layouts/{page}.json{
"id": "addName",
"type": "Input",
...
"readOnly": ["commaContains", ["dataModel", "My.Model.Names"], "John"]
}
Legg merke til at eventuelle mellomrom før/etter komma, eller før/etter første verdi ignoreres. Denne funksjonen er spesielt nyttig i tilfeller hvor du bruker en komponent som lagrer flere verdier i en kommaseparert streng, som Checkboxes og MultipleSelect.
Funksjonene lowerCase og upperCase tar imot en streng som input og returnerer en ny streng der alle tegnene er konvertert til henholdsvis små eller store bokstaver.
["lowerCase", ["dataModel", "My.Model.LastName"]]
Disse funksjonene gir deg en enkel måte å konvertere mellom små og store bokstaver i en streng. Et bruksområde kan være å kombinere en av disse funksjonene med andre sammenligningsfunksjoner slik at sammenligningene gjøres uavhengig av om store eller små bokstaver ble brukt i input-verdien.
["equals", ["upperCase", ["dataModel", "My.Model.LastName"]], "SMITH"]
Funksjonene lowerCaseFirst og upperCaseFirst tar en streng som input og returnerer en ny streng der den første bokstaven er konvertert til henholdsvis liten eller stor bokstav.
["upperCaseFirst", ["dataModel", "My.Model.LastName"]]
I dette eksempelet, gitt et etternavn “smith”, vil funksjonen returnere “Smith”.
Funksjonen round avrunder et tall til et heltall, eller valgfritt til et desimaltall med et konfigurerbart antall desimalpunkter.
Eksempel med avrunding med 2 desimalpunkter:
["round", "122.99843", "2"]
Eksempel med avrunding til nærmeste heltall:
["round", "3.4999"]
Returverdien fra denne funksjonen er en streng, slik at returverdien kan brukes for fremvisning (merk at desimalskilletegnet alltid er punktum). Selv om returverdien er en streng, kan denne også brukes videre i uttrykk som forventer tall som inn-verdi.
Funksjonen text tar imot en nøkkel som argument og bruker denne nøkkelen til å hente ut den tilsvarende teksten fra en tekst-ressurs. Funksjonen returnerer verdien som er knyttet til den angitte nøkkelen.
Eksempel:
["text", "min-nøkkel-id"]
Merk: Husk å teste manuelt med tekstnøkler som inneholder variabler. Det er ikke sikkert disse fungerer som forventet.
Merk: Denne funksjonen er ikke tilgjengelig i backend-kode ennå, og gir derfor en feilmelding hvis den blir brukt noen steder hvor uttrykk kjøres på backend, og hvis du har slått på funksjonaliteten for å automatisk slette skjulte data RemoveHiddenDataPreview.
Funksjonen displayValue gjør et oppslag på en komponent og returnerer en formattert tekststreng som representerer verdien i datamodellen. Dette er til forskjell fra component-funksjonen som returnerer råverdien som ligger i datamodellen. Denne funksjonen egner seg best til visning av en komponents verdi for brukeren, og mindre til videre logikk basert på verdien som returneres. Dette er spesielt relevant for Input-felter med tallformattering, datofelter, radioknapper og andre komponenter med kodelister.
Eksempel:
["displayValue", "component-id"]
Merk: Denne funksjonen er ikke tilgjengelig i backend-kode ennå, og gir derfor en feilmelding hvis den blir brukt noen steder hvor uttrykk kjøres på backend, og hvis du har slått på funksjonaliteten for å automatisk slette skjulte data RemoveHiddenDataPreview.
Denne funksjonen gjør det mulig å hente ut informasjon om gjeldende instans. Følgende nøkler kan brukes fra og med første argument:
| Nøkkel | Verdi | Eksempelverdi |
|---|---|---|
instanceId | Gjeldende instans-ID | 512345/48c31ffc-dcdd-416d-8bc7-194bec3b7bf0 |
instanceOwnerPartyId | Gjeldende aktør-ID | 512345 |
instanceOwnerPartyType | Hva slags aktør eier instansen | "org", "person", "selfIdentified" eller "unknown" |
appId | Den aktive appen sin ID | org/app-name |
Alle disse oppslagene gir verdien null hvis du jobber i en tilstandsløs kontekst. Hvis du bruker andre nøkler enn de over, resulterer oppslaget i en feilmelding. Denne oppførselen er unik blant oppslagsfunksjonene, og gjøres for å sikre at du ikke prøver å hente informasjon som finnes i instansen men som ikke (ennå) er eksponert via en nøkkel her. Gi oss en tilbakemelding hvis du har ønsker om å hente ut instansdata som ikke er tilgjengelig i denne funksjonen.
Oppslaget gjøres i samme datakilde som er tilgjengelig for språk/tekster.
Dette oppslaget gjør det mulig å hente informasjon fra en datakilde som kan styres ulikt for hvert kjøretidsmiljø.
Oppslaget gjøres i samme datakilde som er tilgjengelig for språk/tekster, og oppsettet er beskrevet i detalj der.
Merk: Datakilden heter applicationSettings når du bruker den i språk/tekster, men verdiene må alltid lagres under nøkkelen FrontEndSettings i appsettings.{miljø}.json). Av den grunn har funksjonen fått navnet frontendSettings her, for å indikere at oppslag ikke kan gjøres i resten av appsettings.{miljø}.json.
Denne funksjonen gjør det mulig å telle antall elementer av en gitt datatype i gjeldende instans. Første argument må være en streng som er definert som en datatype i applicationmetadata.json. Funksjonen returnerer antallet elementer av den gitte datatypen i gjeldende instans.
For eksempel, hvis du har en FileUpload-komponent som laster opp filer til datatypen Attachment, kan du bruke denne funksjonen til å telle antall vedlegg som er lastet opp. På samme måte kan du telle antall underskjema-elementer ved å referere til datamodell-ID-en til underskjemaet.
Eksempel:
["countDataElements", "Attachment"]
Denne oppslagsfunksjonen gjør det mulig å hente verdier direkte fra gjeldende datamodell. Første argument må peke et sted i datamodellen, og bruker det samme punktum-separerte formatet som brukt i dataModelBindings. Hvis appen har flere datamodeller, kan du oppgi datatypen til datamodellen som andre argument, for eksempel ["dataModel", "Ansatte.Navn", "personalmodell"]. Datatypen må være en fast tekst, ikke et uttrykk. Uten andre argument slår funksjonen opp i standarddatamodellen (defaultDataType). Ved bruk inne i repeterende grupper trenger du ikke bruke plassholdere for indekser til gruppen - uttrykket finner selv den relative plasseringen i kontekst av en repeterende gruppe.
Eksempel på oppslag i repeterende gruppe:
App/ui/{taskId}/layouts/{page}.json[
{
"id": "ansatte",
"type": "RepeatingGroup",
"textResourceBindings": {
"title": "Ansatte i selskapet"
},
"maxCount": 99999,
"children": ["ansatt-navn", "ansatt-alder"],
"dataModelBindings": {
"group": "Ansatte"
}
},
{
"id": "ansatt-navn",
"type": "Input",
"textResourceBindings": {
"title": "Fullt navn"
},
"dataModelBindings": {
"simpleBinding": "Ansatte.Navn"
},
"hidden": ["lessThan",
["dataModel", "Ansatte.Alder"],
18]
},
{
"id": "ansatt-alder",
"type": "Input",
"textResourceBindings": {
"title": "Alder"
},
"dataModelBindings": {
"simpleBinding": "Ansatte.Alder"
},
"hidden": ["equals",
["dataModel", "Ansatte[0].Navn"],
"Ola Nordmann"]
}
]
Følgende kan observeres:
- Det første oppslaget (for å styre
hiddenpå komponentenansatt-navn) styres ut fra alderen til hver ansatt. Hvis den ansatte er under 18 år, skjulesansatt-navn. Legg merke til at samme sti i datamodellen brukes somsimpleBindingpåansatt-alder. - Det andre oppslaget (for å styre
hiddenpå komponentenansatt-alder) bruker[0]på oppslaget i datamodellen. Dette fungerer også, men oppførselen er kanskje uventet; her skjules alle alder-komponenter hvis den første ansatte har navnet Ola Nordmann.
Oppslag direkte på komponent tilsvarer på mange måter et oppslag mot datamodell med dataModel. Et uttrykk som slår opp verdien til en komponent leter etter komponenten og returnerer verdien lagret på komponentens simpleBinding i datamodellen. For øyeblikket støttes ingen andre verdier enn den lagret mot simpleBinding (hvis andre verdier ønskes, må du gå direkte mot dataModel).
Oppslag mot en komponent returnerer derimot null hvis komponenten du slår opp verdien til er skjult (selv om komponenten ellers har tilknyttet data i datamodellen). Dette gjør det til en viss grad mulig å styre visning av en komponent basert på om en annen komponent er vist eller ikke. Hvis komponenten ble funnet på en helt annen (men skjult) side, gir også oppslaget verdien null selv om datamodellen har en verdi tilknyttet komponenten.
I likhet med dataModel vil oppslag mot en komponent-id forsøke å finne komponenten i nærheten av uttrykket i kontekst av repeterende grupper. Det søkes først etter komponenten i gjeldende rad, før det letes oppover i sidestrukturen.
Funksjonen formatDate tar imot en dato som første argument, og et format som andre argument.
Formatargumentet er en valgfri streng som støtter noen tokens i
Unicode Tokens.
Dette er de tokenene vi støtter:
| Enhet | Token | Resultat |
|---|---|---|
| Era | G..GGG | f.Kr., e.Kr. |
| Era | GGGG | før Kristus, etter Kristus |
| Era | GGGGG | f.Kr., e.Kr. |
| År | y | 44, 1, 1900, 2017 |
| År | yy | 44, 01, 00, 17 |
| År | yyy | 044, 001, 1900, 2017 |
| År | yyyy | 0044, 0001, 1900, 2017 |
| Forlenget år | u | -43, 0, 1, 1900, 2017 |
| Forlenget år | uu | -43, 01, 1900, 2017 |
| Forlenget år | uuu | -043, 001, 1900, 2017 |
| Forlenget år | uuuu | -0043, 0001, 1900, 2017 |
| Måned | M | 1, 2,…, 12 |
| Måned | MM | 01, 02,…, 12 |
| Måned | MMM | jan, feb, …, des |
| Måned | MMMM | januar, februar, …, desember |
| Dag i måned | d | 1, 2, …, 31 |
| Dag i måned | dd | 01, 02, …, 31 |
| Ukedag | E..EEE | man, tir, ons, …, søn |
| Ukedag | EEEE | mandag, tirsdag, onsdag, …, søndag |
| Ukedag | EEEEE | M, T, O, …, S |
| AM/PM | a | a.m., p.m. |
| Time [1-12] | h | 1, 2, …, 11, 12 |
| Time [1-12] | hh | 01, 02, …, 11, 12 |
| Time [0-23] | H | 1, 2, …, 22, 23 |
| Time [0-23] | HH | 01, 02, …, 22, 23 |
| Minutt | m | 1, 2, …, 59 |
| Minutt | mm | 01, 02, …, 59 |
| Sekund | s | 1, 2, …, 59 |
| Sekund | ss | 01, 02, …, 59 |
| Brøkdels sekund | S | 0, 1, …, 9 |
| Brøkdels sekund | SS | 00, 01, …, 99 |
| Brøkdels sekund | SSS | 000, 001, …, 999 |
Hvis du ikke gir et format som andre argument, bruker funksjonen et standardformat som varierer basert på gjeldende språk.
Som med alle datoer og tidspunkt, konverteres de til lokal tidssone hvis datoen/tiden har spesifisert en annen tidssone. Dette betyr også at uttrykk som bruker formatDate kan gi forskjellige resultater på frontend og backend hvis tidssonen i nettleseren er forskjellig fra tidssonen på serveren.
Eksempel:
["formatDate", "2023-10-30T14:54:00", "HH:mm"]
Vil resultere i 14:54
linkToPage lager en lenke til en side i skjemaet. De to første argumentene er lenketeksten og ID-en til siden.
["linkToPage", "Oppgi navnet ditt", "page1"]
Funksjonen lager en lenke med denne strukturen:
<a href="/instance/<party-id>/<instance-id>/<TaskId>/page1" data-link-type="LinkToPotentialPage">Oppgi navnet ditt</a>
Appens ruting legger til adressen til appen. I en app uten instans er stien /page1.
Det tredje argumentet, enableBackButton, er valgfritt og har standardverdien false:
["linkToPage", "Oppgi navnet ditt", "page1", true]
Når verdien er true og lenken peker til en annen side, legges backToPage med gjeldende side til i URL-en. Målsiden må ha en NavigationButtons-komponent for å vise knappen som tar brukeren tilbake.
linkToComponent lager en lenke som navigerer til en komponent og gir den fokus. De to første argumentene er lenketeksten og ID-en til komponenten.
["linkToComponent", "Oppgi navnet ditt", "inputMyName"]
Funksjonen lager en lenke med denne strukturen:
<a href="/instance/<party-id>/<instance-id>/<TaskId>/<PageId>?focusComponentId=inputMyName" data-link-type="LinkToPotentialNode">Oppgi navnet ditt</a>
Appens ruting legger til adressen til appen. I en app uten instans begynner stien med sidenavnet. I repeterende grupper tilpasses komponent-ID-en til raden uttrykket brukes i.
Det valgfrie tredje argumentet, enableBackButton, har standardverdien false. Sett det til true for å legge til backToPage når komponenten ligger på en annen side:
["linkToComponent", "Oppgi navnet ditt", "inputMyName", true]
Målsiden må ha en NavigationButtons-komponent for å vise knappen som tar brukeren tilbake.
Denne funksjonen kan brukes til å hente ut ledeteksten/labelen til et svaralternativ i en kodeliste. Teksten blir automatisk oversatt til brukerens valgte språk (hvis ledeteksten er en tekstressurs), så det er ikke nødvendig å sende resultatet gjennom text-funksjonen.
Funksjonen tar to argumenter. Det første argumentet er kodeliste-ID-en, og det andre argumentet er kodeliste-verdien som skal slås opp i kodelisten.
["optionLabel", "countries", "no"]
Sørg for at kodeliste-ID-en er en ren streng, og ikke et uttrykk. Kodeverdien derimot, kan være et uttrykk, for eksempel oppslag fra en sti i datamodellen.
Hvis kodeliste-verdien ikke finnes i kodelisten, returnerer funksjonen null.
Funksjonen henter en verdi fra et eksternt API. Det første argumentet er navnet på klienten (Id i IExternalApiClient). Det andre er stien til verdien, med punktum mellom nivåene og hakeparenteser for plassen i en liste.
["externalApi", "dokumenter", "dokumenter[0].navn"]
Funksjonen returnerer tekst eller null. Lister, objekter, 0, false, tom tekst og stier som ikke finnes, gir null.
Backend kjenner ikke funksjonen ennå og gir en feil når den møter den. Bruk den derfor bare til å vise tekst, ikke i hidden, required, validering, beregninger eller i prosessen. Se Altinn/altinn-studio#21350.
argv-funksjonen kan brukes for å hente ut argumenter som er sendt inn til uttrykket. Dette er foreløpig bare
tilgjengelig for validering vha. uttrykk.
Funksjonen tar ett argument, som er indeksen til argumentet du vil hente ut. Indeksen starter på 0.
["argv", 0]
I likhet med argv er value-funksjonen også en metode for å hente ut argumenter som er sendt inn til uttrykket. Funksjonen kan brukes uten argumenter for å hente ut en verdi, eller med et argument for å hente ut andre typer verdier. Dette er foreløpig tilgjengelig for filtrering av svaralternativer og vil snart være tilgjengelig som et alternativ til argv i validering vha. uttrykk.
["value"]
Dette uttrykket henter ut verdien til svaralternativet (hvis brukt i filtrering av svaralternativer). I andre sammenhenger gir dette uttrykket foreløpig en feilmelding.
["value", "label"]
Uttrykket over henter ut teksten til svaralternativet (hvis brukt i filtrering av svaralternativer). I andre sammenhenger gir dette uttrykket en feilmelding.
Funksjonen plus returnerer summen av de oppgitte tallene. Den kan ta imot et ubegrenset antall ledd.
Eksempel:
["plus", 1, 2]
Dette eksemplet gir tallverdien 3.
Verdien null blir tolket som 0.
Her er noen flere eksempler som viser gyldige kombinasjoner av parametre:
| Uttrykk | Resultat |
|---|---|
["plus", 22, 9.2] | 31.2 |
["plus", 22, 9.2, 8.5, -3] | 36.7 |
["plus", 0, 3] | 3 |
["plus", null, 3] | 3 |
["plus", 3, null] | 3 |
["plus", "22", "9.2"] | 31.2 |
Funksjonen minus returnerer differansen mellom to tall. Den trekker det andre tallet (subtrahenden) fra det første (minuenden).
Eksempel:
["minus", 2, 1]
Dette eksemplet gir tallverdien 1.
Verdien null blir tolket som 0.
Her er noen flere eksempler som viser gyldige kombinasjoner av parametre:
| Uttrykk | Resultat |
|---|---|
["minus", 22, 9.2] | 12.8 |
["minus", 9.2, 22] | -12.8 |
["minus", 0, 3] | -3 |
["minus", null, 3] | -3 |
["minus", 3, null] | 3 |
["minus", "22", "9.2"] | 12.8 |
Funksjonen multiply returnerer produktet av de oppgitte tallene. Den kan ta imot et ubegrenset antall faktorer.
Eksempel:
["multiply", 2, 3]
Dette eksemplet gir tallverdien 6.
Verdien null blir tolket som 0. Det vil si at hvis ett eller flere av parametrene er null, så returnerer funksjonen 0, siden produktet alltid blir 0 når minst én av faktorene er 0.
Her er noen flere eksempler som viser gyldige kombinasjoner av parametre:
| Uttrykk | Resultat |
|---|---|
["multiply", 22, 10] | 220 |
["multiply", -22, 10] | -220 |
["multiply", 22, 10, 0.2, 8] | 352 |
["multiply", 0, 3] | 0 |
["multiply", null, 3] | 0 |
["multiply", 3, null] | 0 |
["multiply", "22", "10"] | 220 |
Funksjonen divide returnerer kvotienten av to tall. Den deler det første tallet (dividenden) på det andre (divisoren).
Eksempel:
["divide", 6, 3]
Dette eksemplet gir tallverdien 2.
Tallet 0 er ikke gyldig som divisor.
Verdien null blir tolket som 0. Det vil si at når første parameter er null, returnerer funksjonen 0, siden en divisjon alltid vil gjøre det når dividenden er 0. Når andre parameter er null, feiler funksjonen på samme måte som med tallet 0 som divisor.
Her er noen flere eksempler som viser gyldige kombinasjoner av parametre:
| Uttrykk | Resultat |
|---|---|
["divide", 22, 10] | 2.2 |
["divide", -22, 10] | -2.2 |
["divide", 22, 0.1] | 220 |
["divide", 0, 3] | 0 |
["divide", null, 3] | 0 |
["divide", "22", "10"] | 2.2 |
Funksjonen object oppretter et objekt av parametrene.
Funksjonen må ha et partall antall parametre, hvor oddetallsparametrene blir til objektets nøkler mens partallsparametrene blir verdiene.
Eksempel:
[
"object",
"navn", "Oslo",
"antallInnbyggere", 724290,
"erHovedstad", true
]
Dette eksemplet returnerer følgende objekt:
{
"navn": "Oslo",
"antallInnbyggere": 724290,
"erHovedstad": true
}
Nøklene må være strenger, mens verdiene kan ha hvilken som helst type.
Funksjonen jmespath kjører en JMESPath-formatert spørring på gitt data og returnerer resultatet.
Den første parameteren er dataen spørringen skal behandle. Den kan ha en hvilken som helst verdi, men for de fleste praktiske formål er det hensiktsmessig at den er et objekt eller en liste med objekter.
Den andre parameteren er spørringen, og den må være en streng. Se den offisielle veiledningen for dokumentasjon om hvordan du skriver spørringen.
Her er et eksempel som lister opp navn på personer bosatt i Oslo:
[
"jmespath",
[
"list",
["object", "navn", "Ola", "bosted", "Oslo"],
["object", "navn", "Kari", "bosted", "Oslo"],
["object", "navn", "Knut", "bosted", "Brønnøysund"],
["object", "navn", "Anne", "bosted", "Leikanger"]
],
"[?bosted=='Oslo'].navn"
]
Dette eksemplet returnerer følgende liste:
["Ola", "Kari"]
I dette eksemplet har vi hardkodet dataen ved hjelp av funksjonene list og object, men dette kan også være data som kommer fra funksjoner som dataModel og component.
Funksjonen count returnerer antallet elementer i en liste.
Eksempel:
[
"count",
["list", 1, 2, 3, 4]
]
Dette uttrykket returnerer tallet 4, siden det er fire elementer i listen.
Funksjonen fungerer med alle typer lister. null-verdier blir også regnet med. Her er et eksempel som også returnerer 4:
[
"count",
["list", "Ola", "Kari", "Knut", null]
]
Funksjonen sum returnerer summen av en liste med tall. Elementer med verdien null i listen blir tolket som 0. Strenger blir konvertert til tall på samme måte som i andre funksjoner som aksepterer tall som parametre. Hvis listen inneholder verdier av andre typer eller strenger som ikke kan konverteres til tall, vil funksjonen feile.
Eksempel:
[
"sum",
["list", 1, 2, 3]
]
Dette eksemplet returnerer tallet 6. Det gjør også dette:
[
"sum",
["list", "1", "2", "3"]
]
Funksjonen average returnerer gjennomsnittet av en liste med tall. Den tar imot to parametre:
- Første parameter er listen med tall. I denne listen blir
nulltolket som 0, mens strenger blir konvertert til tall på samme måte som i andre funksjoner som aksepterer tall som parametre. Hvis listen inneholder verdier av andre typer eller strenger som ikke kan konverteres til tall, vil funksjonen feile. - Andre parameter er en reserveverdi som funksjonen skal returnere dersom listen er tom. Denne verdien kan være
nulleller et tall.
Eksempel:
[
"average",
["list", 2, 2, 7, 5],
null
]
Dette uttrykket returnerer tallet 4, som er gjennomsnittet av de oppgitte tallene. Hadde listen vært tom, ville det returnert null, som er reserveverdien.
Det virker kanskje overflødig å spesifisere en reserveverdi når listen er hardkodet på denne måten. Da vet vi jo at den aldri er tom. Grunnen til at den må være der, er at listen kan være dynamisk, som i dette uttrykket:
[
"average",
["dataModel", "karakterer"],
0
]
Her er det fullt mulig at datamodellfunksjonen returnerer en tom liste. Siden det ikke er mulig å beregne gjennomsnittet av en tom liste, må vi spesifisere hva funksjonen skal returnere i dette tilfellet. I dette eksemplet returnerer den 0.