Collega Microsoft Dynamics 365 a Spark per usare dati finance/sales/operations (es. ricavi, DSO, ordini, opportunità) come base oggettiva per obiettivi, valutazioni e reporting.
Cosa sincronizziamo
Ricavi/fatture/DSO (Dynamics 365 Finance → Spark, orario/notturno)
Ordini/commesse (Finance/SCM → Spark, orario/notturno)
Centri di costo / dimensioni contabili (Finance → Spark, notturno)
Opportunità / pipeline / win-rate (Sales (Dataverse) → Spark, orario/notturno)
Account/Clienti (metadati per filtri/permessi) (Sales → Spark, notturno)
A cosa serve
MBO guidato dai numeri: ricavi, margini, DSO e pipeline aggiornati automaticamente.
Governance e permessi: viste e KPI per centro di costo, BU o area commerciale.
Previsioni e payout: forecast e bonus calcolati con dati unici e tracciati.
Zero export manuali: job pianificati con controlli e log.
Come si configura (3 step)
Prerequisiti
Microsoft Entra ID: App Registration (client id/secret/cert), Service Principal.
Permessi API su Dataverse (Dynamics 365 Sales) e/o Finance & Operations (OData).
(Se richiesto) IP allowlist; workspace/report già pubblicati se usi Power BI a valle.
Lato Dynamics
Abilita accesso applicativo: assegna il Service Principal all’ambiente Dataverse e/o all’istanza Finance.
Raccogli tenantId, clientId, org URL (Dataverse), hostname F&O, entity names (es.
CustInvoiceJour,SalesOrderHeaderV2,Opportunity).Definisci view/campi necessari (date, importi, dimensioni contabili).
Lato Spark
Inserisci credenziali/endpoint, mappa i campi, avvia import pilota su un’OU di test.
Pianifica job notturni (master data) e orari (KPI operativi).
Sicurezza & controllo accessi
Autenticazione: OAuth2 (Entra ID) con Service Principal; token a tempo.
SSO su Spark: SAML/OIDC (Google/Microsoft/Okta). SCIM: (opzionale, via IdP).
Cifratura in transito/a riposo, audit log, principio del least privilege (scope minimi).
Mappature chiave
| Campo Dynamics (API) | Campo Spark | Tipo | Note |
|---|---|---|---|
customerAccount / accountid | customer_id | string | chiave cliente (Finance/Sales) |
invoiceAmount / actualrevenue | amount_eur | number | normalizza valuta in EUR |
invoiceDate / actualclosedate | date | date | ISO 8601, usato per periodo KPI |
salesOrderNumber / name | order/oppty | string | riferimento documento/opportunità |
salesUnitId / businessunitid | org_unit | string | mapping su BU/area commerciale |
defaultDimension (Finance) | cost_center | string | estrai CC da dimensioni contabili |
ownerid (Sales) | owner_email | string | risolto su email utente Spark |
probability (Sales) | kpi_value | number | per KPI pipeline/win-rate |
Endpoints / API
Dataverse (Dynamics 365 Sales): Web API OData v4 (
/api/data/v9.2/…) peraccounts,opportunities,users, ecc.Dynamics 365 Finance & Operations: OData (
/data/…) per entità comeCustInvoiceJour,CustomerAgingSnapshot,SalesOrderHeaderV2.Webhook/CSV SFTP (opz.): per carichi massivi o ambienti con policy restrittive.
Direzione, frequenza, limiti
Direzione: Pull Dynamics → Spark (default). Push Spark → Dynamics (non previsto; opzionale via export file).
Frequenza: orario per KPI operativi; notturno per master data e dimensioni.
Rate limits/quote: rispettare limiti Dataverse/F&O; usare paginazione, batch e retry/backoff su 429.
Limitazioni & note
Dimensioni contabili (Finance) richiedono estrazione del cost center da
defaultDimension.Valute: normalizza in Spark (FX di riferimento) per confronti omogenei.
Campi custom: disponibili se pubblicati in API o inclusi in view.
Gerarchie: supporto fino a 6 livelli (org unit/BU/area).
Troubleshooting rapido
AADSTS50011 (redirect): controlla Redirect URI nell’App Registration.
403 “insufficient privileges”: abilita il Service Principal su ambiente Dataverse/F&O e assegna i ruoli.
429 throttling: riduci burst, usa batch e retry esponenziale, pianifica fuori orari di punta.
Mancata risoluzione owner/BU: mappa utenti/BU da Entra/Dataverse e sincronizza prima le master data.
Cost center vuoto: verifica configurazione dimensioni e includi il CC nel select/expand.









