Hoe dump ik alle data van een administratie in Exact Online

Ik wil een dump maken van alle data vanuit een EOL-administratie.

Hoe doe ik dat?

Het ophalen van alle data (voor zover beschikbaar via een REST API) kun je doen met het volgende script. Dit haalt alle tabellen op uit Exact Online en schrijft die weg naar de map met documenten onder Windows. Bovendien maakt ie een subfolder aan waarin alle Exact Online documenten gedumpt worden.

Je kunt dit uitvoeren met Query Tool of Data Hub of Invantive Control for Excel:

local remark
local remark Script to dump all data and documents available through the REST API
local remark to CSV and XLSX files (documents in a separate folder).
local remark

local define DIVISION_CODE "764929"

use ${DIVISION_CODE}

local remark Define a limit such as " limit 100" when you want to restrict the number of rows. Otherwise set to empty string.

local define LIMIT ""

local define OUTPUT_PATH "${system:userdocumentsdirectory}\out"

local define OUTPUT_DOC_PATH "${OUTPUT_PATH}\doc"

local define GENERATED_SQL "${OUTPUT_PATH}\export-generated.sql"

local create directory "${OUTPUT_PATH}"

local create directory "${OUTPUT_DOC_PATH}"

select 'use ${DIVISION_CODE}' 
       stmts
,      '-' full_qualified_name
union
select 'select * from ' 
       || tbe.full_qualified_name
       || '${LIMIT}'
       || chr(13)
       || chr(13)
       || 'local export results as "${OUTPUT_PATH}\' 
       || tbe.full_qualified_name 
       || '.xlsx" format xlsx include technical headers'
       || chr(13)
       || chr(13)
       || 'local export results as "${OUTPUT_PATH}\'
       || tbe.full_qualified_name 
       || '.csv" format csv include technical headers fieldseparator "|"'
       || chr(13)
       || chr(13)
       stmts
,      tbe.full_qualified_name
from   SYSTEMTABLES@DataDictionary tbe
where  tbe.provider_name = 'ExactOnlineAll'
and    tbe.can_select    = true
and    tbe.TYPE          = 'table'
and    tbe.catalog       = 'ExactOnlineREST'
and    tbe.schema
       not in 
       ( 'Unsupported'
       , 'DataDictionary'
       , 'Accountancy'
       , 'ContinuousMonitoring'
       , 'License'
       , 'Sync'
       , 'Views'
       , 'Webhooks'
       )
and    tbe.full_qualified_name 
       not in
       ( 'ExactOnlineREST.CRM.Accounts'
       , 'ExactOnlineREST.CRM.Addresses'
       , 'ExactOnlineREST.CRM.AddressesRead'
       , 'ExactOnlineREST.CRM.BankAccountsRead'
       , 'ExactOnlineREST.CRM.Contacts'
       , 'ExactOnlineREST.CRM.ContactsRead'
       , 'ExactOnlineREST.CRM.Quotations'
       , 'ExactOnlineREST.Documents.DocumentAttachmentFiles'
       , 'ExactOnlineREST.Documents.DocumentAttachments'
       , 'ExactOnlineREST.Documents.Documents'
       , 'ExactOnlineREST.Financial.GLAccounts'
       , 'ExactOnlineREST.Financial.GLClassifications'
       , 'ExactOnlineREST.FinancialTransaction.TransactionLines2'
       , 'ExactOnlineREST.FinancialTransaction.TransactionLines'
       , 'ExactOnlineREST.Logistics.Items'
       , 'ExactOnlineREST.Logistics.ItemsRead'
       , 'ExactOnlineREST.Logistics.SalesItemPrices'
       , 'ExactOnlineREST.SalesInvoice.SalesInvoiceLines'
       , 'ExactOnlineREST.SalesInvoice.SalesInvoices'
       , 'ExactOnlineREST.SalesOrder.GoodsDeliveries'
       , 'ExactOnlineREST.SalesOrder.GoodsDeliveryLines'
       , 'ExactOnlineREST.SalesOrder.SalesOrderLines'
       , 'ExactOnlineREST.SalesOrder.SalesOrders'
       , 'ExactOnlineREST.SalesOrder.SalesOrderStockBatchNumbers'
       , 'ExactOnlineREST.SalesOrder.SalesOrderStockSerialNumbers'
       , 'ExactOnlineREST.CRM.DossierDocumentFolderContent'
       , 'ExactOnlineREST.Mailbox.MailMessagesReceivedByMailbox'
       , 'ExactOnlineREST.Documents.DocumentAttachmentFilesBulk'
       )
order
by     full_qualified_name

local export results as "${GENERATED_SQL}" format txt columns stmts exclude headers

local remark Needed on releases upto 20.0 since for instance BankLinks raises a 403 instead of returning no data.

set ignore-http-403-errors true

local remark Needed when some of the documents can no (longer) be retrieved.

set ignore-document-download-errors true

use ${DIVISION_CODE}

--
-- Dump all documents to a folder.
--
select AttachmentFromUrl
,      ID || '-' || FileName
       OutputFilename
from   ExactOnlineREST.Documents.DocumentAttachmentFilesBulk${LIMIT}

local export documents in AttachmentFromUrl to "${OUTPUT_DOC_PATH}" filename column OutputFilename

local remark Run contents of @@${GENERATED_SQL}.

Het 1e gedeelte van het script, maar een sql-statement aan. Dat werkt. Bij het draaien van het sql-statement, wat de xls bestanden moet genereren, komt de volgende foutmelding naar voren:

Als ik het goed lees in plaatje, dan bevat de gegenereerde Invantive SQL iets van:

    local export results as "c:\apps\invantive\dump eol\out
    || tbe.full_qualified_name
    || .xlsx" format xlsx include technical headers

Dat is geen geldig Invantive Script statement. Het statement hoort gegenereerd te worden door:

       || 'local export results as "${OUTPUT_PATH}\' 
       || tbe.full_qualified_name 
       || '.xlsx" format xlsx include technical headers'

In het script in het formaat local export results as "<PAD>\<TABELNAAM>.xlsx" format xlsx include technical headers. Kun je controleren dat je bovengenoemde query juist overgenomen hebt? Misschien ontbreekt een enkele quote achter ${OUT_PUT_PATH}\ en voor .xlsx?

Zie melding na aanpassing:

Kun je aangeven welk statement deze error veroorzaakt?

De handigste manier is om de inhoud van het tekstveld dat zichtbaar wordt als je op “Toon details” klikt altijd toe te voegen.

Makkelijkste is om nieuwe vragen in een nieuw topic te zetten. Dat zorgt er voor dat vragen en antwoorden bij elkaar staan. Je kunt met links de relatie leggen naar het oorspronkelijke topic.