Fra FSWS-CRUD til FS GraphQL API
FSWS CRUD API er en tjeneste som er under utfasing og erstattes av FS GraphQL API. Dette er en guide for å migrere fra FSWS CRUD API til FS GraphQL API. Listen med eksempler under er ikke komplett. Ta kontakt med fs-support@sikt.no dersom du trenger hjelp til å finne en spørring eller en mutasjon som passer ditt behov.
Forskjeller og likheter
Både FSWS-CRUD og FS GraphQL API tar imot forespørsler i form av POST-kall. FSWS-CRUD tar imot payloaden i form av XML som parameter i POST-kallet. FS GraphQL API tar imot spørringer i GraphQL-spørrespråket i payloaden til POST-kallet. Der FSWS-CRUD har ett endepunkt for SELECTMANY og ett for UPSERT, har FS GraphQL API ett endepunkt for alle forespørsler. Der FSWS-CRUD bruker samme skjema for SELECTMANY og UPSERT, vil skjema for spørringer og skjema for mutasjoner i GraphQL ofte være forskjellig.
SELECTMANY
For å migrere fra SELECTMANY i FSWS-CRUD til FS GraphQL API, må du utforske APIet for å finne en passende spørring. Du vil ofte finne en spørring som gir omtrent samme data med omtrent samme filtreringsmuligheter i FS GraphQL API. Der FSWS-CRUD ofte krever at du slår opp sekvensielt mot én tabell av gangen for å bygge opp datasettet ditt, vil du i FS GraphQL API kunne bygge opp nøstede spørringer som henter hele datasettet. Eksemplene under viser GraphQL-spørringer som tilsvarer SELECTMANY-spørringer mot enkelte tabeller i FSWS-CRUD. Vi anbefaler at du bruker disse som utgangspunkt for å konstruere nøstede spørringer. Der du i FSWS-CRUD kan hente et stort antall rader i ett kall, må du i FS GraphQL API ofte paginere spørringen for å hente alle radene.
Filtrering: I FSWS-CRUD filtrerer du ved å sende kolonneverdier som XML-elementer (f.eks. <Institusjonsnr>, <Arstall>), og du kan filtrere på de fleste kolonnene i tabellen.
I FS GraphQL API har hver spørring et typet filter-objekt med navngitte felt.
Filterfeltene mapper ikke nødvendigvis en-til-en med databasekolonner, men er designet for vanlige bruksmønster.
I tillegg tilbyr FS GraphQL API egne oppslag-spørringer for direkte oppslag på identifikatorer (f.eks. studenterGittFodselsnumre, personProfilerGittFeideBrukere).
Bruk introspeksjon eller dokumentasjonen for å utforske tilgjengelige filterfelter for hver spørring.
SELECTMANY Emne
Eksempel på GraphQL-kall som henter emner:
query Emner {
query Emner {
emnerV2(
filter: {eierOrganisasjonskode: "1234"},
first: 10) {
edges {
node {
id
kode
navnAlleSprak {
nb
nn
en
se
}
}
}
pageInfo {
hasNextPage
endCursor
}
}
}
}
Eksempel på svar:
{
"data": {
"emnerV2": {
"edges": [
{
"node": {
"id": "MjA6MTIzNCwxNTAsMUJBLTExMSwx",
"kode": "1BA-111",
"navnAlleSprak": {
"nb": "Bevegelseslære bokmål",
"nn": "Bevegingslære",
"en": "The Science of Movement",
"se": null
}
}
},
{
"node": {
"id": "MjA6MTIzNCwxNTAsMUJBLTExMywx",
"kode": "1BA-113",
"navnAlleSprak": {
"nb": "Treningslære",
"nn": null,
"en": null,
"se": null
}
}
},
{
"node": {
"id": "MjA6MTIzNCwxNTAsMUJBLTEyMSwx",
"kode": "1BA-121",
"navnAlleSprak": {
"nb": "Idrett og samfunn",
"nn": null,
"en": null,
"se": null
}
}
},
{
"node": {
"id": "MjA6MTIzNCwxNTAsMUJBLTEyMSwy",
"kode": "1BA-121",
"navnAlleSprak": {
"nb": "Idrett og samfunn",
"nn": null,
"en": null,
"se": null
}
}
},
{
"node": {
"id": "MjA6MTIzNCwxNTAsMUJBLTEyMSwz",
"kode": "1BA-121",
"navnAlleSprak": {
"nb": "Idrett og samfunn",
"nn": null,
"en": null,
"se": null
}
}
},
{
"node": {
"id": "MjA6MTIzNCwxNTAsMUJBLTEzNSwx",
"kode": "1BA-135",
"navnAlleSprak": {
"nb": "Ballspill",
"nn": null,
"en": null,
"se": null
}
}
},
{
"node": {
"id": "MjA6MTIzNCwxNTAsMUJBLTEzNiwx",
"kode": "1BA-136",
"navnAlleSprak": {
"nb": "Andre aktiviteter",
"nn": null,
"en": null,
"se": null
}
}
},
{
"node": {
"id": "MjA6MTIzNCwxNTAsMUJBLTEzNywx",
"kode": "1BA-137",
"navnAlleSprak": {
"nb": "Uteaktiviteter",
"nn": null,
"en": null,
"se": null
}
}
},
{
"node": {
"id": "MjA6MTIzNCwxNTAsQUtUMjAyLTEsMQ",
"kode": "AKT202-1",
"navnAlleSprak": {
"nb": "Aktivitetslære",
"nn": null,
"en": "Physical Activity Education",
"se": null
}
}
},
{
"node": {
"id": "MjA6MTIzNCwxNTAsRkFIMzQyLDE",
"kode": "FAH342",
"navnAlleSprak": {
"nb": "Aktivitetsformidling III: Aktiviteter i sal",
"nn": null,
"en": null,
"se": null
}
}
}
],
"pageInfo": {
"hasNextPage": true,
"endCursor": "WzEyMzQsMTUwLCJGQUgzNDIiLCIxIl0"
}
}
}
}
SELECTMANY Fagperson
"Fagperson" finnes som egen type i FS GraphQL API. Du kan hente fagpersoner med rot-spørringen fagpersoner:
query Fagpersoner {
fagpersoner(
filter: { eierOrganisasjonskode: "1234" }
first: 3
) {
nodes {
id
personProfil {
fodselsnummer
navn {
fornavn
etternavn
}
}
erAktiv
ansattVed {
navnAlleSprak {
nb
}
}
}
}
}
Eksempel på svar:
{
"data": {
"fagpersoner": {
"nodes": [
{
"id": "MzE6MTIzNCw4ODM",
"personProfil": {
"fodselsnummer": "XXXXXXXXXXX",
"navn": {
"fornavn": "Njål",
"etternavn": "Øye"
}
},
"erAktiv": true,
"ansattVed": {
"navnAlleSprak": {
"nb": "Det medisinske fakultet, UiB"
}
}
},
{
"id": "MzE6MTIzNCw4ODQ",
"personProfil": {
"fodselsnummer": "XXXXXXXXXXX",
"navn": {
"fornavn": "Kristian",
"etternavn": "Vennemo"
}
},
"erAktiv": true,
"ansattVed": {
"navnAlleSprak": {
"nb": "Det medisinske fakultet, UiB"
}
}
},
{
"id": "MzE6MTIzNCw4ODU",
"personProfil": {
"fodselsnummer": "XXXXXXXXXXX",
"navn": {
"fornavn": "Monica Blide",
"etternavn": "Blidensol"
}
},
"erAktiv": true,
"ansattVed": {
"navnAlleSprak": {
"nb": "Det medisinske fakultet, UiB"
}
}
}
]
}
}
}
Filtrering: fagpersoner støtter filtrering på aktiv, permisjon, campus, fagpersonkategorier, fodselsnumre og inkluderAvdode.
For direkte oppslag kan du bruke fagpersonerGittFodselsnumre eller fagpersonerGittPersonlopenumre.
SELECTMANY Kullklassestudent
"Kullklassestudent" heter "klassemedlemskap" i FS GraphQL API.
Eksempel på spørring som henter ut alle studenter med aktive medlemskap i en klasse (se SELECTMANY Kullklasse over for eksempel på hvordan du finner ID for en klasse):
query studenterIKlasse {
klassemedlemskap(
filter:{
klasser:["NTk6MTIzNCwzMCwxOTk1LEjDmFNULDMwM0sx"],
erAktiv: true
}
first: 10
) {nodes {
id
studentVedLarested {
id
studentnummer
}
}}}
Eksempel på svar:
{
"data": {
"klassemedlemskap": {
"nodes": [
{
"id": "NjA6MTIzNCw5NTMsMzAsSMOYU1QsMTk5NSxIw5hTVCwxOTk1LDMwM0sx",
"studentVedLarested": {
"id": "OTk6MTIzNCw5NTM",
"studentnummer": "000052"
}
},
{
"id": "NjA6MTIzNCw5NTQsMzAsSMOYU1QsMTk5NSxIw5hTVCwxOTk1LDMwM0sx",
"studentVedLarested": {
"id": "OTk6MTIzNCw5NTQ",
"studentnummer": "000054"
}
},
{
"id": "NjA6MTIzNCw5NTUsMzAsSMOYU1QsMTk5NSxIw5hTVCwxOTk1LDMwM0sx",
"studentVedLarested": {
"id": "OTk6MTIzNCw5NTU",
"studentnummer": "000055"
}
},
{
"id": "NjA6MTIzNCw5NTYsMzAsSMOYU1QsMTk5NCxIw5hTVCwxOTk1LDMwM0sx",
"studentVedLarested": {
"id": "OTk6MTIzNCw5NTY",
"studentnummer": "000056"
}
},
{
"id": "NjA6MTIzNCw5NTcsMzAsSMOYU1QsMTk5NSxIw5hTVCwxOTk1LDMwM0sx",
"studentVedLarested": {
"id": "OTk6MTIzNCw5NTc",
"studentnummer": "000057"
}
},
{
"id": "NjA6MTIzNCw5NTgsMzAsSMOYU1QsMTk5NSxIw5hTVCwxOTk1LDMwM0sx",
"studentVedLarested": {
"id": "OTk6MTIzNCw5NTg",
"studentnummer": "000059"
}
},
{
"id": "NjA6MTIzNCw5NTksMzAsSMOYU1QsMTk5NSxIw5hTVCwxOTk1LDMwM0sx",
"studentVedLarested": {
"id": "OTk6MTIzNCw5NTk",
"studentnummer": "000060"
}
},
{
"id": "NjA6MTIzNCw5NjAsMzAsSMOYU1QsMTk5NSxIw5hTVCwxOTk1LDMwM0sx",
"studentVedLarested": {
"id": "OTk6MTIzNCw5NjA",
"studentnummer": "000061"
}
},
{
"id": "NjA6MTIzNCw5NjEsMzAsSMOYU1QsMTk5NSxIw5hTVCwxOTk1LDMwM0sx",
"studentVedLarested": {
"id": "OTk6MTIzNCw5NjE",
"studentnummer": "000062"
}
},
{
"id": "NjA6MTIzNCw5NjIsMzAsSMOYU1QsMTk5NSxIw5hTVCwxOTk1LDMwM0sx",
"studentVedLarested": {
"id": "OTk6MTIzNCw5NjI",
"studentnummer": "000063"
}
}
]
}
}
}
SELECTMANY Person
"Person" heter "PersonProfil" i FS GraphQL API. Du kan hente personprofiler med rot-spørringen personProfiler:
query PersonProfiler {
personProfiler(
filter: { eierOrganisasjonskode: "1234" }
first: 3
) {
nodes {
id
fodselsnummer
navn {
fornavn
etternavn
}
kjonn
privatEpost
institusjonsEpost
feideBruker
folkeregistrertAdresse {
gate
postnummerOgSted
land
}
}
}
}
Eksempel på svar:
{
"data": {
"personProfiler": {
"nodes": [
{
"id": "NzY6MTIzNCw4ODE",
"fodselsnummer": "XXXXXXXXXXX",
"navn": {
"fornavn": "Bugg Hubba",
"etternavn": "Bubba"
},
"kjonn": "MANN",
"privatEpost": "epost2121@test.com",
"institusjonsEpost": "epost2121@test.com",
"feideBruker": "pentest@spusers.feide.no",
"folkeregistrertAdresse": {
"gate": "Gågata 3",
"postnummerOgSted": "0123 Oslo",
"land": "Norge"
}
},
{
"id": "NzY6MTIzNCw4ODI",
"fodselsnummer": "XXXXXXXXXXX",
"navn": {
"fornavn": "Inga-Lill",
"etternavn": "Nådland"
},
"kjonn": "KVINNE",
"privatEpost": "epost2313@test.com",
"institusjonsEpost": null,
"feideBruker": "10604490001@spusers.feide.no",
"folkeregistrertAdresse": {
"gate": "Gågata 4b",
"postnummerOgSted": "0123 Oslo",
"land": "Norge"
}
},
{
"id": "NzY6MTIzNCw4ODM",
"fodselsnummer": "XXXXXXXXXXX",
"navn": {
"fornavn": "Njål",
"etternavn": "Øye"
},
"kjonn": "MANN",
"privatEpost": "bruker@example.com",
"institusjonsEpost": null,
"feideBruker": "11616090366@spusers.feide.no",
"folkeregistrertAdresse": {
"gate": "Gågata 3",
"postnummerOgSted": "0123 Oslo",
"land": "Norge"
}
}
]
}
}
}
Filtrering: personProfiler støtter blant annet filtrering på fodselsnumre, fodselsdatoer, epostadresser, freeText (fritekstsøk), statsborgerskapkategori, statsborgerskapILand, programStudieretter, startterminer, erSemesterregistrertIInnevarendeSemester, harBetaltSemesteravgiftIInnevarendeSemester, erIPermisjonNaa og inkluderAvdode.
For direkte oppslag kan du bruke personProfilerGittFodselsnumre, personProfilerGittFeideBrukere, personProfilerGittPersonlopenumre eller personProfilerGittAnsattnumre.
Mapping: PERSON → PersonProfil
| DB-felt (PERSON) | GraphQL-type | GraphQL-felt | Merknad |
|---|---|---|---|
Fodselsdato | PersonProfil | fodselsdato: Date | Fullt 11-sifret FNR via PERSON_FODSELSNUMMER |
Personnr | PersonProfil | fodselsnummer: String | Fullt 11-sifret FNR via PERSON_FODSELSNUMMER |
Etternavn | Personnavn | navn.etternavn: String | Nøstet under PersonProfil.navn |
Fornavn | Personnavn | navn.fornavn: String | Nøstet under PersonProfil.navn |
Kjonn | PersonProfil | kjonn: Kjonn! | Enum: MANN, KVINNE |
Landnr_Hjemland | Statsborgerskap | Via statsborgerskap.land: Land | Egen type |
Adrlin1_Hjemsted | FolkeregistrertAdresse | folkeregistrertAdresse.co | |
Adrlin2_Hjemsted | FolkeregistrertAdresse | folkeregistrertAdresse.gate | |
Adrlin3_Hjemsted | FolkeregistrertAdresse | folkeregistrertAdresse.postnummerOgSted | |
Adresseland_Hjemsted | FolkeregistrertAdresse | folkeregistrertAdresse.land | |
Postnr_Hjemsted | FolkeregistrertAdresse | folkeregistrertAdresse.postnummerOgSted | |
Emailadresse_Privat | PersonProfil | privatEpost: String | @field(name: "EMAILADRESSE_PRIVAT") |
Studentgrunnlagkode | — | Ikke eksponert | |
Emailadresse | PersonProfil | institusjonsEpost: String | @field(name: "EMAILADRESSE") |
Status_Dod | PersonProfil | erDod: Boolean | @field(name: "STATUS_DOD") |
Brukernavn | PersonProfil | feideBruker: String | @field(name: "FEIDE_BRUKER") |
Ansattnr | PersonProfil | ansattnummer: String | @field(name: "ANSATTNR") |
SELECTMANY Persontelefon
Persontelefon har ikke en egen rot-spørring i FS GraphQL API. Telefonnumre er i stedet nøstet som felter på PersonProfil (mobilTelefon, privatTelefon).
Du henter telefonnumre ved å inkludere disse feltene i en personProfiler-spørring:
query PersonerMedTelefon {
personProfiler(
filter: { eierOrganisasjonskode: "1234" }
first: 3
) {
nodes {
id
fodselsnummer
navn {
fornavn
etternavn
}
mobilTelefon {
landnummer
nummer
}
privatTelefon {
landnummer
nummer
}
}
}
}
Eksempel på svar:
{
"data": {
"personProfiler": {
"nodes": [
{
"id": "NzY6MTIzNCw4ODE",
"fodselsnummer": "XXXXXXXXXXX",
"navn": {
"fornavn": "Bugg Hubba",
"etternavn": "Bubba"
},
"mobilTelefon": null,
"privatTelefon": null
},
{
"id": "NzY6MTIzNCw4ODI",
"fodselsnummer": "XXXXXXXXXXX",
"navn": {
"fornavn": "Inga-Lill",
"etternavn": "Nådland"
},
"mobilTelefon": null,
"privatTelefon": null
},
{
"id": "NzY6MTIzNCw4ODM",
"fodselsnummer": "XXXXXXXXXXX",
"navn": {
"fornavn": "Njål",
"etternavn": "Øye"
},
"mobilTelefon": null,
"privatTelefon": null
}
]
}
}
}
Filtrering: Telefonnumre hentes som en del av PersonProfil, så filtrering skjer via personProfiler-filteret (se over).
Det er ikke mulig å filtrere spesifikt på telefonnummer.
Mapping: PERSONTELEFON → Telefon
| DB-felt (PERSONTELEFON) | GraphQL-type | GraphQL-felt | Merknad |
|---|---|---|---|
Fodselsdato + Personnr | — | Tilgang via PersonProfil | |
Telefonnrtypekode | — | Implisitt | mobilTelefon, privatTelefon, arbeidsTelefon (eksp.) |
Telefonlandnr | Telefon | landnummer: String | med +-prefiks |
Telefonnr | Telefon | nummer: String | |
Landnr | — | Ikke eksponert |
SELECTMANY Soknad
Det finnes to måter å hente søknader i FS GraphQL API:
- Via rot-spørringen
sisSoknader(eksperimentell) - for å hente søknader filtrert på opptak og/eller personprofiler - Via
PersonProfil.fsSoknader- for å hente søknader for en gitt person
Alternativ 1: Rot-spørring sisSoknader
Eksempel på spørring som henter søknader for et gitt opptak:
query SoknaderForOpptak {
sisSoknader(
filter: {
eierOrganisasjonskode: "1234"
opptak: ["<opptakId>"]
}
first: 10
) {
edges {
node {
id
sokernummer
opptak {
id
opptakstype {
kode
navnAlleSprak {
nb
nn
en
}
}
termin {
arstall
betegnelse {
kode
}
}
}
personProfil {
navn {
fornavn
etternavn
}
mobilTelefon {
landnummer
nummer
}
}
}
}
pageInfo {
hasNextPage
endCursor
}
}
}
Du kan også kombinere filtre for å hente søknader for bestemte personer innenfor et opptak:
query SoknaderForPersonerIOpptak {
sisSoknader(
filter: {
eierOrganisasjonskode: "1234"
opptak: ["<opptakId>"]
personProfiler: ["<personProfilId1>", "<personProfilId2>"]
}
first: 10
) {
edges {
node {
id
sokernummer
personProfil {
navn {
fornavn
etternavn
}
}
}
}
}
}
Alternativ 2: Via PersonProfil.fsSoknader
Eksempel på spørring som henter søknader for en person med et gitt fødselsnummer:
query SoknaderForPerson {
personProfilerGittFodselsnumre(
eierOrganisasjonskode: "1234"
fodselsnumre: ["12345678901"]
) {
id
navn {
fornavn
etternavn
}
mobilTelefon {
landnummer
nummer
}
fsSoknader(filter: { opptak: ["<opptakId>"] }) {
edges {
node {
id
sokernummer
opptak {
id
opptakstype {
kode
navnAlleSprak {
nb
}
}
termin {
arstall
betegnelse {
kode
}
}
}
}
}
}
}
}
Mapping: SOKNAD → FsSoknad / FsOpptak
| DB-felt (SOKNAD) | GraphQL-type | GraphQL-felt | Merknad |
|---|---|---|---|
Arstall | Termin | FsOpptak.termin.arstall: Int | Via FsSoknad.opptak.termin |
Opptakstypekode | FsOpptakstype | FsOpptak.opptakstype.kode | Via FsSoknad.opptak.opptakstype (eksp.) |
Fodselsdato + Personnr | PersonProfil | Via PersonProfil.fsSoknader | Tilgang til søknader via PersonProfil |
Regnr | FsSoknad | sokernummer: String | |
Opptaksprovestatuskode | FsSoknad | opptaksprovestatus (eksp.) | Eksperimentelt felt |
Terminkode | Terminbetegnelse | FsOpptak.termin.betegnelse.kode | |
Opptorgankode_B_Rolle | FsSoknad | behandlendeLarested (eksp.) | Eksperimentelt felt, gir Organisasjon |
SELECTMANY Soknadsalternativ
Soknadsalternativ har ikke en egen rot-spørring i FS GraphQL API. Soknadsalternativer er nøstet under FsSoknad.soknadsAlternativer.
Du henter soknadsalternativer ved å inkludere feltet i en sisSoknader-spørring:
query Soknadsalternativer {
sisSoknader(
filter: { eierOrganisasjonskode: "1234" }
first: 2
) {
nodes {
id
sokernummer
soknadsAlternativer {
nodes {
id
prioritet
soknadTil {
studietypenummer
navnAlleSprak {
nb
}
}
tilbudstatus {
kode
}
}
}
}
}
}
Eksempel på svar:
{
"data": {
"sisSoknader": {
"nodes": [
{
"id": "OTU6MTIzNCw5MDAsSlVNQU9QUFRBSywyMDA3LEjDmFNU",
"sokernummer": null,
"soknadsAlternativer": {
"nodes": [
{
"id": "OTY6MTIzNCw5MDAsSlVNQU9QUFRBSywyMDA3LEjDmFNULDE4NSw0MDA4",
"prioritet": 1,
"soknadTil": {
"studietypenummer": "4008",
"navnAlleSprak": {
"nb": "Juma-mer tekst"
}
},
"tilbudstatus": null
},
{
"id": "OTY6MTIzNCw5MDAsSlVNQU9QUFRBSywyMDA3LEjDmFNULDE4NSw0MDEy",
"prioritet": 2,
"soknadTil": {
"studietypenummer": "4012",
"navnAlleSprak": {
"nb": "Jum4"
}
},
"tilbudstatus": null
}
]
}
},
{
"id": "OTU6MTIzNCw5MDYsVUtKRU5ULDIwMDQsSMOYU1Q",
"sokernummer": "7001",
"soknadsAlternativer": {
"nodes": [
{
"id": "OTY6MTIzNCw5MDYsVUtKRU5ULDIwMDQsSMOYU1QsMTg1LDkwMw",
"prioritet": 1,
"soknadTil": {
"studietypenummer": "903",
"navnAlleSprak": {
"nb": "Spesialpedagogikk 2 avd linje A, UiO"
}
},
"tilbudstatus": {
"kode": "S"
}
}
]
}
}
]
}
}
}
Filtrering: Soknadsalternativer arver filtreringen fra sisSoknader, som støtter filtrering på opptak og personProfiler.
Se SELECTMANY Soknad over for mer detaljer om filtreringsalternativene.
SELECTMANY Student
"Student" heter "StudentVedLarested" i FS GraphQL API. Du kan hente studenter med rot-spørringen studenter:
query Studenter {
studenter(
filter: { eierOrganisasjonskode: "1234" }
first: 3
) {
nodes {
id
studentnummer
personProfil {
fodselsnummer
navn {
fornavn
etternavn
}
}
}
}
}
Eksempel på svar:
{
"data": {
"studenter": {
"nodes": [
{
"id": "OTk6MTIzNCw4ODM",
"studentnummer": "000114",
"personProfil": {
"fodselsnummer": "XXXXXXXXXXX",
"navn": {
"fornavn": "Njål",
"etternavn": "Øye"
}
}
},
{
"id": "OTk6MTIzNCw4ODU",
"studentnummer": "000171",
"personProfil": {
"fodselsnummer": "XXXXXXXXXXX",
"navn": {
"fornavn": "Monica Blide",
"etternavn": "Blidensol"
}
}
},
{
"id": "OTk6MTIzNCw4ODY",
"studentnummer": "100495",
"personProfil": {
"fodselsnummer": "XXXXXXXXXXX",
"navn": {
"fornavn": "Fredrik",
"etternavn": "Godal"
}
}
}
]
}
}
}
Filtrering: studenter støtter filtrering på fodselsnumre, privatEpost, studieniva, emnerITerminer, harAktivProgramStudierett, harEmneStudierettITerminer og inkluderAvdode.
For direkte oppslag kan du bruke studenterGittFodselsnumre, studenterGittStudentnumre, studenterGittFeideBrukere, studenterGittPersonlopenumre eller studenterGittLanetakerIder.
SELECTMANY Studentvurdkombprotokoll
Studentvurdkombprotokoll heter "Resultat" i FS GraphQL API. Du kan hente ut studentvurderingsprotokoller med en spørring som denne:
query Resultater {
resultater(
filter: {
eierOrganisasjonskode: "1234"
}
first: 10
) {
nodes {
id
vurderingsenhet {
id
vurderingsperiode {
id
arstall
navnAlleSprak {
nb
nn
en
}
}
emne {
id
kode
versjonskode
}
}
karakter {
navnAlleSprak {
nb
en
nn
}
tall
}
}
}
}
Eksempel på svar:
{
"data": {
"resultater": {
"nodes": [
{
"id": "MjAyOjEyMzQsODgzLDE4NCxFWFBISUwsICxTUywxOTk1LDA2",
"vurderingsenhet": {
"id": "MTM5OjEyMzQsU1MsMTg0LEVYUEhJTCwgLDE5OTUsMDY",
"vurderingsperiode": {
"id": "MTQ4OjEyMzQsMTk5NSwwNg",
"arstall": 1995,
"navnAlleSprak": {
"nb": "06",
"nn": "06",
"en": "06"
}
},
"emne": {
"id": "MjA6MTIzNCwxODQsRVhQSElMLCA",
"kode": "EXPHIL",
"versjonskode": " "
}
},
"karakter": {
"navnAlleSprak": {
"nb": "tre-null",
"en": "Passed",
"nn": "Stått"
},
"tall": 3
}
},
{
"id": "MjAyOjEyMzQsODgzLDE4NCxFWFBISUwsICxTUy0xLDE5OTUsMDY",
"vurderingsenhet": {
"id": "MTM5OjEyMzQsU1MtMSwxODQsRVhQSElMLCAsMTk5NSwwNg",
"vurderingsperiode": {
"id": "MTQ4OjEyMzQsMTk5NSwwNg",
"arstall": 1995,
"navnAlleSprak": {
"nb": "06",
"nn": "06",
"en": "06"
}
},
"emne": {
"id": "MjA6MTIzNCwxODQsRVhQSElMLCA",
"kode": "EXPHIL",
"versjonskode": " "
}
},
"karakter": {
"navnAlleSprak": {
"nb": "to-seks",
"en": null,
"nn": null
},
"tall": 2.6
}
},
{
"id": "MjAyOjEyMzQsODgzLDE4NCxFWFBISUwsICxTUy0yLDE5OTUsMDY",
"vurderingsenhet": {
"id": "MTM5OjEyMzQsU1MtMiwxODQsRVhQSElMLCAsMTk5NSwwNg",
"vurderingsperiode": {
"id": "MTQ4OjEyMzQsMTk5NSwwNg",
"arstall": 1995,
"navnAlleSprak": {
"nb": "06",
"nn": "06",
"en": "06"
}
},
"emne": {
"id": "MjA6MTIzNCwxODQsRVhQSElMLCA",
"kode": "EXPHIL",
"versjonskode": " "
}
},
"karakter": {
"navnAlleSprak": {
"nb": "to-seks",
"en": null,
"nn": null
},
"tall": 2.6
}
},
{
"id": "MjAyOjEyMzQsODg3LDE5NCxTSUE1MDM5LDEsT0JMMSwyMDA1LDEy",
"vurderingsenhet": {
"id": "MTM5OjEyMzQsT0JMMSwxOTQsU0lBNTAzOSwxLDIwMDUsMTI",
"vurderingsperiode": {
"id": "MTQ4OjEyMzQsMjAwNSwxMg",
"arstall": 2005,
"navnAlleSprak": {
"nb": "12",
"nn": "12",
"en": "12"
}
},
"emne": {
"id": "MjA6MTIzNCwxOTQsU0lBNTAzOSwx",
"kode": "SIA5039",
"versjonskode": "1"
}
},
"karakter": {
"navnAlleSprak": {
"nb": "Godkjent",
"en": "Approved",
"nn": "Godkjend"
},
"tall": 0.8
}
},
{
"id": "MjAyOjEyMzQsODg3LDE5NCxTSUE1MDM5LDEsUywyMDA1LDEy",
"vurderingsenhet": {
"id": "MTM5OjEyMzQsUywxOTQsU0lBNTAzOSwxLDIwMDUsMTI",
"vurderingsperiode": {
"id": "MTQ4OjEyMzQsMjAwNSwxMg",
"arstall": 2005,
"navnAlleSprak": {
"nb": "12",
"nn": "12",
"en": "12"
}
},
"emne": {
"id": "MjA6MTIzNCwxOTQsU0lBNTAzOSwx",
"kode": "SIA5039",
"versjonskode": "1"
}
},
"karakter": {
"navnAlleSprak": {
"nb": "B",
"en": null,
"nn": null
},
"tall": 64
}
},
{
"id": "MjAyOjEyMzQsODg4LDE5MSxFTkcxMTAsMSxTLDIwMDUsMTI",
"vurderingsenhet": {
"id": "MTM5OjEyMzQsUywxOTEsRU5HMTEwLDEsMjAwNSwxMg",
"vurderingsperiode": {
"id": "MTQ4OjEyMzQsMjAwNSwxMg",
"arstall": 2005,
"navnAlleSprak": {
"nb": "12",
"nn": "12",
"en": "12"
}
},
"emne": {
"id": "MjA6MTIzNCwxOTEsRU5HMTEwLDE",
"kode": "ENG110",
"versjonskode": "1"
}
},
"karakter": {
"navnAlleSprak": {
"nb": "A",
"en": null,
"nn": null
},
"tall": 65
}
},
{
"id": "MjAyOjEyMzQsODg4LDE5MSxFTkcxMTAsMSxTLTEsMjAwNSwxMg",
"vurderingsenhet": {
"id": "MTM5OjEyMzQsUy0xLDE5MSxFTkcxMTAsMSwyMDA1LDEy",
"vurderingsperiode": {
"id": "MTQ4OjEyMzQsMjAwNSwxMg",
"arstall": 2005,
"navnAlleSprak": {
"nb": "12",
"nn": "12",
"en": "12"
}
},
"emne": {
"id": "MjA6MTIzNCwxOTEsRU5HMTEwLDE",
"kode": "ENG110",
"versjonskode": "1"
}
},
"karakter": {
"navnAlleSprak": {
"nb": "A",
"en": null,
"nn": null
},
"tall": 65
}
},
{
"id": "MjAyOjEyMzQsODg4LDE5MSxFTkcxMTAsMSxTLTIsMjAwNSwxMg",
"vurderingsenhet": {
"id": "MTM5OjEyMzQsUy0yLDE5MSxFTkcxMTAsMSwyMDA1LDEy",
"vurderingsperiode": {
"id": "MTQ4OjEyMzQsMjAwNSwxMg",
"arstall": 2005,
"navnAlleSprak": {
"nb": "12",
"nn": "12",
"en": "12"
}
},
"emne": {
"id": "MjA6MTIzNCwxOTEsRU5HMTEwLDE",
"kode": "ENG110",
"versjonskode": "1"
}
},
"karakter": {
"navnAlleSprak": {
"nb": "B",
"en": null,
"nn": null
},
"tall": 64
}
},
{
"id": "MjAyOjEyMzQsODg5LDIwOSw0QUZCLDEsU00sMjAwNSwxMg",
"vurderingsenhet": {
"id": "MTM5OjEyMzQsU00sMjA5LDRBRkIsMSwyMDA1LDEy",
"vurderingsperiode": {
"id": "MTQ4OjEyMzQsMjAwNSwxMg",
"arstall": 2005,
"navnAlleSprak": {
"nb": "12",
"nn": "12",
"en": "12"
}
},
"emne": {
"id": "MjA6MTIzNCwyMDksNEFGQiwx",
"kode": "4AFB",
"versjonskode": "1"
}
},
"karakter": {
"navnAlleSprak": {
"nb": "C",
"en": null,
"nn": null
},
"tall": 63
}
},
{
"id": "MjAyOjEyMzQsODg5LDIwOSw0QUZCLDEsU00tMiwyMDA1LDEy",
"vurderingsenhet": {
"id": "MTM5OjEyMzQsU00tMiwyMDksNEFGQiwxLDIwMDUsMTI",
"vurderingsperiode": {
"id": "MTQ4OjEyMzQsMjAwNSwxMg",
"arstall": 2005,
"navnAlleSprak": {
"nb": "12",
"nn": "12",
"en": "12"
}
},
"emne": {
"id": "MjA6MTIzNCwyMDksNEFGQiwx",
"kode": "4AFB",
"versjonskode": "1"
}
},
"karakter": {
"navnAlleSprak": {
"nb": "A",
"en": null,
"nn": null
},
"tall": 65
}
}
]
}
}
}
SELECTMANY Studieprogram
Eksempel på spørring som henter alle studieprogrammer:
query Studieprogrammer {
studieprogramV2(
filter: {
eierOrganisasjonskode: "1234"
}
first: 3
) {
nodes {
id
kode
navnAlleSprak {
nb
nn
en
}
}
}
}
Eksempel på svar:
{
"data": {
"studieprogramV2": {
"nodes": [
{
"id": "MTA2OjEyMzQsMTA",
"kode": "10",
"navnAlleSprak": {
"nb": "Sivilarkitektstudiet ved NTNU",
"nn": "k",
"en": null
}
},
{
"id": "MTA2OjEyMzQsQUxN",
"kode": "ALM",
"navnAlleSprak": {
"nb": "4-årig allmennlærerutdanning",
"nn": null,
"en": null
}
},
{
"id": "MTA2OjEyMzQsQUxNTMOGUg",
"kode": "ALMLÆR",
"navnAlleSprak": {
"nb": "Almennlærerutdanning HSH",
"nn": null,
"en": null
}
}
]
}
}
}
SELECTMANY Studieprogramstudent
Studieprogramstudent kalles "ProgramStudierett" i FS GraphQL API.
Eksempel på spørring som henter alle programStudieretter:
query MyQuery {
programStudieretter(
filter: {
eierOrganisasjonskode: "1234"
aktivStatus: [FREMTIDIG, AKTIV, AVSLUTTET]
}
first: 10
) {
edges {
node {
id
studieprogram {
id
navnAlleSprak {
nb
nn
en
}
}
studierettperiode {
fraDato
tilDato
}
student {
studentnummer
}
}
}
}
}
Merk at aktivStatus-filteret har standardverdi AKTIV.
Hvis du ikke oppgir noe her, får du bare tilbake studieretter som er aktive på spørretidspunktet.
Eksempel på svar:
{
"data": {
"programStudieretter": {
"edges": [
{
"node": {
"id": "MTU0OjEyMzQsODgzLDJLUkxCMiwyMDI0LEjDmFNU",
"studieprogram": {
"id": "MTA2OjEyMzQsMktSTEIy",
"navnAlleSprak": {
"nb": "KRISTENDOMS- RELIGIONS- OG LIVSSYNSKUNNSKAP",
"nn": null,
"en": null
}
},
"studierettperiode": {
"fraDato": "2024-08-01",
"tilDato": null
},
"student": {
"studentnummer": "000114"
}
}
},
{
"node": {
"id": "MTU0OjEyMzQsODkzLEJBQ0gtw5hLQURNLDIwMDUsSMOYU1Q",
"studieprogram": {
"id": "MTA2OjEyMzQsQkFDSC3DmEtBRE0",
"navnAlleSprak": {
"nb": "Bachelor i økonomi og administrasjon",
"nn": null,
"en": null
}
},
"studierettperiode": {
"fraDato": "2005-08-01",
"tilDato": null
},
"student": {
"studentnummer": "100522"
}
}
},
{
"node": {
"id": "MTU0OjEyMzQsOTAyLEJBU1ksMjAwNSxIw5hTVA",
"studieprogram": {
"id": "MTA2OjEyMzQsQkFTWQ",
"navnAlleSprak": {
"nb": "Bachelor i sykepleie",
"nn": null,
"en": null
}
},
"studierettperiode": {
"fraDato": "2005-08-01",
"tilDato": null
},
"student": {
"studentnummer": "100499"
}
}
},
{
"node": {
"id": "MTU0OjEyMzQsOTA2LEFMUkVBTC1IU1QsMTk5OCxWw4VS",
"studieprogram": {
"id": "MTA2OjEyMzQsQUxSRUFMLUhTVA",
"navnAlleSprak": {
"nb": "Allmenlærerutd. med realfag",
"nn": "Allmenlærarutd. med realfag",
"en": null
}
},
"studierettperiode": {
"fraDato": "1998-01-01",
"tilDato": null
},
"student": {
"studentnummer": "000401"
}
}
},
{
"node": {
"id": "MTU0OjEyMzQsOTA2LEhJU1RGSUwsMTk5NSxIw5hTVA",
"studieprogram": {
"id": "MTA2OjEyMzQsSElTVEZJTA",
"navnAlleSprak": {
"nb": "Historisk-filosofisk studium, UiO",
"nn": null,
"en": null
}
},
"studierettperiode": {
"fraDato": "1995-08-12",
"tilDato": null
},
"student": {
"studentnummer": "000401"
}
}
},
{
"node": {
"id": "MTU0OjEyMzQsOTA2LFNQUDJBLDIwMDEsSMOYU1Q",
"studieprogram": {
"id": "MTA2OjEyMzQsU1BQMkE",
"navnAlleSprak": {
"nb": "Spesialpedagogikk 2 avd., linje A, UiO",
"nn": null,
"en": null
}
},
"studierettperiode": {
"fraDato": "2002-08-02",
"tilDato": null
},
"student": {
"studentnummer": "000401"
}
}
},
{
"node": {
"id": "MTU0OjEyMzQsOTA3LEZSQU5TSy1VSU8sMTk5NyxIw5hTVA",
"studieprogram": {
"id": "MTA2OjEyMzQsRlJBTlNLLVVJTw",
"navnAlleSprak": {
"nb": "Fransk hovedfag",
"nn": null,
"en": null
}
},
"studierettperiode": {
"fraDato": "1997-08-02",
"tilDato": null
},
"student": {
"studentnummer": "000002"
}
}
},
{
"node": {
"id": "MTU0OjEyMzQsOTA3LEhJU1RGSUwsMTk5NSxIw5hTVA",
"studieprogram": {
"id": "MTA2OjEyMzQsSElTVEZJTA",
"navnAlleSprak": {
"nb": "Historisk-filosofisk studium, UiO",
"nn": null,
"en": null
}
},
"studierettperiode": {
"fraDato": "1995-08-15",
"tilDato": null
},
"student": {
"studentnummer": "000002"
}
}
},
{
"node": {
"id": "MTU0OjEyMzQsOTA4LEZSQU5TSy1VSU8sMTk5OSxIw5hTVA",
"studieprogram": {
"id": "MTA2OjEyMzQsRlJBTlNLLVVJTw",
"navnAlleSprak": {
"nb": "Fransk hovedfag",
"nn": null,
"en": null
}
},
"studierettperiode": {
"fraDato": "1999-10-11",
"tilDato": null
},
"student": {
"studentnummer": "000003"
}
}
},
{
"node": {
"id": "MTU0OjEyMzQsOTA4LEZZU0lPLUhPUywxOTk3LEjDmFNU",
"studieprogram": {
"id": "MTA2OjEyMzQsRllTSU8tSE9T",
"navnAlleSprak": {
"nb": "Fysioterapistudiet, HiOslo",
"nn": "Fysioterapistudiet, HiOslo",
"en": null
}
},
"studierettperiode": {
"fraDato": "1997-08-15",
"tilDato": null
},
"student": {
"studentnummer": "000003"
}
}
}
]
}
}
}
Du kan hente programstudieretter for et gitt fødselsnummer slik:
query MyQuery {
programStudieretter(
filter: {
eierOrganisasjonskode: "1234"
aktivStatus: [FREMTIDIG, AKTIV, AVSLUTTET]
fodselsnumre: "XXXXXXXXXXX"
}
first: 10
) {
edges {
node {
id
studieprogram {
id
navnAlleSprak {
nb
nn
en
}
}
studierettperiode {
fraDato
tilDato
}
student {
studentnummer
}
}
}
}
}
Eksempel på svar:
{
"data": {
"programStudieretter": {
"edges": [
{
"node": {
"id": "MTU0OjEyMzQsODgzLDJLUkxCMiwyMDI0LEjDmFNU",
"studieprogram": {
"id": "MTA2OjEyMzQsMktSTEIy",
"navnAlleSprak": {
"nb": "KRISTENDOMS- RELIGIONS- OG LIVSSYNSKUNNSKAP",
"nn": null,
"en": null
}
},
"studierettperiode": {
"fraDato": "2024-08-01",
"tilDato": null
},
"student": {
"studentnummer": "000114"
}
}
},
{
"node": {
"id": "MTU0OjEyMzQsODgzLFNPU8OYSy1VSU8sMTk5NyxWw4VS",
"studieprogram": {
"id": "MTA2OjEyMzQsU09Tw5hLLVVJTw",
"navnAlleSprak": {
"nb": "Sosialøkonomi hovedfag",
"nn": null,
"en": null
}
},
"studierettperiode": {
"fraDato": "1997-02-11",
"tilDato": "1999-12-30"
},
"student": {
"studentnummer": "000114"
}
}
}
]
}
}
}
SELECTMANY Undervisningsmelding
Undervisningsmeldinger brukes til å ta opp studenter til emner i FS. I FS GraphQL API har vi splittet denne tabellen i to, én for emnestudieretter, og én for emnesøknader. Emnesøknader inneholder alle undervisningsmeldinger, men kun de kolonnene som er relevante for opptak. Emnestudieretter inneholder bare undervisningsmeldinger for de studentene som har fått opptak, og bare de kolonnene som er relevante for gjennomføring av undervisning. Det er imidlertid mulig å nøste disse inni hverandre for å få samme data som i FSWS-CRUD. Du må velge den spørringen som gir mest relevant filtrering for ditt bruk.
Eksempel på spørring som henter alle emnesøknader:
query EmneSoknader {
emneSoknader(
filter: {
eierOrganisasjonskode: "1234"
}
first: 10
) {
edges {
node {
id
student {
personProfil {
id
fodselsnummer
}
}
emne {
id
kode
versjonskode
navnAlleSprak {
nb
nn
en
}
}
termin {
id
arstall
betegnelse {
kode
navnAlleSprak {
nb
nn
en
}
}
}
terminnummer
soknadsstatus
}
}
}
}
Eksempel på svar:
{
"data": {
"emneSoknader": {
"edges": [
{
"node": {
"id": "MjA3OjEyMzQsMTUwLDFCQS0xMTEsMSxIw5hTVCwyMDA2LDkzOA",
"student": {
"personProfil": {
"id": "NzY6MTIzNCw5Mzg",
"fodselsnummer": "02537490368"
}
},
"emne": {
"id": "MjA6MTIzNCwxNTAsMUJBLTExMSwx",
"kode": "1BA-111",
"versjonskode": "1",
"navnAlleSprak": {
"nb": "Bevegelseslære bokmål",
"nn": "Bevegingslære",
"en": "The Science of Movement"
}
},
"termin": {
"id": "MTE2OjEyMzQsMjAwNixIw5hTVA",
"arstall": 2006,
"betegnelse": {
"kode": "HØST",
"navnAlleSprak": {
"nb": "Høst",
"nn": "Haust",
"en": "Autumn"
}
}
},
"terminnummer": 1,
"soknadsstatus": "TATT_OPP"
}
},
{
"node": {
"id": "MjA3OjEyMzQsMTUwLDFCQS0xMTEsMSxIw5hTVCwyMDA2LDk0OQ",
"student": {
"personProfil": {
"id": "NzY6MTIzNCw5NDk",
"fodselsnummer": "31587290521"
}
},
"emne": {
"id": "MjA6MTIzNCwxNTAsMUJBLTExMSwx",
"kode": "1BA-111",
"versjonskode": "1",
"navnAlleSprak": {
"nb": "Bevegelseslære bokmål",
"nn": "Bevegingslære",
"en": "The Science of Movement"
}
},
"termin": {
"id": "MTE2OjEyMzQsMjAwNixIw5hTVA",
"arstall": 2006,
"betegnelse": {
"kode": "HØST",
"navnAlleSprak": {
"nb": "Høst",
"nn": "Haust",
"en": "Autumn"
}
}
},
"terminnummer": 1,
"soknadsstatus": "TATT_OPP"
}
},
{
"node": {
"id": "MjA3OjEyMzQsMTUwLDFCQS0xMTEsMSxIw5hTVCwyMDA2LDEwNTk",
"student": {
"personProfil": {
"id": "NzY6MTIzNCwxMDU5",
"fodselsnummer": "13587890563"
}
},
"emne": {
"id": "MjA6MTIzNCwxNTAsMUJBLTExMSwx",
"kode": "1BA-111",
"versjonskode": "1",
"navnAlleSprak": {
"nb": "Bevegelseslære bokmål",
"nn": "Bevegingslære",
"en": "The Science of Movement"
}
},
"termin": {
"id": "MTE2OjEyMzQsMjAwNixIw5hTVA",
"arstall": 2006,
"betegnelse": {
"kode": "HØST",
"navnAlleSprak": {
"nb": "Høst",
"nn": "Haust",
"en": "Autumn"
}
}
},
"terminnummer": 1,
"soknadsstatus": "TATT_OPP"
}
},
{
"node": {
"id": "MjA3OjEyMzQsMTUwLDFCQS0xMTEsMSxIw5hTVCwyMDA2LDEwNzc",
"student": {
"personProfil": {
"id": "NzY6MTIzNCwxMDc3",
"fodselsnummer": "14578990047"
}
},
"emne": {
"id": "MjA6MTIzNCwxNTAsMUJBLTExMSwx",
"kode": "1BA-111",
"versjonskode": "1",
"navnAlleSprak": {
"nb": "Bevegelseslære bokmål",
"nn": "Bevegingslære",
"en": "The Science of Movement"
}
},
"termin": {
"id": "MTE2OjEyMzQsMjAwNixIw5hTVA",
"arstall": 2006,
"betegnelse": {
"kode": "HØST",
"navnAlleSprak": {
"nb": "Høst",
"nn": "Haust",
"en": "Autumn"
}
}
},
"terminnummer": 1,
"soknadsstatus": "TATT_OPP"
}
},
{
"node": {
"id": "MjA3OjEyMzQsMTUwLDFCQS0xMTEsMSxIw5hTVCwyMDA2LDE0OTg",
"student": {
"personProfil": {
"id": "NzY6MTIzNCwxNDk4",
"fodselsnummer": "29597490060"
}
},
"emne": {
"id": "MjA6MTIzNCwxNTAsMUJBLTExMSwx",
"kode": "1BA-111",
"versjonskode": "1",
"navnAlleSprak": {
"nb": "Bevegelseslære bokmål",
"nn": "Bevegingslære",
"en": "The Science of Movement"
}
},
"termin": {
"id": "MTE2OjEyMzQsMjAwNixIw5hTVA",
"arstall": 2006,
"betegnelse": {
"kode": "HØST",
"navnAlleSprak": {
"nb": "Høst",
"nn": "Haust",
"en": "Autumn"
}
}
},
"terminnummer": 1,
"soknadsstatus": "TATT_OPP"
}
},
{
"node": {
"id": "MjA3OjEyMzQsMTUwLDFCQS0xMTEsMSxIw5hTVCwyMDA2LDE1NzQ",
"student": {
"personProfil": {
"id": "NzY6MTIzNCwxNTc0",
"fodselsnummer": "23598690006"
}
},
"emne": {
"id": "MjA6MTIzNCwxNTAsMUJBLTExMSwx",
"kode": "1BA-111",
"versjonskode": "1",
"navnAlleSprak": {
"nb": "Bevegelseslære bokmål",
"nn": "Bevegingslære",
"en": "The Science of Movement"
}
},
"termin": {
"id": "MTE2OjEyMzQsMjAwNixIw5hTVA",
"arstall": 2006,
"betegnelse": {
"kode": "HØST",
"navnAlleSprak": {
"nb": "Høst",
"nn": "Haust",
"en": "Autumn"
}
}
},
"terminnummer": 1,
"soknadsstatus": "TATT_OPP"
}
},
{
"node": {
"id": "MjA3OjEyMzQsMTUwLDFCQS0xMjEsMSxIw5hTVCwyMDA3LDE0OTg",
"student": {
"personProfil": {
"id": "NzY6MTIzNCwxNDk4",
"fodselsnummer": "29597490060"
}
},
"emne": {
"id": "MjA6MTIzNCwxNTAsMUJBLTEyMSwx",
"kode": "1BA-121",
"versjonskode": "1",
"navnAlleSprak": {
"nb": "Idrett og samfunn",
"nn": null,
"en": null
}
},
"termin": {
"id": "MTE2OjEyMzQsMjAwNyxIw5hTVA",
"arstall": 2007,
"betegnelse": {
"kode": "HØST",
"navnAlleSprak": {
"nb": "Høst",
"nn": "Haust",
"en": "Autumn"
}
}
},
"terminnummer": 1,
"soknadsstatus": "TATT_OPP"
}
},
{
"node": {
"id": "MjA3OjEyMzQsMTUwLDFCQS0xMjEsMSxIw5hTVCwyMDA3LDUzOTU",
"student": {
"personProfil": {
"id": "NzY6MTIzNCw1Mzk1",
"fodselsnummer": "01510790142"
}
},
"emne": {
"id": "MjA6MTIzNCwxNTAsMUJBLTEyMSwx",
"kode": "1BA-121",
"versjonskode": "1",
"navnAlleSprak": {
"nb": "Idrett og samfunn",
"nn": null,
"en": null
}
},
"termin": {
"id": "MTE2OjEyMzQsMjAwNyxIw5hTVA",
"arstall": 2007,
"betegnelse": {
"kode": "HØST",
"navnAlleSprak": {
"nb": "Høst",
"nn": "Haust",
"en": "Autumn"
}
}
},
"terminnummer": 1,
"soknadsstatus": "TATT_OPP"
}
},
{
"node": {
"id": "MjA3OjEyMzQsMTUwLDFCQS0xMjEsMSxWw4VSLDIwMDcsOTM4",
"student": {
"personProfil": {
"id": "NzY6MTIzNCw5Mzg",
"fodselsnummer": "02537490368"
}
},
"emne": {
"id": "MjA6MTIzNCwxNTAsMUJBLTEyMSwx",
"kode": "1BA-121",
"versjonskode": "1",
"navnAlleSprak": {
"nb": "Idrett og samfunn",
"nn": null,
"en": null
}
},
"termin": {
"id": "MTE2OjEyMzQsMjAwNyxWw4VS",
"arstall": 2007,
"betegnelse": {
"kode": "VÅR",
"navnAlleSprak": {
"nb": "Vår",
"nn": "Vår",
"en": "Spring"
}
}
},
"terminnummer": 1,
"soknadsstatus": "TATT_OPP"
}
},
{
"node": {
"id": "MjA3OjEyMzQsMTUwLDFCQS0xMjEsMSxWw4VSLDIwMDcsOTQ5",
"student": {
"personProfil": {
"id": "NzY6MTIzNCw5NDk",
"fodselsnummer": "31587290521"
}
},
"emne": {
"id": "MjA6MTIzNCwxNTAsMUJBLTEyMSwx",
"kode": "1BA-121",
"versjonskode": "1",
"navnAlleSprak": {
"nb": "Idrett og samfunn",
"nn": null,
"en": null
}
},
"termin": {
"id": "MTE2OjEyMzQsMjAwNyxWw4VS",
"arstall": 2007,
"betegnelse": {
"kode": "VÅR",
"navnAlleSprak": {
"nb": "Vår",
"nn": "Vår",
"en": "Spring"
}
}
},
"terminnummer": 1,
"soknadsstatus": "TATT_OPP"
}
}
]
}
}
}
SELECTMANY Vurdkombmelding
"Vurdkombmelding" heter "vurderingsmelding" i FS GraphQL API. Du kan hente vurderingsmeldinger med rot-spørringen vurderingsmeldinger:
query Vurderingsmeldinger {
vurderingsmeldinger(
filter: { eierOrganisasjonskode: "1234" }
first: 3
) {
nodes {
id
vurderingsenhet {
emne {
kode
versjonskode
}
vurderingsperiode {
arstall
navnAlleSprak {
nb
}
}
}
student {
studentnummer
personProfil {
fodselsnummer
navn {
fornavn
etternavn
}
}
}
}
}
}
Eksempel på svar:
{
"data": {
"vurderingsmeldinger": {
"nodes": [
{
"id": "MTQ0OjEyMzQsODgzLDE4NSxFWFBISUwsICxPQkwxLDE5OTYsMDY",
"vurderingsenhet": {
"emne": {
"kode": "EXPHIL",
"versjonskode": " "
},
"vurderingsperiode": {
"arstall": 1996,
"navnAlleSprak": {
"nb": "06"
}
}
},
"student": {
"studentnummer": "000114",
"personProfil": {
"fodselsnummer": "XXXXXXXXXXX",
"navn": {
"fornavn": "Njål",
"etternavn": "Øye"
}
}
}
},
{
"id": "MTQ0OjEyMzQsODgzLDE4NSxFWFBISUwsICxTUywxOTk2LDA2",
"vurderingsenhet": {
"emne": {
"kode": "EXPHIL",
"versjonskode": " "
},
"vurderingsperiode": {
"arstall": 1996,
"navnAlleSprak": {
"nb": "06"
}
}
},
"student": {
"studentnummer": "000114",
"personProfil": {
"fodselsnummer": "XXXXXXXXXXX",
"navn": {
"fornavn": "Njål",
"etternavn": "Øye"
}
}
}
},
{
"id": "MTQ0OjEyMzQsODgzLDE4NSxFWFBISUwsICxTUy0xLDE5OTYsMDY",
"vurderingsenhet": {
"emne": {
"kode": "EXPHIL",
"versjonskode": " "
},
"vurderingsperiode": {
"arstall": 1996,
"navnAlleSprak": {
"nb": "06"
}
}
},
"student": {
"studentnummer": "000114",
"personProfil": {
"fodselsnummer": "XXXXXXXXXXX",
"navn": {
"fornavn": "Njål",
"etternavn": "Øye"
}
}
}
}
]
}
}
}
Filtrering: vurderingsmeldinger støtter filtrering på emner, vurderingsenheter, vurderingsoppbygningsdeler, studenterVedLarested, oppmeldtITerminer og fodselsnumre.
For direkte oppslag kan du bruke vurderingsmeldingerGittLegacyIder.
UPSERT
For å migrere fra UPSERT i FSWS-CRUD til FS GraphQL API, må du utforske APIet for å finne en passende mutasjon. Noen mutasjoner vil være ganske like UPSERT i FSWS-CRUD, mens andre vil være mer komplekse. FS GraphQL API har enkelte mutasjoner som bruker UPSERT-mønsteret, men i mange tilfeller skilles det på INSERT og UPDATE. Mange mutasjoner har også innebygde forretningsregler og gjør oppdateringer i flere tabeller samtidig. Ikke alle mutasjoner i FSWS-CRUD har en direkte motpart i FS GraphQL API. Kontakt fs-support@sikt.no hvis du ikke finner en mutasjon som passer ditt behov.
UPSERT Fagperson
Det finnes flere mutasjoner som kan brukes for å opprette eller oppdatere en fagperson i FS GraphQL API. For oversikt se Tilgangsstyring for studenter og ansatte i prosesskatalogen.
UPSERT Kullklassestudent
UPSERT Kullklassestudent tilsvarer Mutation.fordelStudenterIKlasser i FS GraphQL API.
Mutasjonen oppretter klassemedlemskap for program-studieretter. Eventuelle eksisterende klassemedlemskap blir ikke endret.
For å finne IDene du trenger:
kullklasseId: Hent klasser med rot-spørringenklasser, filtrert på f.eks. studieprogram og kull.programStudierettId: Hent program-studieretter med rot-spørringenprogramStudieretter, eller viastudenter→programStudieretter.
mutation FordelStudenterIKlasser {
fordelStudenterIKlasser(input: [
{
kullklasseId: "NTk6MTIzNCxBTFJFQUwtSFNULDE5OTgsSMOYU1QsQg"
programStudierettId: "MTU0OjEyMzQsOTA2LEFMUkVBTC1IU1QsMTk5OCxWw4VS"
}
]) {
klassemedlemskap {
id
klasse {
id
}
}
errors {
... on UgyldigInput {
message
path
}
}
}
}
Respons:
{
"data": {
"fordelStudenterIKlasser": {
"klassemedlemskap": [
{
"id": "NjA6MTIzNCw5MDYsQUxSRUFMLUhTVCxWw4VSLDE5OTgsSMOYU1QsMTk5OCxC",
"klasse": null
}
],
"errors": null
}
}
}
UPSERT Person
UPSERT Person brukes i stor grad til å opprette studenter og fagpersoner. Se under UPSERT Fagperson og UPSERT Studieprogramstudent for mer informasjon. Vi har også en rekke mutasjoner for å oppdatere persondata. Her er noen eksempler:
Mutation.angiBankkontonummerForPersonProfilMutation.angiFeideBrukereForPersonProfilerMutation.angiMaalformForPersonProfilerMutation.angiStatsborgerskapMutation.endreFolkergistrerteAdresserMutation.endrePersonProfilNavn
UPSERT Personakseptanse
"Personakseptanse" heter "Samtykke" i FS GraphQL API.
Du kan registrere samtykke med Mutation.registrerSamtykkeForPersonProfiler og trekke samtykke med Mutation.trekkSamtykkerForPersonProfiler.
Begge mutasjonene er eksperimentelle.
For å finne IDene du trenger:
id: Personprofil-ID. Hent med rot-spørringenpersonProfiler, ellerpersonProfilerGittFodselsnumre/personProfilerGittFeideBrukerefor direkte oppslag.samtykkeKravId: Hent tilgjengelige samtykkekrav med rot-spørringensamtykkekrav.
mutation RegistrerSamtykke {
registrerSamtykkeForPersonProfiler(input: [
{
id: "NzY6MTIzNCw4ODE"
samtykkeKravId: "MToxMjM0LEVTQw"
}
]) {
samtykker {
id
svartidspunkt
}
errors {
... on UgyldigInput {
message
path
}
}
}
}
Respons:
{
"data": {
"registrerSamtykkeForPersonProfiler": {
"samtykker": [
{
"id": "ODM6MTIzNCw4ODEsRVND",
"svartidspunkt": "2026-03-02T17:11:53.355+01:00"
}
],
"errors": null
}
}
}
svartidspunkt kan oppgis valgfritt i input for å angi når samtykket ble gitt.
UPSERT Persontelefon
UPSERT Persontelefon tilsvarer Mutation.endreTelefonnumre i FS GraphQL API (eksperimentell).
Mutasjonen tar inn person-ID, telefonnummertype (MOBIL eller HJEM), landnummer og nummer.
For å finne IDen du trenger:
personId: Personprofil-ID. Hent med rot-spørringenpersonProfiler, ellerpersonProfilerGittFodselsnumre/personProfilerGittFeideBrukerefor direkte oppslag.
mutation EndreTelefonnumre {
endreTelefonnumre(input: [
{
personId: "NzY6MTIzNCw4ODE"
telefonnummertype: MOBIL
landnummer: "+47"
nummer: "98765432"
}
]) {
telefonnumre {
landnummer
nummer
}
errors {
... on UgyldigInput {
message
path
}
}
}
}
Respons:
{
"data": {
"endreTelefonnumre": {
"telefonnumre": [
{
"landnummer": "+47",
"nummer": "98765432"
}
],
"errors": null
}
}
}
UPSERT Soknad
Foreløpig ikke støttet. Kontakt fs-support@sikt.no og beskriv behovet dersom du trenger å opprette eller oppdatere søknader i FS GraphQL API.
UPSERT Soknadsalternativ
Foreløpig ikke støttet. Kontakt fs-suport@sikt.no og beskriv behovet dersom du trenger å opprette eller oppdatere søknadsalternativer i FS GraphQL API.
UPSERT Student
UPSERT Student brukes i stor grad til å opprette studenter som har fått opptak via et eksternt opptakssystem.
UPSERT Studieprogramstudent
UPSERT Studieprogramstudent brukes i stor grad til å opprette studenter som har fått opptak via et eksternt opptakssystem.
I FSWS-CRUD må du først opprette en person med UPSERT Person, deretter en student via UPSERT Student, og til slutt tildele studieretten med UPSERT Studieprogramstudent.
Deretter kan du bruke UPSERT Kullklassestudent for å fordele studenter i klasser og UPSERT Persontelefon for å registrere telefonnumre.
I FS GraphQL API har vi samlet alle disse operasjonene i én mutasjon Mutation.opprettStudenter.
Vi har også en mutasjon som kan brukes for å opprette studieretter for studenter som allerede finnes i FS: Mutation.taOppStudenterTilStudieprogrammer
For oversikt se Tildele Studierett i prosesskatalogen.
UPSERT Undervisningsmelding
UPSERT Undervisningsmelding tilsvarer Mutation.registrerEmnesoknader i FS GraphQL API (eksperimentell).
Mutasjonen registrerer emnesøknader for studenter. Dersom emnet har direkte oppmelding, vil studenten også få studierett til emnet.
Merk at i FS GraphQL API er undervisningsmeldinger splittet i emnesøknader og emnestudieretter (se SELECTMANY Undervisningsmelding over).
For å finne IDene du trenger:
studentVedLarested: Student-ID. Hent med rot-spørringenstudenter, ellerstudenterGittFodselsnumre/studenterGittStudentnumrefor direkte oppslag.undervisningsenhet: Undervisningsenhet-ID. Hent med rot-spørringenundervisningsenheter.
mutation RegistrerEmnesoknader {
registrerEmnesoknader(input: [
{
studentVedLarested: "OTk6MTIzNCw4ODM"
undervisningsenhet: "MTIxOjEyMzQsMTUwLEFLVDIwMi0xLDEsMjAxMSxWw4VSLDE"
}
]) {
emnesoknader {
id
soknadsstatus
emne {
kode
}
}
errors {
... on UgyldigInput {
message
path
}
}
}
}
Respons:
{
"data": {
"registrerEmnesoknader": {
"emnesoknader": [
{
"id": "MjA3OjEyMzQsMTUwLEFLVDIwMi0xLDEsVsOFUiwyMDExLDg4Mw",
"soknadsstatus": "SOKNAD_REGISTRERT",
"emne": {
"kode": "AKT202-1"
}
}
],
"errors": null
}
}
}
UPSERT Vurdkombmelding
UPSERT Vurdkombmelding tilsvarer Mutation.meldStudenterTilVurdering i FS GraphQL API (eksperimentell).
Mutasjonen melder studenter til vurdering.
Du kan også trekke vurderingsmeldinger med Mutation.trekkVurderingsmeldinger.
For å finne IDene du trenger:
studentVedLarestedId: Student-ID. Hent med rot-spørringenstudenter, ellerstudenterGittFodselsnumre/studenterGittStudentnumrefor direkte oppslag.vurderingsenhetId: Vurderingsenhet-ID. Hent med rot-spørringenvurderingsenheter.
mutation MeldStudenterTilVurdering {
meldStudenterTilVurdering(input: [
{
studentVedLarestedId: "OTk6MTIzNCw4ODM"
vurderingsenhetId: "MTM5OjEyMzQsQVMsMTg1LEVDT04xMjMwLDEsMjAwMywwNg"
}
]) {
vurderingsmeldinger {
id
student {
studentnummer
}
vurderingsenhet {
emne {
kode
}
}
}
}
}
Merk: MeldStudenterTilVurderingPayload har ikke et errors-felt. Eventuelle feil returneres som GraphQL-feil i errors-arrayet på toppnivå i responsen.
Respons:
{
"data": {
"meldStudenterTilVurdering": {
"vurderingsmeldinger": [
{
"id": "MTQ0OjEyMzQsODgzLDE4NSxFQ09OMTIzMCwxLEFTLDIwMDMsMDY",
"student": {
"studentnummer": "000114"
},
"vurderingsenhet": {
"emne": {
"kode": "ECON1230"
}
}
}
]
}
}
}