Gå til innhold

Microsoft To Do-integrasjon

TodoSyncAdapter synker personlige ePortal-oppgaver (oppgaver tildelt en bruker) til hver brukers Microsoft To Do-liste — slik at brukeren kan jobbe med ePortal-oppgavene i mobil-To-Do-appen. Adapteren bruker app-only-autentisering (Client Credentials) og kaller Microsoft Graph på vegne av hver enkelt bruker (/users/{upn}/todo/lists).

Type: Microsoft Graph API-sync, bidirectional med delta query Modul i ePortal: Konfigureres i Konti Connect, bruker Prosjekt-modulen og Microsoft 365-integrasjonen Karakteristisk: App-only med Tasks.ReadWrite.All; per-bruker via wv_User.TodoSyncEnabled; delta query for inkrementell pull tilbake


Hva integrasjonen synker

Retning Entitet Frekvens
ePortal → Microsoft To Do Personlige oppgaver tildelt bruker → Microsoft To Do tasks (title, body, status, dueDate, priority) Per scheduler
Microsoft To Do → ePortal Endringer på sync'ede tasks (status, due date) tilbake til ePortal Per scheduler (delta query)

Implementasjon: TodoSyncAdapter.cs (basert på BaseGraphAdapter.cs)


Tilgang

Hvem Hva trengs
Hos kunden Microsoft 365-lisens med Microsoft To Do tilgjengelig (Business Basic eller høyere)
Hos Konti Administrator-tilgang til Konti Connect; app-registrering i Entra ID med Tasks.ReadWrite.All Application permission (admin consent)
Per bruker TodoSyncEnabled = truewv_User-raden; userName må matche Azure AD UPN (e-post)

Forutsetninger

  • M365 Graph-integrasjon er aktivert (M365Graph.Enabled = true)
  • App-registrering har:
  • Application permission: Tasks.ReadWrite.All (med admin consent)
  • Application permission: User.Read.All (for å resolvere UPN → AAD-bruker)
  • ePortal-brukerne har userName satt til Azure AD UPN (typisk arbeids-e-post)
  • Brukerne har skrudd på "Synk til Microsoft To Do" i sin brukerprofil (wv_User.TodoSyncEnabled = 1)

Konfigurasjon — feltforklaring

Felt Sted Type Påkrevd Hva det betyr
M365Graph.Enabled Innstillinger (sentralt) Boolean Ja Master-switch for M365 Graph
M365Graph.TenantId Innstillinger (sentralt) String (GUID) Ja Azure AD-tenant
M365Graph.ClientId Innstillinger (sentralt) String (GUID) Ja App-registreringens client_id
M365Graph.ClientSecret Innstillinger (sentralt) String (hemmelighet) Ja App-registreringens client_secret. Krypteres
TodoListName ConfigurationJson String Nei (default "ePortal Oppgaver") Navn på To Do-listen som opprettes for hver bruker
DebugLogging ConfigurationJson Boolean Nei (default false) Detaljert logging av Graph-kall og user resolution
DeltaLink_<userId> ConfigurationJson String Auto-administrert Delta link for inkrementell pull-back per bruker. Lagres automatisk av adapteren

Eksempel ConfigurationJson:

{
  "TodoListName": "ePortal Oppgaver",
  "DebugLogging": false,
  "_comment": "Per-bruker styres synken av wv_User.TodoSyncEnabled. Adapteren oppretter en To Do-liste med navnet TodoListName hos hver påslått bruker."
}

Hemmelig håndtering: ClientSecret lagres kryptert sentralt. Tokenet caches i IMicrosoftGraphAuthService per kundemiljø — mellomlageret deles ikke på tvers av kunder, og et on-behalf-of-token deles ikke mellom brukere (se Microsoft 365-integrasjon). Cachen invalideres ved 401/403, og kun for kundemiljøet som fikk feilen.


Slik gjør du — oppsett

1. Registrer Azure AD-applikasjon

Følg trinnene i Microsoft 365-integrasjon. Aktiver i tillegg:

  • Application permissions:
  • Tasks.ReadWrite.All
  • User.Read.All (for UPN-resolution)
  • Klikk Grant admin consent

Uten admin consent får adapteren 403 selv om tokenet returneres.

2. Lagre M365 Graph-innstillinger

Innstillinger → Konti Connect → Microsoft Graph-innstillinger:

  • TenantId, ClientId, ClientSecret
  • Aktiver M365Graph.Enabled = true

3. Opprett integrasjon i Konti Connect

  • Innstillinger → Konti Connect → Ny integrasjon
  • Type: M365Todo
  • Sett TodoListName (eller la default "ePortal Oppgaver" stå)
  • Sett scheduler — typisk hvert 15.–30. minutt
  • Lagre

4. Per-bruker aktivering

Hver bruker som vil synke må:

  • Ha userName satt til sin Azure AD UPN (typisk arbeids-e-post)
  • Sette TodoSyncEnabled = 1 på sin profil (kan eksponeres via brukerinnstillinger eller settes administrativt)

5. Test første kjøring

  • Bruk Kjør nå
  • Følg kjøringsloggen:
  • "To Do sync completed: N/M users synced, X tasks processed"
  • Per-bruker: opprettet liste / lagt til oppgaver / pull-back-resultat
  • Verifiser i Microsoft To Do eller mobilappen at listen "ePortal Oppgaver" finnes og inneholder tildelte oppgaver

Mapping-detaljer

ePortal-oppgave Microsoft To Do task Forklaring
Task.TaskTitle title Oppgavetittel
Task.TaskDescription Ikke synketBuildTodoTaskPayload sender kun title, status, importance og dueDateTime; beskrivelse overføres ikke
Task.TaskStatus status Mapping: ePortal-status → notStarted/inProgress/completed
Task.DueDate dueDateTime Frist (UTC)
Task.TaskPriority importance Mapping: høy/middels/lav → high/normal/low
(intern sync-mapping) id Lagres i TaskExternalSync-tabellen for å matche tilbake ved pull

Pull-back (To Do → ePortal)

  • Adapteren bruker Microsoft Graph delta query for å hente endringer siden forrige kjøring
  • DeltaLink_<userId> lagres i ConfigurationJson (per-bruker delta)
  • Ved første kjøring: full liste; deretter inkrementell
  • Endringer som hentes tilbake:
  • Status (fullført/ikke-fullført)
  • Due date
  • Endringer i beskrivelse fra To Do ignoreres — ePortal er master for fritekst-innhold. Tittel, status og frist synkes derimot tilbake til ePortal (UpdateTaskStatusFromSyncAsync oppdaterer TaskTitle, status og DueDate)

__UPDATE_CONFIG__-signal

Etter en kjøring der delta-link ble oppdatert, sender adapteren et internt info-signal __UPDATE_CONFIG__ til IntegrationService som persisterer ny ConfigurationJson til DB. Uten dette mister adapteren delta-state mellom kjøringer.


Frekvens og volum

  • Anbefalt scheduler: hvert 15.–30. minutt
  • Ingen Microsoft-grenser på antall oppgaver per liste (i praksis 1000+ uten problemer)
  • Rate limiting (429): Retry-After respekteres (3 retries)
  • 503/504: eksponentiell backoff
  • Per-bruker AAD-resolution: hvis 403 → token cache invalideres og ett retry med fersk token

Sikkerhet

  • ClientSecret krypteres sentralt
  • Adapteren kaller Graph på vegne av brukeren via /users/{upn}/todo/lists (app-only, ikke delegert OBO)
  • Krever admin consentTasks.ReadWrite.All — diskuter med kunden om dette er akseptabelt (gir applikasjonen tilgang til alle brukeres To Do-data)
  • Conditional Access-policyer på "App-only-tilgang" kan blokkere — sjekk i Entra ID

Vanlige problemer

Brukeren får ikke oppgaver i Microsoft To Do

Sjekk i rekkefølge:

  1. TodoSyncEnabled = 1wv_User?
  2. userName matcher Azure AD UPN (typisk arbeids-e-post)?
  3. Brukeren har Microsoft 365-lisens med To Do?
  4. Kjøringsloggen: står det "User X not found in Azure AD"?

403 Forbidden på To Do-API

Manglende admin consent på Tasks.ReadWrite.All. Gå til Entra ID → App registrations → API permissions → "Grant admin consent". Adapteren prøver én gang med fersk token automatisk ved 403.

"User not found in Azure AD" warning

wv_User.userName matcher ingen UPN i Entra ID. Adapteren prøver først users/{upn} (direkte oppslag), så fallback til $filter=mail eq '<upn>' or proxyAddresses/any(...). Fiks: oppdater userName til riktig UPN.

Delta query feiler / oppgaver dukker opp dobbelt

Delta link er korrupt eller utløpt. Fjern DeltaLink_<userId> fra ConfigurationJson — adapteren faller tilbake til full pull ved neste kjøring.

Tittel/beskrivelse endres ikke fra To Do tilbake til ePortal

By design. Adapteren synker status, tittel og due date fra To Do tilbake (ikke beskrivelse) — ePortal er master for fritekst-innhold for å unngå konflikter.

Resource not found in Microsoft To Do for user X

Brukeren har ikke aktivert Microsoft To Do (eller ikke fått lisens). Adapteren hopper over brukeren og fortsetter med neste.

Oppgaver merket fullført i To Do reaktiveres ved neste sync

Mappingen mellom ePortal-status og status i Graph håndterer dette korrekt, men hvis ePortal-oppgaven er gjenåpnet vil pull-back fra To Do "miste" fullført-status. Sjekk om noen har endret status i ePortal mellom kjøringene.


Relaterte sider