Datasets Handleiding

Configureren van databronnen voor API's en webhooks

Wat is een Dataset?

Een dataset is de basis van SQLio. Het bepaalt welke data uit je database beschikbaar wordt gesteld aan API endpoints en webhooks. Je definieert één keer welke tabellen, views of stored procedures je wilt gebruiken, welke velden je wilt tonen en hoe je de data wilt filteren. Daarna kun je diezelfde dataset hergebruiken bij meerdere API's en webhooks.

Een dataset levert altijd JSON op. De structuur van die JSON bepaal je zelf door middel van layers (lagen). Hiermee kun je eenvoudige platte lijsten maken, maar ook complexe geneste structuren met hoofd- en detailgegevens.

Instructievideo: dataset Verkooporders met orderregels en klantgegevens aanmaken, testen en op een tweede databron laten draaien.

Dataset aanmaken

Stap 1: Navigeer naar Dataset Configuratie

Klik in het menu op Dataset Configuratie. Je ziet een overzicht van alle bestaande datasets.

Stap 2: Klik op "Nieuw"

Bovenaan verschijnt een formulier met de volgende velden:

Veld Verplicht Toelichting
Naam Ja Unieke naam voor de dataset, bijvoorbeeld "Klanten" of "Order gegevens"
Databron Ja De connectie-alias waartegen je de dataset bouwt, bijvoorbeeld nl. Uit deze database komen de tabellen, views en velden die je kunt kiezen. Zie ook Databronnen hieronder.
Groep Nee Ordent datasets in het overzicht en in keuzelijsten, bijvoorbeeld "Verkoop" of "Klanten".
Omschrijving Nee Korte beschrijving van het doel van de dataset
Status Nee Actief/Inactief toggle. Alleen actieve datasets kunnen gebruikt worden in API's en webhooks
Formulier Nieuwe Dataset
Nieuwe dataset Verkooporders op databron nl, in groep Verkoop.

Stap 3: Opslaan

Klik op Opslaan. De dataset is nu aangemaakt, maar bevat nog geen data-configuratie. Daarvoor moet je een layer toevoegen.

Bij elke keer opslaan vraagt SQLio om een versie en een korte notitie; zie Versioning.

Databronnen: één dataset, meerdere databases

In de kaart Geldig voor databronnen vink je aan op welke connectie-aliassen de dataset mag draaien. De ster markeert de databron waartegen je de dataset bouwt en test. Vink je een tweede alias aan, bijvoorbeeld de Belgische vestiging be, dan draait dezelfde definitie ook op die database, mits de tabellen en velden daar hetzelfde heten.

Geldig voor databronnen met nl en be aangevinkt
De dataset is gebouwd op nl (ster) en mag ook draaien op be.

De koppeling ligt op de alias, niet op de database. Synchroniseer je de dataset naar productie, dan blijft de lijst gelden: nl wijst daar naar de productiedatabase van de Nederlandse vestiging. Zie de handleiding Omgevingen & aliassen.

Layers: de bouwstenen van je dataset

Wat is een layer?

Een layer is één databron binnen je dataset. Elke layer verwijst naar een tabel, view of stored procedure en bepaalt welke velden daaruit worden opgehaald. Layers kunnen hiërarchisch worden opgebouwd: een root layer (hoofdlaag) met daaronder één of meer child layers (sublagen).

Hiërarchie voorbeeld

Dataset: "Order overzicht"
├── Root Layer: Orders (tabel)
│   ├── Child Layer: Orderregels (tabel)
│   └── Child Layer: Klantgegevens (tabel)

Dit levert de volgende JSON structuur op:

{
  "orderId": 100,
  "orderDate": "2024-01-15",
  "orderregels": [
    { "artikelNr": "A001", "aantal": 5, "prijs": 12.50 },
    { "artikelNr": "A002", "aantal": 2, "prijs": 8.00 }
  ],
  "klant": {
    "naam": "ACME Corp",
    "stad": "Amsterdam"
  }
}

Root layer toevoegen

Klik op Root Layer Toevoegen in de "Layer Structuur" kaart. Er verschijnt een formulier.

Nieuwe root layer Orders
Root layer Orders op tabel dbo.Verkooporders, alle velden geselecteerd.

Child layer toevoegen

Klik op het + icoon naast een bestaande layer. De child layer wordt automatisch gekoppeld aan de gekozen parent layer.

Child layer Klant
Child layer Klant als Object, gekoppeld met een LEFT JOIN op KlantNr.

Layer configureren

Basisinstellingen

Veld Opties Toelichting
Layer Naam Vrije tekst Naam van de layer. Dit wordt ook de sleutelnaam in de JSON output (bijv. "orderregels")
Bron Type Table / View / StoredProcedure Bepaalt waar de data vandaan komt
Output Type Object / Array / Merge Bepaalt hoe de data in de JSON verschijnt
Volgorde Nummer Bepaalt de volgorde bij meerdere layers op hetzelfde niveau

Bron Type: Table of View

Als je Table of View kiest, verschijnen extra velden:

Veld Toelichting
Tabel / View Doorzoekbaar keuzevenster met alle tabellen of views uit de databron, inclusief schema (bijv. dbo.Verkooporders)
JOIN Type (alleen bij child layers) INNER, LEFT of FULL OUTER — bepaalt hoe de child aan de parent wordt gekoppeld

Bron Type: Stored Procedure

Als je Stored Procedure kiest, verschijnt een tekstveld voor het Execution Statement:

EXEC dbo.sp_GetOrders
    @CustomerId = :CustomerId,
    @FromDate = :FromDate,
    @IncludeInactive = 0
■ Tip: Gebruik :parameterNaam voor dynamische waarden (komen uit de API-aanroep of de parent layer). Gebruik vaste waarden direct (zoals 0, N'tekst') voor hardcoded parameters.

Output Types

Het output type bepaalt hoe de data van een layer in de JSON verschijnt:

Object

De layer levert één record op als JSON object met een eigen sleutel.

{
  "klant": {
    "naam": "ACME Corp",
    "stad": "Amsterdam"
  }
}

Gebruik voor: detailgegevens, enkele opzoekwaarden.

Array

De layer levert meerdere records op als JSON array met een eigen sleutel.

{
  "orderregels": [
    { "artikelNr": "A001", "aantal": 5 },
    { "artikelNr": "A002", "aantal": 2 }
  ]
}

Gebruik voor: lijsten van gerelateerde items (orderregels, factuurregels, etc.).

Merge

De velden van de layer worden samengevoegd met de parent layer. Er komt geen aparte sleutel in de JSON.

{
  "orderId": 100,
  "orderDate": "2024-01-15",
  "telefoon": "020-1234567",
  "email": "info@acme.nl"
}

In dit voorbeeld komen telefoon en email uit een child layer met output type Merge. Ze verschijnen alsof ze bij de parent horen.

Gebruik voor: extra kolommen uit een andere tabel toevoegen aan de parent, zonder nesting.

Veld selectie

Na het kiezen van een tabel of view verschijnt de Veld Selectie kaart. Hier zie je alle beschikbare kolommen.

Kolommen in de veld selectie tabel

Kolom Toelichting
Checkbox Vink aan om het veld op te nemen in de JSON output
Source Veld De originele kolomnaam uit de database
Output Naam De naam in de JSON response — pas deze aan om een leesbaardere naam te gebruiken
Type Het SQL datatype (INT, NVARCHAR, DATETIME, etc.)
Volgorde Bepaalt de positie in de JSON output

Velden hernoemen (aliassen)

Je kunt de Output Naam aanpassen om database-kolomnamen te vertalen naar leesbare JSON-veldnamen:

Database kolom Output naam JSON resultaat
CustId klantnummer "klantnummer": "K001"
OrdDate besteldatum "besteldatum": "2024-01-15"
Descr omschrijving "omschrijving": "Levering Q1"
■ Tip: Als je geen enkel veld aanvinkt, worden alle velden automatisch opgenomen in de output. Zodra je minimaal één veld selecteert, worden alleen de geselecteerde velden getoond. Primary key velden worden geel gemarkeerd en staan altijd bovenaan.

Filters en condities

WHERE-condities (root layers — Table/View)

Bij root layers op basis van een tabel of view kun je WHERE-condities toevoegen om de data te filteren. Klik op Conditie toevoegen.

Elke conditie-regel heeft de volgende opties:

Kolom Toelichting
( Optioneel: groepeer condities met haakjes
Veld De kolom waarop je wilt filteren
Conditie Vergelijkingsoperator: =, !=, >, <, >=, <=, LIKE, NOT LIKE, IN, NOT IN, BETWEEN, IS NULL, IS NOT NULL
Parameter Dynamische waarde uit de API-aanroep, bijvoorbeeld :klantnummer
Waarde Vaste waarde (als je geen parameter gebruikt)
Verbinding AND of OR — logische koppeling met de volgende conditie
) Optioneel: sluit groepering
Required Verschijnt alleen bij parameters — als aangevinkt is de parameter verplicht bij het aanroepen

Voorbeeld: filteren op klantnummer (dynamisch)

Veld Conditie Parameter Required
CustId = :klantnummer Ja

Als iemand de API aanroept met parameter klantnummer=K001, wordt de query:

SELECT ... FROM Customers WHERE CustId = 'K001'

Voorbeeld: vaste filter

Veld Conditie Waarde
IsActive = 1

Dit filter wordt altijd toegepast — de aanroeper kan het niet wijzigen.

WHERE-conditie met parameter KlantNr
Parameter KlantNr zonder vinkje bij Required: de aanroeper mag hem meegeven, maar hoeft niet.

JOIN-condities (child layers — Table/View)

Bij child layers op basis van een tabel of view definieer je hoe de child aan de parent gekoppeld wordt. Dit werkt als een JOIN in SQL.

Kolom Toelichting
Child Veld Kolom in de child tabel
Operator Meestal =
Parent Veld Kolom uit de parent layer (dropdown toont alleen geselecteerde parent velden)

Voorbeeld

Een child layer "Orderregels" gekoppeld aan parent layer "Orders":

Child Veld Operator Parent Veld
OrderId = OrderId

SQLio voert dan voor elke order-rij een query uit op de orderregels waar Orderregels.OrderId = Orders.OrderId.

Stored Procedure parameters

Bij layers van het type Stored Procedure worden de parameters automatisch gedetecteerd uit het Execution Statement. Per parameter kun je instellen:

Kolom Toelichting
SP Parameter De parameternaam (automatisch gedetecteerd)
Bron Type ParentField (waarde uit parent layer), InputParameter (uit API-aanroep), of StaticValue (vaste waarde)
Bron Waarde De daadwerkelijke waarde of veldnaam
Required Of de parameter verplicht is

Opties

Optie Toelichting
Wrap root-array in object Alleen bij een root layer met output type Array. Uit: de output is een lijst [{ ... }]. Aan: { "orders": [{ ... }] }, handig voor systemen die geen lijst als hoofdelement accepteren.
NULL-waarden weglaten Velden met een NULL-waarde worden uit de JSON verwijderd. Geldt voor API, webhook en test.

Testen van je dataset

Test JSON

Nadat je de dataset hebt opgeslagen, kun je deze testen met de knop Test JSON.

  1. Klik op Test JSON (alleen beschikbaar als er geen onopgeslagen wijzigingen zijn)
  2. Er opent een popup met de databron en invoervelden voor alle parameters
  3. Kies de databron waarop je wilt testen (bij meerdere aangevinkte aliassen)
  4. Vul testwaarden in (bijvoorbeeld een bestaand klantnummer)
  5. Klik op Uitvoeren
  6. Je ziet het JSON resultaat zoals een API of webhook het zou ontvangen
Test JSON op databron nl
Test op nl: orders uit de Nederlandse testdatabase.
Test JSON op databron be
Dezelfde dataset op be: Belgische orders en klanten.

De test haalt maximaal 20 records op. Het JSON voorbeeld onder de layers toont de structuur al tijdens het bouwen, ook met niet-opgeslagen wijzigingen.

Wat je controleert

Versioning

Elke dataset heeft een versie en optioneel versienotities:

Veld Toelichting
Versie Versienummer, bijvoorbeeld "1.0", "1.1", "2.0"
Versienotities Korte beschrijving van wat er gewijzigd is

Bij opslaan opent het venster Versie Beheer. Met Versie verhogen maak je een nieuw versienummer; de notitie is optioneel.

Venster Versie Beheer
Versie en notitie bij het opslaan.

De versie wordt als badge getoond in het overzicht. Gebruik dit om bij te houden welke wijzigingen je hebt aangebracht, vooral als de dataset in productie wordt gebruikt.

Dataset overzicht

In het overzicht zie je alle datasets, gegroepeerd per groep. Met Alles open en Alles dicht klap je de groepen open of dicht. Met Importeer JSON laad je een eerder geëxporteerde dataset; SQLio vraagt dan op welke databron hij moet draaien.

Dataset in bewerking met layers en JSON voorbeeld
Groep Verkoop met de dataset Verkooporders: drie layers en het JSON voorbeeld.

Per dataset zie je:

Kolom Toelichting
Naam Naam van de dataset, met de omschrijving eronder
Type Icoon voor het brontype van de root layer (Table, View of Stored Procedure)
Parameters Parameternamen die gebruikt worden in WHERE-condities
Layers Aantal geconfigureerde layers
Status Actief/Inactief toggle
Versie Versiebadge
Acties Bewerken (potlood), Exporteren als JSON (downloadpijl) en Verwijderen (prullenbak)

Compleet voorbeeld: Order dataset met details

Stel je wilt een dataset maken die ordergegevens teruggeeft inclusief orderregels en klantinformatie.

Stap 1: Maak de dataset aan

Stap 2: Root layer — Orders

Selecteer de velden:

Source Veld Output Naam Geselecteerd
OrderId orderId Ja
OrderDate besteldatum Ja
CustomerId klantnummer Ja
TotalAmount totaalbedrag Ja
Status status Ja

Voeg een WHERE-conditie toe:

Veld Conditie Parameter Required
OrderId = :orderId Ja

Stap 3: Child layer — Orderregels

Klik op + naast de Orders layer.

Selecteer de velden:

Source Veld Output Naam Geselecteerd
LineId regelId Ja
ProductCode artikelNr Ja
Quantity aantal Ja
UnitPrice stuksprijs Ja
Description omschrijving Ja

Voeg een JOIN-conditie toe:

Child Veld Operator Parent Veld
OrderId = orderId

Stap 4: Child layer — Klantgegevens

Klik op + naast de Orders layer.

Selecteer de velden:

Source Veld Output Naam Geselecteerd
CustomerName naam Ja
City stad Ja
Phone telefoon Ja

Voeg een JOIN-conditie toe:

Child Veld Operator Parent Veld
CustomerId = klantnummer

Stap 5: Opslaan en testen

Klik op Opslaan en vervolgens op Test JSON. Vul een bestaand orderId in. Het resultaat:

{
  "orderId": 100,
  "besteldatum": "2024-01-15",
  "klantnummer": "K001",
  "totaalbedrag": 74.50,
  "status": "Verzonden",
  "regels": [
    {
      "regelId": 1,
      "artikelNr": "A001",
      "aantal": 5,
      "stuksprijs": 12.50,
      "omschrijving": "Bout M8x40"
    },
    {
      "regelId": 2,
      "artikelNr": "A002",
      "aantal": 2,
      "stuksprijs": 8.00,
      "omschrijving": "Moer M8"
    }
  ],
  "klant": {
    "naam": "ACME Corp",
    "stad": "Amsterdam",
    "telefoon": "020-1234567"
  }
}

Deze dataset kun je nu koppelen aan een API endpoint (GET) of gebruiken als JSON body voor een webhook.

Veelvoorkomende problemen

Probleem Oorzaak Oplossing
"Dataset naam is verplicht" Geen naam ingevuld Vul een naam in
Dataset niet beschikbaar in API/webhook Status staat op Inactief Zet de status toggle op Actief
Child layer geeft geen data JOIN-conditie klopt niet Controleer of het child veld en parent veld correct gekoppeld zijn
Veld verschijnt niet in JSON Veld is niet geselecteerd Vink het veld aan in de Veld Selectie
"Required parameter not found" Verplichte parameter ontbreekt bij aanroep Geef de parameter mee bij het testen of in de API-aanroep
Stored procedure mislukt Execution Statement syntax onjuist Controleer het formaat: EXEC dbo.spNaam @Param = :waarde
Te veel data / trage response Geen of te brede filters Voeg WHERE-condities toe om de dataset te beperken
Permissie waarschuwing bij SP Database gebruiker heeft geen EXECUTE rechten Vraag de DBA om rechten toe te kennen op de stored procedure