Influx for Exact Online · Manual

Set up the Exact Online connector

Everything you need to connect one or more Exact Online administrations to Salesforce, decide which data flows where, and automate it with Salesforce Flow.

Before you start

How the connector works

You configure the connector entirely with records in Salesforce, in the Exact Configuration app. Three configuration layers build on each other, and data moves in two directions.

LayerWhat it definesYou create
Session ConfigurationWhich Exact Online administration you connect to, and when the batch runsOne per administration
Object ConfigurationWhich Salesforce object maps to which Exact Online endpoint, and in which directionOne per object and method
Field ConfigurationWhich fields are mapped within an Object ConfigurationOne per mapped field

Checklist

  • The Influx package is installed and you can open the Exact Configuration app.
  • You have an Exact Online user with rights to the administration(s) you want to connect.
  • Every Salesforce object you want to sync has a text field marked as External ID for the Exact Online ID.
  • You have the Exact Online API documentation at hand to look up endpoints and field names.
Step 1

Session Configuration

Set up one or more Exact Online administrations and authorise them with Salesforce. This is the starting point: each administration must be securely connected before any data can be synchronised.

Exact Configuration › Session Configuration › New

FieldDescription
Session Configuration NameA name of your choice. We recommend the connector name plus the Salesforce org, e.g. Exact Online - Resolve IT.
External ApplicationRecords which external system this Salesforce org syncs with.
Division CodeThe code of the Exact Online administration. A separate code per session lets you open multiple connections from one Salesforce org.
Division NameA readable name for the administration, useful when you connect several.
Cron StringSchedules the batch that retrieves data (GET) for this session. Example, every day at 21:00: 0 0 21 * * ?. The field’s help text lists more options.
MarketThe country where your Exact Online database is hosted, e.g. NL.
Start URLThe start URL for that market: NL https://start.exactonline.nl · BE https://start.exactonline.be · FR https://start.exactonline.fr · DE https://start.exactonline.de
Client ID & Client SecretLeave both empty. They are filled in automatically when you save the record.
Session Configuration record with name, external application, cron string, market, division code, division name and start URL
A Session Configuration after saving. The Client ID and Secret are generated for you.
About the Client ID and Secret: they can’t be reused by other customers. Access to your administration is only granted when you sign in with your own Exact Online credentials during authorisation (below). Make sure that user has full access to every object you want to synchronise.

Finding the Division Code

  1. 1

    In Exact Online, click your company name at the top and select the administration you want to connect.

    The Exact Online company menu with a recently used company highlighted
  2. 2

    Copy the Division Code from your browser’s address bar: the number after _Division_=.

    Address bar with the division code highlighted at the end of the URL

💡 Multiple administrations? Create one Session Configuration per administration. Object Configurations belong to a session, so each administration gets its own set of mappings.

Authorising the session

Make sure you’re already signed in to Exact Online before you start.

  1. 1

    Renew Token

    On the new Session Configuration, click Renew Token. You’re sent to Exact Online’s authorisation page. Click Toestaan (Allow) to give Influx access.

    Exact Online asking permission to access the Exact Online environment, with Allow and Deny buttons
  2. 2

    Select the package

    When asked which package to use, select Influx. Only choose Custom if you know you’re using a custom package.

    'Select the Package' prompt with the options Custom and Influx
  3. 3

    Sign in to Salesforce

    Sign in to Salesforce to complete the connection. Working in a Sandbox? First change login.salesforce.com in the address bar to test.salesforce.com, press Enter and sign in with your Sandbox credentials.

    Address bar with the login prefix of login.salesforce.com highlighted

Scheduling the batch

Once authorisation is complete and the Cron String is filled in, open the Session Scheduler tab on the Session Configuration and click Session Status. This schedules the batches; if they’re already scheduled, you’ll see a message that the batches are active. Reschedule Session schedules the batches again, for example after you change the cron string.

Session Configuration with the Session Scheduler tab and the Session Status and Reschedule Session buttons
Step 2

Object Configuration

Choose which objects you synchronise between Salesforce and Exact Online. Only objects you enable take part.

Exact Configuration › Object Configurations › New

FieldDescription
1 Salesforce ObjectAPI name of the Salesforce object, e.g. Account.
2 Exact ObjectAPI name of the Exact Online entity, e.g. Accounts.
3 External IDAPI name of the Salesforce field that stores the ID coming from Exact Online. The field must be marked as External ID in its field settings, otherwise it isn’t recognised.
4 Endpoint URLThe Exact Online endpoint for this entity, taken from the API documentation. Make sure it matches the operation you want to perform; {division} is filled in from the session.
5 Is ActiveOnly active configurations are picked up by the scheduled batch.
6 MethodGET: retrieves data from Exact Online into Salesforce. POST: creates records in Exact Online. PUT: updates existing records in Exact Online.
7 API Type (GET only)The type of Exact Online API used to retrieve data, e.g. Sync together with a sync endpoint.
8 Priority (GET only)The order in which configurations run in the nightly batch. Retrieve parent data first (e.g. accounts before invoices) so relationships can be resolved.
9 Timestamp (GET only)The moment of the last successful retrieval. The next run only fetches data changed after this timestamp.
Object Configuration for Account with numbered markers 1 to 9 next to the fields
A GET configuration that retrieves accounts via the sync endpoint. The numbers match the table above.
Changed a GET mapping? Clear the Timestamp field. Otherwise only records changed after the stored timestamp are retrieved, and existing records never receive the new field values.
Step 3

Field Configuration

Define which fields are included for each object. Map only the data that matters to keep the integration fast and clean.

Exact Configuration › Field Configurations › New

FieldDescription
ERP field API NameAPI name of the field in the Exact Online entity, as listed in the API documentation.
Salesforce FieldAPI name of the Salesforce field linked to the Exact field. For POST and PUT, the value is read from the record and sent to Exact Online.
Fixed value (POST / PUT)Sends a static value instead of a field value from the record. Useful for defaults that are the same for every record.
Reference fieldTick this when the value comes from a lookup relationship in Salesforce.
Parent Object APIAPI name of the parent object in the lookup relationship.
Parent External IDAPI name of the External ID field on the parent object. Example: a contact references its account’s Exact Online ID via Contact → Account → External ID.
Field Configuration mapping the Exact field Status to influx__Account_Status__c, with fixed value C
A regular mapping: Exact field Status, Salesforce field influx__Account_Status__c and fixed value C.
Field Configuration with Reference field checked, Parent Object API Account and Parent External ID influx__Exact_Online_ID__c
A reference mapping: the Exact field Account receives the Exact Online ID of the related Salesforce account.

For a full overview of the fields available per entity, see the Exact Online API documentation.

Step 4

Salesforce Flow actions

Data sent from Salesforce to Exact Online is always triggered by a Salesforce Flow. That way you decide exactly when and under which conditions information is pushed, in line with your own processes. The connector adds Apex actions for this that you use in record-triggered flows and screen flows.

Action in Flow BuilderUse it for
Exact Online Single ObjectsSending one record, such as an account, address or bank account4.1
Exact Online Single Objects with outputAs above, with the response returned to the Flow4.1
Exact Online Nested ObjectsSending a header with lines, such as an invoice, order or sales entry4.2
Exact Online Nested Objects with outputAs above, with the response returned to the Flow4.2
Exact Online Nested Objects - BulkSending many nested records at once, within the rate limit4.2.1
Exact Online Print Sales InvoiceProcessing an invoice after it has been created (email, Peppol)4.3
Exact Online Print Sales Invoice - BulkProcessing many invoices at once4.3.1
Exact Online - Update Single RecordRetrieving one record from Exact Online on demand (GET)4.4
Flow Builder search results showing the Exact Online actions
Search for “Exact” when adding an Action element.
Finding configuration IDs: the actions ask for the Salesforce ID of an Object or Session Configuration. Open the configuration record and copy the ID from the URL, or look it up dynamically with a Get Records element in the Flow. We recommend the latter when you work with multiple administrations.
Object Configuration record in Salesforce with the record ID visible in the URL
The record ID is the part of the URL after influx__Object_Configuration__c/.
“With output” actions: these return Exact Online’s response to the Flow, so you can handle errors inside the Flow itself. They only work on the asynchronous path of a record-triggered flow (enable Add Asynchronous Path on the Start element).

4.1 · Send single records (POST / PUT)

For objects without lines: accounts, addresses, bank accounts and similar records. The Object Configuration you pass in determines whether a record is created (POST) or updated (PUT).

  1. 1

    Create a record-triggered flow on Account and add an asynchronous path.

  2. 2

    Set the entry conditions. In this example, the account is only sent when Clean Status equals In Sync. Any condition or query works; send the record once the result is right.

    Record-triggered flow on Account with the action on the Run Asynchronously path and entry condition Clean Status equals In Sync
  3. 3

    Add the action Exact Online Single Objects with output. Set Salesforce Id for the Entry Record to the triggering account’s ID ({!$Record.Id}) and Salesforce Id for the object configuration to the ID of the Account POST configuration.

    Exact Online Single Objects with output action with the entry record and object configuration inputs

    Outputs: Result Details, Status Message.

  4. 4

    Save and activate the Flow. The Apex class handles the rest.

4.2 · Send nested records (POST / PUT)

For a header with child lines: invoices with invoice lines, orders with order lines, sales entries with entry lines. You pass one configuration for the header and one for the lines.

InputValue
Salesforce Id for the Entry RecordThe invoice record ID
Salesforce Id for the object configurationID of the invoice (header) configuration
Salesforce Id for the child object configurationID of the invoice line configuration

Outputs (with output variant): Exact Number, Result Details, Status Message.

Exact Online Nested Objects with output action named Send Invoice to Exact, filled from Get Records elements
The configuration IDs come from Get Records elements earlier in the Flow.

4.2.1 · Send nested records in bulk

Exact Online allows 60 calls per minute. A record-triggered flow quickly exceeds that when many records are sent at once. The bulk action processes each record separately with a short delay, so every record is handled regardless of the quantity.

InputValue
recordIds *A text collection of record IDs, e.g. collInvoiceIdsNetherlands
objectConfigId *ID of the header configuration
childObjectConfigId *ID of the line configuration
exactNumberFieldApiName *The field the EntryNumber is written back to, which Exact returns for invoices, orders, sales entries and purchase entries, e.g. Name.

Outputs: message, status.

Exact Online Nested Objects - Bulk action with childObjectConfigId, exactNumberFieldApiName set to Name, objectConfigId and recordIds as a collection
Processing takes time: records are processed one by one. Before resubmitting records, check that they aren’t already queued in the bulk batch.

4.3 · Process sales invoices

After an invoice with lines has been created in Exact Online (see 4.2), it still has to be processed: printed, emailed or sent via Peppol. The Exact Online Print Sales Invoice action lets you define how.

InputDescription
Boolean for sending invoice as emailTrue: Exact Online generates the invoice and emails it.
Boolean for sending invoice as PeppolTrue: Exact Online sends the invoice over the Peppol network.
Boolean for sending invoice based on account preferenceTrue: follows the preferred sending method set on the account in Exact Online.
Exact Id for the Invoice RecordExact Online ID of the invoice to process.
Salesforce Id for the Invoice RecordSalesforce ID of the same invoice.
Salesforce Id for the Session configurationDetermines which administration the invoice belongs to.
Exact online ID for document layoutOptional. Sets the invoice document layout.
Exact online ID for email layoutOptional. Sets the email template.
Exact Online Print Sales Invoice action with only the invoice IDs and the Session Configuration included
A minimal setup: only the invoice IDs and the Session Configuration.
Peppol prerequisites: the customer’s OIN number must be present and validated on the account in Exact Online, and e-invoicing and Peppol registration must be completed in Exact Online’s general settings.

💡 Document and email layouts require their Exact Online IDs. Retrieve the layouts into Salesforce first (with a GET configuration), then reference them in the Flow.

Exact Online interrupts multiple simultaneous print calls even sooner than regular updates. The bulk action handles each invoice separately with a short delay.

  1. 1

    Group invoices by processing method

    The bulk action’s settings apply to every invoice in the collection, so build one collection per combination, e.g. Dutch entity via Peppol and Belgian entity via email. A Loop with a Decision per entity and method works well.

    Flow loop over selected invoices with a Decision into NL Peppol, NL Email, BE Peppol and BE Email
  2. 2

    Fill two text collections per group

    Use Assignment elements: one collection for Salesforce record IDs (e.g. collInvoiceIdsNLPeppol) and one for Exact IDs (e.g. collInvoiceExactIdsNLPeppol).

    Assignment element adding the current invoice's record ID and Exact ID to two collections
  3. 3

    Add the bulk action per group

    Use Exact Online Print Sales Invoice - Bulk with the inputs below.

    Exact Online Print Sales Invoice - Bulk action with collections for exactIds and recordIds, session, layouts and Peppol set to True
InputValue
recordIds *Collection of Salesforce invoice IDs
exactIds *Collection of Exact Online invoice IDs
sessionConfigId *ID of the Session Configuration for this administration
documentLayoutExact Online ID of the document layout
emailLayoutExact Online ID of the email template
sendEmailToCustomerTrue / False
sendInvoiceViaPeppolTrue / False
sendOutputBasedOnAccountTrue / False
Processing takes time: invoices are processed one by one. Before resubmitting, check that they aren’t already queued in the print batch.

4.4 · Retrieve one record by Flow (GET)

GET configurations normally run through the scheduled batch (see the cron string in step 1). Need up-to-date data from Exact Online right away? Use the Exact Online - Update Single Record action to retrieve a single record.

InputValue
exactId *The Exact Online ID stored on the Salesforce record
exactIdFieldName *API name of the field that identifies the record in Exact Online, e.g. ID
objectConfigurationId *ID of the Object Configuration with the GET method
salesforceId *ID of the Salesforce record to update

Outputs: exactId, message, salesforceId, success (true/false).

Exact Online - Update Single Record action with exactId, exactIdFieldName set to ID, objectConfigurationId and salesforceId
Step 5

Error component

Add the error component to your record pages, so users see what went wrong during synchronisation, right where they work.

  1. 1

    Open a record of the object, click the gear icon and choose Edit Page to open the Lightning App Builder.

  2. 2

    On the left, under Custom, find the viewrecorderrors component.

    The viewrecorderrors component in the list of custom components
  3. 3

    Drag it onto the page. The top of the right-hand column keeps errors visible, but choose whatever spot suits your users. Save and activate the page.

    Invoice record page with the Error log component in the right-hand column, showing High and Medium sections

Reading the error log

Each error shows the message, its origin (the Apex class) and the date and time. Errors are sorted by priority:

PriorityExampleBehaviour
HighUnauthorized: the connection to Exact Online is no longer validAlso shown as a warning toast the first time the record page is opened
MediumUser errors, such as an entry number that’s already in useShown in the component
Expanded Error Log with a High error 'Authorization failed' and a Medium error 'In use: Entry number'
Record page with an orange warning that an error occurred from the API, and the Error Log component
A high-priority error also appears as a warning toast.
Automatic cleanup: error messages are deleted automatically after 14 days, and disappear as soon as a transaction on the same record succeeds.
Reference

Response codes & fixes

The Exact Online API returns an HTTP status code for every call. The error component shows this code together with Exact’s message.

CodeMeaningWhat it tells you
200OKGET succeeded. An empty result can also mean the user lacks rights to that data.
201CreatedPOST succeeded.
204No ContentPUT or DELETE succeeded.
400Bad RequestThe request is malformed. Fix the mapping before retrying.
401UnauthorizedAuthentication is invalid or expired.
403ForbiddenThe linked user lacks rights, or has no access to the administration.
404Not FoundThe requested record doesn’t exist.
408Request TimeoutThe request took too long.
429Too Many RequestsExact Online API limits were exceeded.
500Internal Server ErrorUsually a functional validation error from Exact Online.
503Service UnavailableExact Online is temporarily unavailable.
400 Bad request
  • Mandatory filter missing: some endpoints require a $filter parameter on GET. Check the endpoint in the API documentation.
  • Wrong data type: e.g. comparing a GUID with a number. Check the field types in your Field Configuration.
  • Invalid property: an ERP field API Name doesn’t exist on that entity. Check spelling and casing.
  • Token refreshed too early: an access token is valid for 10 minutes and can only be refreshed after 570 seconds. Wait and retry.
401 Unauthorized
  • The access or refresh token has expired or was already used. Re-authorise the Session Configuration with Renew Token.
  • Several authorisations were started for the same connection; only the latest is valid. Re-authorise once.
403 Forbidden
  • Insufficient rights: check the linked user’s rights in Exact Online under My Exact Online › Rights.
  • Wrong administration: check the Division Code on the Session Configuration.
  • Administration not permitted for the app: add the company via My Exact Online › Security centre › my app’s permissions.
  • Inactive user: reactivate the linked user in Exact Online.
  • Administration blocked or archived: during a backup or database move, wait until it finishes. Archived administrations can’t be accessed.
  • Licence: not every endpoint is available in every Exact Online package. Check the endpoint in the API documentation.
408 Timeout
  • The request is too broad or the administration is very large. Map fewer fields, or use Exact’s sync endpoints for large GET volumes.
429 Too many requests
  • Use the bulk actions (4.2.1, 4.3.1) when many records are sent at once. See also Exact’s API limits.
500 Internal server error
  • Usually the same validation error a user would see in Exact Online itself, e.g. a record that can’t be deleted because it’s used elsewhere. Read the message in the error component.
  • A generic “A problem has occurred” message usually points to an issue on Exact’s side. Report it to Exact API Support with the reference number (within 24 hours).
503 Service unavailable
  • Exact Online runs maintenance daily between 04:00 and 04:30 (CET). Don’t schedule the batch in that window.
  • Otherwise, retry later.

Need help?

Our consultants are happy to help you set up the connector.