Sist endret: 29. okt. 2026
Preview: Dette er dokumentasjonen for Altinn Studio v9, som er en forhåndsversjon. Gjeldende versjon er v8. For å se dokumentasjonen for gjeldende versjon, velg v8 i versjonsvelgeren i menyen til venstre.

Regne ut verdier med uttrykk

Slik regner du ut verdier i datamodellen automatisk med dynamiske uttrykk

Med kalkulering med uttrykk regner appen ut verdien til et felt i datamodellen ut fra andre felt, for eksempel en sum eller en differanse. Du skriver reglene i en JSON-fil ved siden av datamodellen, og du trenger ikke å skrive C#-kode.

Slik regner appen ut verdiene

  • Appen regner ut verdiene på serveren hver gang brukeren lagrer, også mens hen fyller ut skjemaet. Brukeren ser de nye verdiene like etter at appen har lagret endringen.
  • Appen regner ut alle skjemadataene i steget brukeren står i, ikke bare dataene brukeren endret.
  • Appen regner også ut felt som er skjult, eller som ligger på en skjult side.
  • Appen hopper over skjemadata som brukeren ikke har lesetilgang til.
  • Appen regner ikke ut verdiene når brukeren åpner skjemaet. Verdiene er derfor ikke oppdatert før brukeren har lagret første gang.
  • Legger brukeren til en ny oppføring i et underskjema, regner appen ut verdiene i oppføringen neste gang brukeren lagrer noe i steget.
  • Oppretter et annet system en instans og sender med skjemadata i samme forespørsel, regner appen ikke ut verdiene i de nye dataene før noen lagrer noe i steget igjen.
  • Stateless-apper lagrer ingen data og regner derfor ikke ut verdier med uttrykk.

Har appen også egne dataprosessorer i C#, regner appen ut uttrykkene etter at prosessorene har kjørt. Se Slik kjører appen flere prosessorer.

Sette opp kalkulering med uttrykk

    Lage filen

    Reglene ligger i en egen fil i mappen App/models, ved siden av datamodellen. Filen heter [datatype-ID].calculation.json, der [datatype-ID] er ID-en til datatypen i applicationmetadata.json. Datatypen beskriver hvilke data appen tar imot, og har som regel samme navn som datamodellen.

    Heter datatypen skjema, har du som regel allerede filene skjema.cs og skjema.schema.json i App/models. Da lager du filen App/models/skjema.calculation.json og bruker dette som utgangspunkt:

    App/models/skjema.calculation.json
    {
      "calculations": {}
    }
    

    Skrive en regel

    Du legger reglene i objektet calculations. Nøkkelen er stien til feltet som skal få verdien, altså hvor feltet ligger i datamodellen, regnet fra toppen av modellen. Verdien er en regel med et expression.

    Eksempelet under regner ut regnskap.sum som inntektene minus utgiftene:

    App/models/skjema.calculation.json
    {
      "calculations": {
        "regnskap.sum": {
          "expression": [
            "minus",
            ["dataModel", "regnskap.inntekter"],
            ["dataModel", "regnskap.utgifter"]
          ]
        }
      }
    }
    

    expression er et dynamisk uttrykk som gir et tall, en sannhetsverdi (true eller false) eller en tekst. Appen gjør om resultatet til typen feltet har i datamodellen. Går ikke det, lar appen feltet stå uendret og skriver en advarsel i loggen.

    Hvert felt kan ha én regel. Trenger du flere betingelser, samler du dem i det samme uttrykket, for eksempel med if.

    Regne ut verdier i repeterende grupper

    Ligger feltet i en repeterende gruppe, regner appen ut verdien for hver rad. Du skriver stien uten radnummer.

    Eksempelet under gir hver rad i varer sin egen sum, ut fra prisen og antallet i den samme raden:

    App/models/skjema.calculation.json
    {
      "calculations": {
        "varer.sum": {
          "expression": [
            "multiply",
            ["dataModel", "varer.pris"],
            ["dataModel", "varer.antall"]
          ]
        }
      }
    }
    

    Teste reglene

    Test reglene lokalt før du publiserer appen:

    1. Fyll ut feltene som regelen bruker, og sjekk at feltet får riktig verdi.
    2. Endre og tøm feltene, og sjekk at verdien blir oppdatert.
    3. Har du regler i repeterende grupper, legger du til og sletter rader og sjekker at hver rad har riktig verdi.

    Bruker et uttrykk en funksjon som ikke finnes, eller feiler uttrykket når appen regner det ut, klarer ikke appen å lagre. Er filen ikke gyldig JSON, hopper appen over alle reglene. Mangler en regel expression, hopper appen over den regelen og kjører de andre. I begge disse tilfellene lagrer appen uten å si fra til brukeren. I alle tilfellene ser du feilen i loggen til appen.

    Du kan ennå ikke sette opp kalkulering med uttrykk i Altinn Studio Designer. Du eller utvikleren din må skrive filen selv, slik det står under Manuelt oppsett.