Sist endret: 10. nov. 2024

Preutfylling av data med konfigurasjon

Hvordan konfigurere prefill for en app.

Ved bruk av kun konfigurasjon støtter Altinn apps prefill med data fra Enhetsregisteret, Folkeregisteret og brukerprofil i Altinn.

Ved å følge beskrivelsen nedenfor vil man under instansiering av et skjema preutfylle datamodellen med de definerte verdiene hentet fra Altinns database.

Prefill fra nasjonale register og brukerprofil

Oppsett av prefill i applikasjons repository

Opprett en ny json-fil i app repoet under App/models. Navnet på filen skal inneholde navnet på datamodellen og ha postfix “.prefill.json”. Dersom datamodellen din heter appModel skal du nå kunne finne disse tre filene i mappen: appModel.metadata.json, appModel.schema.json, appModel.prefill.json

Lim inn innholdet nedenfor i filen.

{
    "$schema": "https://altinncdn.no/schemas/json/prefill/prefill.schema.v1.json",
    "allowOverwrite": true,
    "ER": {
    },
    "DSF": {
    },
    "UserProfile": {
    }
}

Konfigurering av prefill.json

  • $schema peker på json schema definisjonen til filen. Nåværende versjon er v1.
    Visual Studio Code vil pga. denne validere og tilby intellisense/autocomplete når du editerer filen lokalt.

  • allowOverwrite avgjør om prefill definert i denne filen kan overskrive et felt i datamodellen dersom det allerede har en verdi.

  • ER her legger man inn felter fra datamodellen som skal preutfylles med data fra enhetsregisteret. Felt som preutfylles med ER-data vil kun få en verdi dersom man instansierer på vegne av en organisasjon. Instansiering vil feile dersom man forsøker å preutfylle ER-data, men ikke har en organisasjon tilgjengelig.

Eksempelet nedenfor vil populere feltet Datamodell.Organisasjon.Organisasjonsnummer med organisasjonsnummeret hentet fra enhetsregisteret.

"ER": {
    "OrgNumber":"Datamodell.Organisasjon.Organisasjonsnummer"
}
  • DSF her legger man inn felter fra datamodellen som skal preutfylles med data fra folkeregistret. Feltet som preutfylles med DSF-data vil kun få en verdi dersom man instansierer på vegne av en person. Instansiering vil feile dersom man forsøker å preutfylle DSF-data, men ikke har en person tilgjengelig.

Eksempelet nedenfor vil populere feltet Datamodell.Person.Nummer med telefonnummer henter fra folkeregistret.

"DSF": {
   "TelephoneNumber":"Datamodell.Person.Nummer"
}
  • UserProfile her legger man inn felter fra datamodellen som skal preutfylles med data fra brukerens profil i Altinn. Merk at det er den innloggede brukeren som instansierer man henter ut data for.

Eksempelet nedenfor vil populere feltet _Datamodell.Bruker.Epost med epost hentet fra brukerens profil i Altinn.

"UserProfile": {
    "Email":"Datamodell.Bruker.Epost"
}

Tilgjengelige prefill verdier

JSON-schema definisjonen av prefill-filen er også tilgjengelig her.
Bruken av et schema gjør at editorer, f.eks. Visual Studio Code, kan validere og tilby intellisense for raskere editering.

Folkeregisteret

Persondata som eksponeres er tilknyttet personen som skjemaet instansieres på vegne av. Dersom Ola Nordman instansierer et skjema på vegne av Kari Nordmann vil det være Kari sine data som eksponeres. Tilgjengelige verdier for prefill inkluderer:

  • SSN
  • Name
  • FirstName
  • MiddleName
  • LastName
  • TelephoneNumber
  • MobileNumber
  • MailingAddress
  • MailingPostalCode
  • MailingPostalCity
  • AddressMunicipalNumber
  • AddressMunicipalName
  • AddressStreetName
  • AddressHouseNumber
  • AddressHouseLetter
  • AddressPostalCode
  • AddressCity

Enhetsregisteret

Enheten som eksponeres er tilknyttet organisasjon som et skjema blir instansiert på vegne av. Tilgjengelige verdier for prefill inkluderer:

  • OrgNumber
  • Name
  • UnitType
  • TelephoneNumber
  • MobileNumber
  • FaxNumber
  • EMailAddress
  • InternetAddress
  • MailingAddress
  • MailingPostalCode
  • MailingPostalCity
  • BusinessAddress
  • BusinessPostalCode
  • BusinessPostalCity

Brukerprofil

Brukerprofilen som eksponeres er profilen til den som instansierer tjenesten. Dersom Ola Nordmann instansierer et skjema på vegne av Kari Nordmann vil data som hentes ut herfra være knyttet til Ola. For objektene Party.Organization og Party.Person vil man finne igjen samme feltene som man ser i ER og DSF-prefill. Merk at Party.Organization vil være null om brukeren er logget inn som en privatperson, og tilsvarende for Party.Person om man er logget inn med en virksomhetsbruker. Preutfyllingen vil feile om objektet man preutfyller fra ikke finnes. Om man ønsker å dynamisk preutfylle basert på disse verdiene må dette settes opp som egendefinert prefill. Tilgjengelige verdier for prefill inkluderer:

  • UserId
  • UserName
  • PhoneNumber
  • Email
  • PartyId
  • Party.PartyId
  • Party.PartyTypeName
  • Party.OrgNumber
  • Party.SSN
  • Party.UnitType
  • Party.Name
  • Party.isDeleted
  • Party.OnlyHierarchyElementWithNoAccess
  • Party.Person
  • Party.Organization
  • Party.ChildParties
  • UserType
  • ProfileSettingPreference.Language
  • ProfileSettingPreference.PreSelectedPartyId
  • ProfileSettingsPreference.DoNotPromptForParty

Egendefinert prefill

Altinn apps muliggjør prefill av en instans med egendefinert data, det være seg resultet fra et API-kall, beregninger gjort under instansiering, eller annen logikk. Dette implementeres i metoden DataCreation i filen InstansiationHandler.cs som finnes i applikasjonsrepoet under App/logic.

Eksempelet nedenfor populerer feltet Bruker.FulltNavn i modellen Datamodell med verdien “Test Testesen”.

public async Task DataCreation(Instance instance, object data)
{
    if (data.GetType() == typeof(Datamodell))
    {
        Datamodell model = (Datamodell)data;
        model.Bruker.FulltNavn = "Test Testesen";
    }
}

Bytt ut Datamodell med navnet på C# klassen som er blitt generert basert på xsd-en som ble lastet opp i Altinn Studio. Dersom du bruker en egnet kodeeditor vil du kunne definere felter som skal populeres ved bruk av intellisense.

Vær oppmerksom på at dersom du har komplekse typer i modellen din, må disse instansieres før man kan tilegne en verdi til ett av typens underelementer. Se eksempel nedenfor der vi legger til grunn at ‘Bruker’ og ‘Name’ er egne C# klasser.

public async Task DataCreation(Instance instance, object data)
{
    if (data.GetType() == typeof(Datamodell))
    {
        Datamodell model = (Datamodell)data;
        Bruker b = new Bruker();
        b.Navn = new Name();
        b.Navn.FulltNavn = "Test Testesen";
    }
}

Instansiering med prefill

Altinn apper støtter instansiering med prefill. Skjemadata legges ved i en multipart i instansieringsrequest som sendes til appen. Nedenfor ser du et eksempel på en request for å instansiere en app med prefill for partyId 12345.

Content-Type: multipart/form-data; boundary="abcdefg"
Body:

--abcdefg
Content-Type: application/json; charset=utf-8
Content-Disposition: form-data; name="instance"

{
    "instanceOwner": {
        "PartyId" : "12345"
    }
}

--abcdefg
Content-Type: application/xml
Content-Disposition: form-data; name="Endring-av-navn"

<?xml version="1.0"?>
<Skjema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" skjemanummer="1533" spesifikasjonsnummer="11172" blankettnummer="RF-1453" tittel="Endring av navn" gruppeid="9308">
<Innledning-grp-9309 gruppeid="9309">
    <NavneendringenGjelderFor-grp-9310 gruppeid="9310">
    <SubjektFornavnFolkeregistrert-datadef-34730 orid="34730">Ola Nordmann</SubjektFornavnFolkeregistrert-datadef-34730>
    </NavneendringenGjelderFor-grp-9310>
    <Kontaktinformasjon-grp-9311 gruppeid="9311">
    <MelderFultnavn orid="34735">LANGØY MADS</MelderFultnavn>
    </Kontaktinformasjon-grp-9311>
</Innledning-grp-9309>
</Skjema>

--abcdefg--