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.actErpCustomerNoKarakteristisk: Idempotent — kun aktører medactErpCustomerNo IS NULLeksporteres; 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)actCustNohar 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å brukeGetDecryptedConfigAsync(ikkeFromIntegrationdirekte, 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
actCustNoer satt,actActive = 1) - Bruk Kjør nå
- Verifiser i kundens regnskapssystem at kunden er opprettet
- Verifiser i ePortal at
wv_Actor.actErpCustomerNoer 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 (innenforuseCompany(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 somRecordsSucceeded - Resultat:
Success = truehvisRecordsFailed == 0, eller hvis det er både feil og suksesser (RecordsFailed > 0OGRecordsSucceeded > 0= delsuksess). Hvis alle rader feiler (ingen suksesser) blirSuccess = false.
Sikkerhet¶
ClientSecret(begge ERP-systemer) lagres kryptert (AES viaEncryptionService)- Adapteren skriver kun til
wv_Actor.actErpCustomerNoogactUpdDate— ingen sletting eller massendringer acttID-filteret er bevisst slakket fordi tenant-DB-er kan haacttIDsom GUID. Filtreringen skjer i stedet viaactCustNo 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.