Sist endret: 15. aug. 2023

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.

    1. Opprett en klasse som implementerer IInstantiationProcessor grensesnittet som ligger i Altinn.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;
          }
      }
      
    2. Registrer din implementering i Program.cs klassen
      services.AddTransient<IInstantiationProcessor, Instantiation>();
      
      Dette sørger for at din kode er kjent for applikasjonen og at koden blir kjørt når den skal.

    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";
        }
    }