Bij een klant van ons maken we gebruik van Sumatra in combinatie met Exact Online Premium.
Hierbij worden de volgende gegevens momenteel via een PowerBI connectie opgehaald en in SQL geplaatst (handmatig):
Grootboekmutaties
Kostenplaatsen
Kostendragers
Grootboekrekeningen
Wat is er aan de kant van Invantive nodig aan gegevens om dit geautomatiseerd en gescheduled op te halen uit Exact Online Premium en in SQL Server te plaatsen?
Hierbij moet ook nog met het volgende rekening gehouden worden:
Zelf aangemaakte velden
Documenten gekoppeld aan grootboekmutaties moeten opgevraagd kunnen worden.
De meest belangrijke vraag is of het gaat om een on-premises SQL Server-database of een cloud SQL Server-database. Het maakt in het tweede geval niet uit of dat een reguliere SQL Server-database is (zoals bij GCP of AWS) of Azure SQL Server (zoals bij Microsoft Azure).
On-premises SQL Server
In het geval van een niet via de cloud-bereikbare database wordt het gebruik van Invantive Data Hub aanbevolen (multi-platform editie). Deze vereist een machine onder Windows, Linux of MacOS. Zie ook Exact Online Data Hub, 180 dagen gratis
Hiervoor is een Invantive Office Premium-abonnement nodig, zowel bij gebruik met Exact Online SaaS als Exact Online Premium.
Voor Invantive Data Hub is een configuratiebestand nodig en een SQL-script dat Data Hub instrueert welke kopieslagen nodig zijn.
Zie voor een voorbeeld:
De uitleg qua UniversalSQL-statement is terug te vinden onderaan dit topic.
Cloud SQL Server-database
In het geval van een de cloud-bereikbare database wordt het gebruik van Invantive Cloud aanbevolen. Zie bijvoorbeeld Gratis Exact Online Power BI-connector
Hiervoor is een Invantive Office Premium-abonnement nodig vanwege de combinatie met Exact Online Premium. Met Exact Online SaaS is enkel Invantive Office nodig.
Zie voor een voorbeeld:
In dit voorbeeld is ook meer uitleg te vinden indien er een PULL via Azure Data Factory gewenst is in plaats van een PUSH vanuit Invantive Cloud. Het schedulen kan via curl maar ook via bijvoorbeeld Power Automate door een HTTP GET uit te voeren.
De uitleg qua UniversalSQL-statement is terug te vinden onderaan dit topic.
UniversalSQL-statements
Standaard Tabellen
De volgende tabellen zullen naar verwachting nodig zijn:
Grootboekmutaties: TransactionLinesIncremental en ExactOnlineREST..Journals.
Kostenplaatsen: CostCenters.
Kostendragers: CostUnits.
Grootboekrekeningen: GLAccountsIncremental.
Documenten gekoppeld aan grootboekmutaties: DocumentAttachmentFilesIncremental.
De SQL-syntax is dan:
--
-- Selecteer alle administraties (zie ook https://forums.invantive.com/t/administratie-s-selecteren-voor-een-invantive-cloud-database/2501).
--
use all@eol
create or replace tabel1@sqlserver
as
select *
from NAAM1@eol
...
create or replace tabel999@sqlserver
as
select *
from NAAM999@eol
Performance
In het geval er meerdere administraties geselecteerd zijn, dan worden de administraties massief parallel verwerkt (met standaard een parallellisatie van 8 administraties). In de praktijk worden gelijktijdig meer administraties verwerkt als er meer dan 8 administraties zijn omdat de rate limit per minuut beperkt is en bij verdere spreiding de doorvoersnelheid verder omhoog gaat. Dit hangt af van de eventueel aanwezige scaleability blocks; bij gebruik van Exact Online Premium scaleability blocks is de rate limit per minuut niet 60 maar bijvoorbeeld 300.
Custom Fields
Voor custom fields uit Exact Online Premium kan gebruik gemaakt worden van de eol_premium package, zoals bijvoorbeeld met een query:
create or replace table AccountCustomFieldValues@sqlserver
as
select cfd.Division
, cfd.Id
, cfd.Code
, cfd.Name
, cfd.INVAN_ExtDemoLoyaltyMember
, cfd.INVAN_ExtDemoLoyaltyCard
, cfd.INVAN_ExtDemoLoyaltyDiscount
, cfd.INVAN_ExtDemoLoyaltyLevel
, cfd.INVAN_ExtDemoLoyaltyRemarks
, cfd.INVAN_ExtDemoContact
from ( select act.Division
, act.Id
, act.Code
, act.Name
, cfd.PropertyName
, cfd.Value
from AccountsIncremental act
left
outer
join CustomFields(division => act.Division, linkId => act.Id, bcName => 'Account') cfd
where act.Division = 135483 /* Of vergelijkbaar */
) act
pivot ( max(act.value)
for act.PropertyName in
( [INVAN_ExtDemoLoyaltyMember]
, [INVAN_ExtDemoLoyaltyCard]
, [INVAN_ExtDemoLoyaltyDiscount]
, [INVAN_ExtDemoLoyaltyLevel]
, [INVAN_ExtDemoLoyaltyRemarks]
, [INVAN_ExtDemoContact]
)
) cfd
De eol_premium package is enkel zichtbaar en beschikbaar als de Exact Online-driver gebruikt wordt op een Exact Online Premium-database. Zie voor meer voorbeelden Open Exact Online Premium SQL Server-database.
Attentie! Exact Online Premium kent momenteel GEEN faciliteiten kent om automatisch en vlot de lijst van velden en hun eigenschappen op te vragen (de zogenaamde “metadata”). Advies is om het XML-bestand te raadplegen waar de Flex-definities in staan binnen Exact Online Premium. We hopen Exact te kunnen bewegen de metadata ook via API’s aan te gaan bieden.
Performance
De performance van het ophalen en muteren van custom fields is laag. Exact Online Premium biedt in tegenstelling tot andere cloudoplossingen enkel een mogelijkheid om per record de waardes op te halen, waarbij er 1 API-call per record nodig is (die wel geparalleliseerd kunnen worden). Dit limiteert de doorvoersnelheid voor 1 administratie tot gemiddeld maximaal 1500 rijen per minuut (uitgaande van 5 custom field values per record en 300 calls per minuut). Voor de records zelf is een doorvoersnelheid van honderdduizenden rijen per minuut haalbaar.
Advies is om samen met de consultant die u helpt bij de gratis uitlegsessie te kijken hoe de custom field values zo efficient mogelijk opgehaald kunnen worden, bijvoorbeeld door incrementeel te werken, de frequentie te verlagen of verticaal te filteren.
Eventueel kan overwogen worden te kijken of na goedkeuring door Exact een rechtstreekse koppeling met SQL Server gebruikt mag worden. Het gebruik hiervan is beschreven in het gekoppelde artikel over eol_premium.
Versies
Advies is om gebruik te maken van een recente 24.0-release zoals 24.0.295. Op Invantive Cloud zal altijd een recente release in gebruik zijn; voor bestaande Data Hub-omgevingen kan het nodig zijn om een upgrade te plaatsen.