Gå til innhold

CRM aktør-eksport

CRM aktør-eksport (CrmActorExport) er en spesial-integrasjon som eksporterer nye CRM-kunder fra ePortal (wv_Actor) til regnskapssystemet og skriver kundenummeret tilbake til actErpCustomerNo. Adapteren støtter to ERP-mål: PowerOffice Go (REST) og Visma Business NXT (GraphQL).

Type: REST/GraphQL-eksport (push) Modul i ePortal: Konfigureres i Konti Connect, leser fra CRM-modulen og oppdaterer wv_Actor.actErpCustomerNo Karakteristisk: Idempotent — kun aktører med actErpCustomerNo IS NULL eksporteres; etter vellykket eksport skrives ERP-kundenummeret tilbake slik at samme aktør aldri eksporteres på nytt


Hva integrasjonen synker

Retning Entitet Frekvens
ePortal → PowerOffice Go / Visma NXT Nye CRM-kunder (wv_Actor) Konfigurerbart (typisk daglig eller on-demand)
ePortal ← ePortal (write-back) ERP-kundenummer → wv_Actor.actErpCustomerNo Umiddelbart etter vellykket eksport

Implementasjon: CrmActorExportAdapter.cs


Eksport-kriterier

Aktører hentes kun ut når alle disse er sanne:

  • actExcludeFromErp = 0 (aktøren er ikke ekskludert manuelt)
  • actErpCustomerNo IS NULL (ikke allerede eksportert)
  • actActive = 1 (aktiv aktør)
  • ISNULL(actDeleted, 0) = 0 (ikke slettet)
  • actCustNo har en verdi (kunde-aktør med kundenummer)

Hvis ingen aktører matcher: adapteren returnerer suksess uten å gjøre noe.


Tilgang

Hvem Hva trengs
Hos kunden Aktiv lisens i PowerOffice Go eller Visma Business NXT med tillatelse til å opprette kunder via API
Hos Konti Administrator-tilgang til Konti Connect; gyldig oppsett av valgt ERP-integrasjon

Forutsetninger

  • For PowerOffice Go: OAuth2-credentials (ClientId, ClientSecret) fra PowerOffice Go Developer Portal med tilgang til /Customer
  • For Visma Business NXT: OAuth2-credentials fra Visma Connect Developer Portal med tilgang til Business NXT GraphQL og firmanummer (CompanyNo)
  • CRM-modulen er aktivert og det finnes minst én aktør som matcher eksport-kriteriene

Konfigurasjon — feltforklaring

Felter ligger fordelt mellom ConfigurationJson og Authentication — se per ERP-system.

Felles felt

Felt Type Påkrevd Hva det betyr
ErpSystem String Ja PowerOfficeGo eller VismaBusinessNXT. Andre verdier avvises ved validering

Når ErpSystem = "PowerOfficeGo"

Felt Sted Type Påkrevd Hva det betyr
ApiBaseUrl Configuration URL Ja PowerOffice Go REST-base, typisk https://api.poweroffice.net (eller demo-URL)
ClientId Authentication String Ja OAuth2 client_id fra PO Go Developer Portal
ClientSecret Authentication String (hemmelighet) Ja OAuth2 client_secret. Krypteres ved lagring

Når ErpSystem = "VismaBusinessNXT"

Felt Sted Type Påkrevd Hva det betyr
ClientId Configuration String Ja OAuth2 client_id fra Visma Connect Developer Portal
ClientSecret Configuration String (hemmelighet) Ja OAuth2 client_secret. Krypteres ved lagring
CompanyNo Configuration Integer Ja (> 0) Visma Business NXT firmanummer

Eksempel ConfigurationJson (PowerOffice Go):

{
  "ErpSystem": "PowerOfficeGo",
  "ApiBaseUrl": "https://api.poweroffice.net"
}

Eksempel Authentication (PowerOffice Go):

{
  "ClientId": "<din-pogo-client-id>",
  "ClientSecret": "<din-pogo-client-secret>"
}

Eksempel ConfigurationJson (Visma Business NXT):

{
  "ErpSystem": "VismaBusinessNXT",
  "ClientId": "<din-nxt-client-id>",
  "ClientSecret": "<din-nxt-client-secret>",
  "CompanyNo": 123456
}

Hemmelig håndtering: ClientSecret krypteres ved lagring og eies av det krypterte autentiseringslageret (AuthenticationJson); lagring fjerner den fra konfigurasjons-JSON-en. Ved kjøring leser adapteren hemmeligheten fra det dekrypterte autentiseringslageret først, med fallback til eldre konfigurasjonslagring. Tjenester som leser config må bruke GetDecryptedConfigAsync (ikke FromIntegration direkte, som returnerer kryptert verdi → 401 mot ERP).


Slik gjør du — oppsett

1. Konfigurer ERP-tilgang

For PowerOffice Go: - Registrer en applikasjon i PowerOffice Go Developer Portal med Client Credentials-flow - Aktiver scope for kundeoppretting (api/Customer) - Kopier ClientId og ClientSecret

For Visma Business NXT: - Følg samme oppsett som beskrevet i Visma Business NXT-integrasjonen - Sørg for at OAuth-klienten har tilgang til kundens CompanyNo

2. Opprett integrasjon i Konti Connect

I ePortal:

  • Innstillinger → Konti Connect → Ny integrasjon
  • Type: CrmActorExport (CRM aktør-eksport)
  • Velg ErpSystem (PowerOfficeGo eller VismaBusinessNXT)
  • Fyll inn nødvendige felter for valgt ERP
  • Klikk Test tilkobling — adapteren henter et OAuth-token og verifiserer at det fungerer
  • Sett scheduler (typisk daglig eller manuell)
  • Lagre

3. Test første eksport

  • Opprett en test-CRM-kunde i ePortal (sørg for at actCustNo er satt, actActive = 1)
  • Bruk Kjør nå
  • Verifiser i kundens regnskapssystem at kunden er opprettet
  • Verifiser i ePortal at wv_Actor.actErpCustomerNo er fylt med ERP-kundenummeret

Mapping-detaljer

Forhåndsdefinerte mappings (HasPreconfiguredMapping = true)

ePortal-felt Mål-felt Forklaring
actName + actSurname Name Slått sammen til ett kundenavn
actEmail Email / emailAddress E-post
actPhone Phone / phoneNumber Telefon
actOrgno OrganizationNo / vatNumber Organisasjonsnummer/MVA-nummer
actAddress Address1 / mailAddress.address1 Postadresse linje 1
actPostalCode PostalCode / mailAddress.zipCode Postnummer
actCity City / mailAddress.city Poststed
actCountry mailAddress.countryCode Landskode (kun PowerOffice Go)

Write-back

Etter vellykket eksport:

  • PowerOffice Go: created.Code (PowerOffice kundekode) → wv_Actor.actErpCustomerNo
  • Visma Business NXT: ny kunde-id fra GraphQL customer_create-mutasjon (innenfor useCompany(no: $companyNo)-scope) → wv_Actor.actErpCustomerNo
  • actUpdDate = GETDATE() settes samtidig

Frekvens og volum

  • Antall rader per kjøring = antall aktører som matcher eksport-kriteriene
  • Typisk lavt volum (få nye kunder per dag) — derfor ofte daglig nattlig kjøring
  • Per-row try/catch: én feil stopper ikke hele eksporten — feilede rader logges som RecordsFailed, vellykkede som RecordsSucceeded
  • Resultat: Success = true hvis RecordsFailed == 0, eller hvis det er både feil og suksesser (RecordsFailed > 0 OG RecordsSucceeded > 0 = delsuksess). Hvis alle rader feiler (ingen suksesser) blir Success = false.

Sikkerhet

  • ClientSecret (begge ERP-systemer) lagres kryptert (AES via EncryptionService)
  • Adapteren skriver kun til wv_Actor.actErpCustomerNo og actUpdDate — ingen sletting eller massendringer
  • acttID-filteret er bevisst slakket fordi tenant-DB-er kan ha acttID som GUID. Filtreringen skjer i stedet via actCustNo IS NOT NULL (kunde-aktører har alltid kundenummer)
  • Ikke kjør samtidig som CRM aktør-import fra samme ERP — risiko for race condition på actErpCustomerNo

Vanlige problemer

Konfigurasjon mangler 'ErpSystem'

Sett ErpSystem til enten PowerOfficeGo eller VismaBusinessNXT i ConfigurationJson.

Ukjent ErpSystem: '<verdi>'

Stavefeil. Bare disse to verdiene er gyldige (case-sensitive).

Aktør eksporteres ikke

Sjekk mot kriteriene i Eksport-kriterier: - actExcludeFromErp = 0? - actErpCustomerNo IS NULL? - actActive = 1 og ikke slettet? - actCustNo har verdi?

PowerOffice Go returnerte ingen kundekode

Kunden ble teknisk akseptert av PO Go men response inneholdt ikke Code. Kontakt PO Go-support, eller sjekk om aktøren ble opprettet men responsen var ufullstendig.

Visma NXT GraphQL: actor with same OrganizationNo already exists

Aktøren finnes allerede i NXT med samme org.nr. Slå opp NXT-kundenummeret manuelt og fyll inn actErpCustomerNo i ePortal — så hopper adapteren over den ved neste kjøring.

401 ved kall mot ERP

ClientSecret er lagret kryptert. Hvis en intern tjeneste leser den uten å dekryptere, sendes en kryptert verdi til ERP og du får 401. Verifiser at koden bruker GetDecryptedConfigAsync.

Token-feil — Visma NXT

Visma Connect har egen 30-dagers-rotasjon på enkelte ClientSecret-er. Sjekk utløpsdato i Developer Portal.


Relaterte sider