Sist endret: 12. apr. 2024

Dynamikk

Brukerveiledning for å sette opp dynamikk i skjema i Altinn Studio

Denne dokumentasjonen vil beskrive hvordan du kan sette opp dynamikk i skjema ved å sette opp uttrykk med dynamikkverktøyet i Altinn Studio.

Uttrykk er et begrep i Altinn-tjenester som lar tjenesteutviklere dynamisk tildele verdier til ulike elementer. Les mer her om hva uttrykk kan brukes til og hvordan syntaksen fungerer.

Terminologi

I Altinn Studio kalles konseptet for logikk, der et uttrykk omtales som en logikkregel.

En enhet som består av et boolsk komponentfelt og det faktiske uttrykket som vil bli evaluert til å være en boolsk verdi når det beregnes i en kjørende app. Det enkleste uttrykket kan bestå av et enkelt underuttrykk, mens et mer avansert uttrykk kan bestå av flere underuttrykk kombinert med en operator.

En komponent i et skjema har mange forskjellige egenskaper som kan konfigureres. Det er disse vi snakker om her. Eksempler på egenskaper på en komponent som kan settes dynamisk via uttrykk er:

  • Feltet skal skjules (hidden)
  • Feltet skal være skrivebeskyttet (readOnly)
  • Det skal være påkrevd å fylle ut feltet (required)

Et begrep som brukes for å omtale den mest elementære enheten i et uttrykk. Et underuttrykk består av en funksjon og to verdier, der en verdi kan være et enkelt element eller et sammensatt element der den første delen av elementet definerer en kilde hvor den etterfulgte verdien kan bli funnet.

F.eks.:

["equals", "a", "b"]

er et underuttrykk, som sjekker om verdien "a" og verdien "b" er like ved hjelp av funksjonen "equals". Dette underuttrykket evaluerer til den boolske verdien “usann” (false), fordi “a” og “b” er ulike.

Verdi som skal brukes i et underuttrykk. Kan være:

  • Tall: En fastsatt tallverdi
  • Tekst: En fastsatt tesktverdi
  • Sann/usann
  • Komponent: Verdi som er satt i en bestemt skjemakomponent
  • Datamodell: Verdi som er satt i et bestemt datamodellfelt
  • Instanskontekst: Verdi som er hentet fra et bestemt felt fra metadata om tjenesten.
  • Ikke satt: Tomt felt, ingen verdi er satt.

Funksjon som sier hvordan de to operandene skal sammenlignes. F.eks:

  • Er lik
  • Er ikke lik
  • Er større enn
  • Er mindre enn

Brukes til å sette sammen flere underuttrykk.

  • OG: Alle underuttrykkene må være oppfylt samtidig.
  • ELLER: Minst ett av underuttrykkene må være oppfylt.

Bygging av uttrykk i Altinn Studio

Fremgangsmåten under tar utgangspunkt i at du er:

  • Inne på “Lage”-siden for en tjeneste
  • Har åpnet en side i skjemaet og valgt en komponent du ønsker å konfigurere dynamikk for
  • Har åpnet “Dynamikk”-seksjonen i konfigurasjons-panelet

Utgangspunktet for fremgangsmåten
Utgangspunktet for fremgangsmåten

Eksempelet som brukes i veiledningen under baserer seg på følgende skjema:

Eksempel-skjema for oppsett av dynamikk
Eksempel-skjema for oppsett av dynamikk

Oppgaven:

I dette skjemaet ønsker vi kun å tillate innsending dersom bruker har fylt ut feltet “Alder”, og verdien er større eller lik 18. I alle andre tilfeller ønsker vi derfor å skjule “Send inn”-knappen.

Grunnleggende uttrykk

  1. Klikk på “Lag en ny logikkregel” og velg hva som skal skje med komponenten. I eksempelet med en knappe-komponent er det eneste alternativet “Skjul felt dersom”:

    Lag ny logikkregel og velg hva som skal skje med komponenten
    Lag ny logikkregel og velg hva som skal skje med komponenten

  2. Velg “Legg til underuttryk” for å begynne å bygge opp uttrykket

    Legg til underuttrykk
    Legg til underuttrykk

    Et nytt underuttrykk blir da lagt til.

  3. Klikk på “Endre” for å redigere underuttrykket

    Klikk på “Endre”
    Klikk på Endre

  4. Vi skal nå sjekke om verdien i feltet “Alder” er mindre enn 18.

    • I Første operand skal vi velge datamodellfeltet alder som verdi. Dette gjør vi ved å velge “Datamodell” fra listen som heter “Type”, og feltet “alder” fra listen som heter “Datamodellfelt”.
      Velg datamodellfeltet “alder” som første operand
      Velg datamodellfeltet alder som første operand
    • I Operator skal vi velge funksjonen “er mindre enn”.
      Velg operator “mindre enn”
      Velg operator mindre enn
    • I Andre operand skal vi velge verdien vi skal sammenligne mot. I dette tilfellet et tall (velg “Tall” i Type-listen) som har verdi 18 (skriv inn 18 i Verdi-feltet).
      Sett verdien vi skal sammenligne mot
      Sett verdien vi skal sammenligne mot
  5. Klikk på “Lagre og lukk” for å lagre underuttrykket.

    Klikk på “Lagre og lukk”
    Klikk på Lagre og lukk

  6. Vi skal nå sjekke om feltet “Alder” er tomt. Klikk på “Legg til underuttrykk” og påse at det nye underuttrykket er satt opp med en OG-kobling til det første uttrykket for å sikre at begge må oppfylles. Følg stegene i punkt 4 på nytt, men:

  • I Operator, velg “Er lik” i stedet for “Mindre enn”
  • I Andre operand, velg “Ikke satt” i stedet for “Datamodell” i type-listen. Det skal ikke settes opp noe mer på den andre operanden.

    Gjenta oppsettet for det andre underuttrykket

  1. Test dynamikk i forhåndsvisningen og se at:
    • “Send inn”-knappen er skjult når det ikke står noe i “Alder”-feltet
    • Dersom du skriver inn f.eks. 20 i feltet “Alder”, så dukker “Send inn”-knappen opp
    • Dersom du skriver inn f.eks. 12 i felter “Alder” så blir “Send inn”-knappen borte

Begrensninger

Som nevnt er det noen begrensninger i Studio-verktøyet for konfigurasjon av uttrykk.

Tilgjengelige komponentfelter

For det første er det bare noen komponentfelter som Studio kan tolke og bygge tilknyttede uttrykk for. På et senere utviklingsstadium vil vi gjøre det mulig å bygge og tolke uttrykk knyttet til

  • tekstreseursbindinger på komponenter
  • prosess

Nøsting

For det andre er Studio begrenset til å bygge uttrykk med bare ett nivå av nøsting. Dette betyr at en verdi i et underuttrykk kun kan være enten en implisitt eller eksplisitt verdi, og ikke et underuttrykk. Hvis verdien er et underuttrykk, vil du ende opp med et “komplekst” uttrykk som i eksempelet ovenfor.

Eksisterende boolske egenskaper går tapt når uttrykk legges til

Hvis du har definert noen av de booleanske egenskapene/feltene på komponenten til å ha en boolsk verdi, true eller false, og du kobler et uttrykk til det, vil ikke Studio huske denne verdien. Dette betyr at hvis du legger til et uttrykk på et felt som opprinnelig hadde en boolsk verdi, og deretter sletter uttrykket, vil feltet forsvinne fra komponenten og bli vurdert til sin standardverdi.

Hva er et gyldig uttrykk sett fra Studios synspunkt

For å tillate lagring av et uttrykk i layoutfilen, vil Studio bare visualisere Lagre-knappen når noen gitte betingelser gjelder:

  1. Du har valgt en komponentegenskap/felt som uttrykket skal være tilknyttet til
  2. Du har valgt en funksjon for det første deluttrykket i uttrykket ditt

Når disse betingelsene er oppfylt, kan du lagre uttrykket uten å fylle inn noen av verdiene. Dette vil legge til et uttrykk som ser slik ut i den gitte komponentfeltet:

"[KOMPONENTEGENSKAP]": [
"[FUNKSJON]",
null,
null
]