Dataprosessering
Hvordan legge til kalkuleringer og annen dataprosessering?
På denne siden:
Dataprosessering kjøres på serveren, og er basert på input fra sluttbruker/skjemadata. Dataprossering kan være kan være rent matematiske kalkuleringer, det kan også være å overføre verdier mellom felter, resultater av API-kall, osv.
Dataprossering kodes i C#, i filen DataProsessingHandler.cs
. Denne filen kan redigeres enklest ved å laste ned kildekoden til app’en og redigere på egen maskin, f.eks. i Visual Studio Code.
Datamodellen med skjemadata er tilgjengelig og kan redigeres/oppdateres etter ønske/behov.
Dataprossering kjøres hver gang data lagres og når data hentes ut fra API. Med auto-lagring på (dette er standard) vil dataprossering kjøres hver gang en bruker har gjort en endring og hopper ut av et felt.
For å sikre optimal opplevelse og kontroll er applikasjonstemplaten to forskjellige hendelser hvor logikk kan plasseres.
- ProcessDataWrite kjøres når data lagres
- ProcessDataRead kjøres når data leses fra databasen
Eksempel på kode fra app som prosesserer og populerer forskjellige data under lagring.
public async Task<bool> ProcessDataWrite(
Instance instance, Guid? dataId, object data)
{
bool edited = false;
if (data is SoknadUnntakKaranteneHotellVelferd model)
{
string org = instance.Org;
string app = instance.AppId.Split("/")[1];
int partyId = int.Parse(instance.InstanceOwner.PartyId);
Guid instanceGuid = Guid.Parse(instance.Id.Split("/")[1]);
// handling mapping of multiple choice velferdsgrunner
if (!string.IsNullOrEmpty(model.velferdsgrunner?.sammenstilling))
{
model.velferdsgrunner.helseproblemer = model.velferdsgrunner.sammenstilling.Contains("helseproblemer");
model.velferdsgrunner.barnefodsel = model.velferdsgrunner.sammenstilling.Contains("barnefodsel");
model.velferdsgrunner.begravelse = model.velferdsgrunner.sammenstilling.Contains("begravelse");
model.velferdsgrunner.naerstaaende = model.velferdsgrunner.sammenstilling.Contains("naerstaaende");
model.velferdsgrunner.adopsjon = model.velferdsgrunner.sammenstilling.Contains("adopsjon");
model.velferdsgrunner.sarligeOmsorg = model.velferdsgrunner.sammenstilling.Contains("sarligeOmsorg");
model.velferdsgrunner.barnAlene = model.velferdsgrunner.sammenstilling.Contains("barnAlene");
model.velferdsgrunner.hjemmeeksamen = model.velferdsgrunner.sammenstilling.Contains("hjemmeeksamen");
model.velferdsgrunner.arbeidunntak = model.velferdsgrunner.sammenstilling.Contains("arbeidunntak");
model.velferdsgrunner.andreVelferdshensyn = model.velferdsgrunner.sammenstilling.Contains("annet");
model.velferdsgrunner.andreVelferdshensynBeskrivelse = model.velferdsgrunner.sammenstilling.Contains("annet") ? model.velferdsgrunner.andreVelferdshensynBeskrivelse : null;
edited = true;
}
else
{
model.velferdsgrunner = null;
}
// set data for receipt if not set
if (string.IsNullOrEmpty(model.applogic?.altinnRef))
{
model.applogic ??= new Applogic();
Party party = await _registerService.GetParty(
int.Parse(instance.InstanceOwner.PartyId));
model.applogic.avsender =
$"{instance.InstanceOwner.PersonNumber}-{party.Name}";
model.applogic.altinnRef = instance.Id.Split("-")[4];
}
}
return await Task.FromResult(edited);
}