Hendelser
For både integrasjonsbrukere og for applikasjonsbrukere er det hensiktsmessig å kunne abonnere på spesifikke endringer som skjer i databasen, og på den måten slippe å lese ut fulle datasett hyppig. Vi har definert et sett med hendelser som det er mulig å spørre etter. En hendelse er typisk resultatet av en prosess i FS, og/eller en trigger for en prosess i et annet system. Hendelser kan oppstå når noe endres i databasen, for eksempel at et nytt emne er opprettet, eller når en dato har passert, for eksempel startdatoen for en students studierett på et studieprogram.
Hvilke hendelser er tilgjengelige?
Vi har tilgjengeliggjort hendelser for en rekke typer studenter og emner. Disse finner du ved hjelp av følgende spørringer:
- emneSoknadHendelser
- emnehendelser
- emnerollehendelser
- evuKursSoknadHendelser
- evuKursRollehendelser
- evukurshendelser
- klassemedlemskapshendelser
- klasserollehendelser
- kullrollehendelser
- personProfilhendelser
- programStudierettHendelser
- semesterregistreringshendelser
- studenthendelser
- studieprogramhendelser
- timeplanrollehendelser
- undervisningsaktivitetsrollehendelser
- undervisningsenhetsrollehendelser
- undervisningspartiplasseringshendelser
Disse spørringene har en obligatorisk input-parameter som heter hendelsestype.
Du kan bruke GraphQL Voyager eller GraphiQL Explorer for å utforske tilgjengelige hendelsestyper.
Hvilke endringer utløser hendelse?
Normalt forstås det fra navngivingen av typen.
Hvor lang tilbake i tid kan jeg spørre etter hendelser?
Hendelser tas vare på i 7 d øgn. Gamle hendelser ryddes bort én gang i døgnet.
Hvordan spør jeg etter hendelser?
Hendelsene er tilgjengelige som paginerte spørringer. Les mer om paginerte spørringer her. For å følge med på hendelser, må du lage
en spørring der du angir de hendelsestypene du er interessert i å følge med på. Nye hendelser legges alltid til på slutten av lista. Det betyr at hvis
du tar vare på endCursor-verdien fra spørringen din, kan du bruke den som input til after-argumentet neste gang du spør for å få nye hendelser
siden sist.
I hendelsesspørringen vil du alltid kunne velge inn tidspunkt for når hendelsen inntraff. For emnehendelser vil du i tillegg alltid kunne velge å få tilbake det endrede emnet, og studenthendelser vil alltid kunne returnere den endrede studenten. Hver enkelt hendelse kan i tillegg til disse returnere felter som er spesifikke for den hendelsen.
Dataene som returneres fra spørringen vil alltid være gjeldende tilstand. Det vil si at hvis en student har endret adresse flere ganger siden sist du spurte, vil du få tre adresseendringshendelser, men alle tre vil returnere adressen slik den er på spørretidspunktet.
Når du bygger opp hendelsesspørringen, bør du altså ta stilling til:
- Hvilke hendelser er jeg interessert i
- Hvilke data trenger jeg å hente fra APIet når hver enkelt hendelse inntreffer
Studenthendelser støtter spørringer på flere hendelsestyper samtidig. Gjør du det, må du be om feltet hendelsestype for å skille mellom dem. Emnehendelser
har foreløpig kun støtte for å be om én hendelsestype av gangen. Du bruker inline fragments for å
definere hvilke felter du skal ha med for hver hendelse.
Her er et eksempel på en hendelsesspørring som ber om navneendringer, sluttet på studieprogram og dødsfall:
query Hendelser {
studenthendelser(
filter: {
eierInstitusjonsnummer: "1234",
hendelsestype: [ENDRET_NAVN, SLUTTET_PA_STUDIEPROGRAM, DODSFALL]
}
) {
edges {
cursor
node {
id
tidspunkt
hendelsestype
... on StudentEndretNavn {
student {
id
personProfil {
fornavn
etternavn
}
}
}
... on StudentSluttetPaStudieprogram {
programStudierett {
id
}
}
... on StudentDodsfall {
student {
id
}
}
}
}
}
}
Eksempel på emnehendelsesspørring:
query EndredeEmner {
emnehendelser(eierinstitusjonsnummer: "1234", hendelsestype: EMNE_ENDRET, after: "MTk1OjEyMzQsNjE") {
pageInfo {
hasNextPage
endCursor
}
edges {
cursor
node {
... on EmneEndret {
emne {
id
emnetype
}
}
}
}
}
}
Denne spørringen gir følgende resultat:
{
"data": {
"emnehendelser": {
"pageInfo": {
"hasNextPage": false,
"endCursor": "MTk1OjEyMzQsODE"
},
"edges": [
{
"cursor": "MTk1OjEyMzQsODE",
"node": {
"emne": {
"id": "MjA6MTIzNCwxODUsTVNFTU5FOTBLT1BJLDE",
"emnetype": "VURDERING"
}
}
}
]
}
}
}