Preutfylling av data med egendefinert kode
Hvordan kode egendefinert preutfylling i applikasjonen.
Altinn-apper muliggjør forhåndsutfylling av en instans med egne data, enten det er resultatet av et API-kall, beregninger gjort under instansiering eller annen logikk.
I versjon 7 har vi endret måten preutfylling med egendefinert kode gjøres på. Vi benytter nå dependency injection i stedet for overstyring av metoder. Hvis du tidligere plasserte koden din i DataCreation metoden in InstantiationHandler.cs klassen så vil du erfare at det er mer eller mindre det samme som nå gjøres.
- Opprett en klasse som implementerer
IInstantiationProcessor
grensesnittet som ligger iAltinn.App.Core.Features
navnerommet.
Du kan navngi og plassere filene i den mappestrukturen du selv ønsker i prosjektet ditt. Men vi anbefaler at du benytter meningsfulle navnerom som i et hvilket som helst annet .Net prosjekt. Eksempelet nedenfor populerer feltet Bruker.FulltNavn i modellen Datamodell med verdien “Test Testesen”.using System.Collections.Generic; using System.Threading.Tasks; using Altinn.App.Core.Features; using Altinn.App.Models; using Altinn.Platform.Storage.Interface.Models; public class Instantiation: IInstantiationProcessor { public async Task DataCreation(Instance instance, object data, Dictionary<string, string> prefill) { if (data.GetType() == typeof(Datamodell)) { Datamodell skjema = (Datamodell)data; Bruker b = new Bruker(); b.Navn = new Name(); b.FulltNavn = "Test Testesen"; skjema.Bruker = b; } await Task.CompletedTask; } }
- Registrer din implementering i Program.cs klassenDette sørger for at din kode er kjent for applikasjonen og at koden blir kjørt når den skal.
services.AddTransient<IInstantiationProcessor, Instantiation>();
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";
}
}