Events
Hvordan lage egendefinerte events for en app.
Aktivere generering av events i applikasjonen din
Generering og lagring av events er ikke enablet som default i applikasjonene per 22.10.2020. Det må derfor et manuelt steg til for at applikasjonen din skal generere events.
I filen appsettings.json
i mappen App må følgende legges til i seksjonen AppSettings
"RegisterEventsWithEventsComponent": true
Pushe egendefinerte events i applikasjonen din
Servicen IEvents
er eksponert i applikasjonen og kan dependency injectes
i den klassen der du har behov for å generere et egendefinert event.
Metoden AddEvent krever navnet på eventypen og instansen som input.
Kodeeksempel
I denne seksjonen finner du et eksempel på hvordan man kan generere et egendefinert event ved instansiering av applikasjonen.
Logikken er implementert i InstantiationHandler.cs
using Altinn.App.Services.Interface;
using Altinn.App.PlatformServices.Interface;
using Altinn.App.Services.Models.Validation;
using Altinn.Platform.Storage.Interface.Models;
using System.Threading.Tasks;
// using Altinn.App.Models; // Uncomment this line to refer to app model(s)
namespace Altinn.App.AppLogic
{
public class InstantiationHandler
{
private IProfile _profileService;
private IRegister _registerService;
private IEvents _eventsService;
/// <summary>
/// Set up access to profile and register services
/// </summary>
public InstantiationHandler(IProfile profileService, IRegister registerService, IEvents eventsService)
{
_profileService = profileService;
_registerService = registerService;
_eventsService = eventsService;
}
/// <summary>
/// Run validations related to instantiation
/// </summary>
/// <example>
/// if ([some condition])
/// {
/// return new ValidationResult("[error message]");
/// }
/// return null;
/// </example>
/// <param name="instance"></param>
/// <param name="validationResults"></param>
/// <returns>The validation result object (null if no errors) </returns>
public async Task<InstantiationValidationResult> RunInstantiationValidation(Instance instance)
{
return await Task.FromResult((InstantiationValidationResult)null);
}
/// <summary>
/// Run events related to instantiation
/// </summary>
/// <remarks>
/// For example custom prefill.
/// </remarks>
/// <param name="instance">Instance information</param>
/// <param name="data">The data object created</param>
public async Task DataCreation(Instance instance, object data)
{
await _eventsService.AddEvent("app.test.event", instance);
await Task.CompletedTask;
}
}
}
Den private variabelen for servicen inkluderes i klassen
private IEvents _eventsService;
Namespce for IEvents må inkluderes i klassen. Legg til linjen nedenfor blant de andre using-statements øverst i filen.
using Altinn.App.PlatformServices.Interface;
IEvents servicen dependency injectes inn i klassen. Og den private variabelen blir assignet en verdi.
public InstantiationHandler(IProfile profileService, IRegister registerService, IEvents eventsService) { _profileService = profileService; _registerService = registerService; _eventsService = eventsService; }
I metoden der man har behov for å genere et event kaller man på servicen.
Her har det egendefinerte eventet fått navnet
app.test.event
, i tillegg sendes instansen med. Denne brukes til å populere resterende metadata om eventet.await _eventsService.AddEvent("app.test.event", instance);
Dersom du prøver å bygge løsningen nå vil det feile.
IEvents vil mangle der InstantiationHandler instansieres. Naviger til
App.cs
og dependency inject servicen inn i konstruktøren til App.Videre må tjenesten legges til i kallet der InstantiationHandler instansieres som vist nedenfor.
public App( IAppResources appResourcesService, ILogger<App> logger, IData dataService, IProcess processService, IPDF pdfService, IProfile profileService, IRegister registerService, IPrefill prefillService, IEvents eventsService ) : base(appResourcesService, logger, dataService, processService, pdfService, prefillService) { _logger = logger; _validationHandler = new ValidationHandler(); _calculationHandler = new CalculationHandler(); _instantiationHandler = new InstantiationHandler(profileService, registerService, eventsService); }
Applikasjonen din er nå klar til å generere et egendefinert event under instansiering. Dette er mulig å teste lokalt før det evt. deployes til et testmiljø.