Velden
Elke club houdt andere dingen bij. Een vlucht heeft bij de ene club een startwijze en een lierbedienaar, bij de andere ook motorminuten; een vliegtuig heeft een prijs per vluchtminuut; een persoon een contact in geval van nood. Die velden voeg je zelf toe: de custom velden.
Een veld toevoegen
Section titled “Een veld toevoegen”- Ga naar Instellingen › [module], bv. Vliegtuigen, en open Custom velden.
- Klik op toevoegen (of op een bestaand veld om het te wijzigen).
- Vul de Naam in, kies het Type en de opties (zie hieronder).
- Bewaar met Opslaan in de header.


| Instelling | Betekenis |
|---|---|
| Ingeschakeld | Een uitgeschakeld veld is nergens meer zichtbaar (lijsten, formulieren, filters, toegangsregels…), maar de opgeslagen gegevens blijven bewaard. |
| Naam | De naam van het veld. Scripts gebruiken die naam, bv. flight['Passagier/instructeur']. |
| Omschrijving | Uitleg bij het veld. |
| Category | Groepeert velden op het formulier, bv. Administratie of Documenten. |
| Persoonsgegevens (AVG) | Wat voor persoonsgegeven het is: Naam, E-mailadres, Telefoonnummer, Adres, Geboortedatum, Rijksregisternummer, Gevoelige vrije tekst — of Geen persoonsgegevens. Tabbr gebruikt dit om gegevens te anonimiseren. |
| Type | Zie Veldtypes. |
| Toegangscontrole | Wie het veld mag bekijken en bewerken. Leeg = zoals de entiteit zelf. Zie Toegang. |
| Gebruiken bij zoeken | Het zoekvak van een lijst zoekt ook in dit veld. |
| Relevantie conditie | Wanneer het veld van toepassing is — zie hieronder. |
| Default waarde berekening | Een standaardwaarde — zie hieronder. |
| Berekening | Een berekende waarde — zie hieronder. |
Veldtypes
Section titled “Veldtypes”| Type | Voor | Opties |
|---|---|---|
| text | Korte tekst: een code, een immatriculatie. | Meerdere ingaves mogelijk |
| paragraph | Langere tekst: een opmerking. | |
| integer | Een geheel getal: aantal starts. | |
| decimal | Een kommagetal: een prijs per minuut. | |
| boolean | Ja/nee: Clubvliegtuig, Actief. | |
| date | Een datum: Geldig tot, Lid sinds. | |
| email, phone | Een e-mailadres of telefoonnummer, gecontroleerd en genormaliseerd. | |
| national-id | Een rijksregisternummer, opgemaakt. | |
| single-select | Een keuze uit een lijst: Startwijze, Soort. | De keuzemogelijkheden, elk met een waarde en een naam (sleep om te ordenen). |
| entity | Een verwijzing naar een ander record: een persoon, een vliegtuig, een record van een module. | De entiteit, meerdere, Vrije tekstingave mogelijk (bv. +1 of de naam van een gast), en een filter op welke records je kan kiezen. |
| file | Bijlagen: een scan van een ARC, een medical. | meerdere |
| address | Een adres (bij personen). |
Modules voegen er eigen types aan toe, bv. Motorminuten en Contact in geval van nood (Vluchten). De volledige lijst staat in de referentie.
{ "choices": [ { "value": "SP", "name": "Zweefvliegtoestel" }, { "value": "TMG", "name": "TMG" }, { "value": "PP", "name": "Motor" }] }In scripts en filters gebruik je de waarde (SP), de gebruiker ziet de naam (Zweefvliegtoestel).
Velden die slim zijn
Section titled “Velden die slim zijn”Drie kleine scripts maken een veld slim. Een veldscript is een stukje JavaScript waarvan de laatste expressie het
resultaat is. Het record heet naar zijn entiteit: flight, airplane, person, membership…
Relevantieconditie
Section titled “Relevantieconditie”Wanneer het veld van toepassing is. Is de uitkomst false, dan verdwijnt het veld van het formulier — en wordt
een eventuele waarde gewist bij het bewaren.
airplane.soort == 'SP'Standaardwaarde
Section titled “Standaardwaarde”De Default waarde berekening vult een veld voor bij het aanmaken (en wanneer het weer relevant wordt). Wat de gebruiker zelf invult, wordt nooit overschreven.
let startwijze = nullif (flight?.toestel?.soort == 'SP') { startwijze = 'L' }else if (flight?.toestel?.soort == 'TMG') { startwijze = 'TMG' }startwijzeBerekende velden
Section titled “Berekende velden”Een Berekening rekent de waarde uit bij elk bewaren: de gebruiker vult ze niet zelf in.
let start = flight['Motorminuten start'], landing = flight['Motorminuten landing']let motorminuten = (start != null && landing != null) ? landing - start : undefinedif (motorminuten < 0) { throw `'motorminuten landing' moet groter zijn dan 'motorminuten start'`}motorminutenEen throw in een berekening stopt het bewaren en toont de tekst aan de gebruiker: zo maak je een veld
verplicht of controleer je een invoer.
const vorigSeizoen = membership.season - 1count().from('membership') .where(and(filter('owner', EQ, membership.owner), filter('season', EQ, `${vorigSeizoen}`))) .execute() == 0Een lidmaatschap is van een nieuw lid als de persoon geen lidmaatschap had in het vorige seizoen. De querytaal
(count, select, filter…) staat in de script-referentie; ze is er als de
module Conformiteit actief is.
// DBO: een piloot zonder vergunning met een instructeur aan boord;// anders bepaalt de ingegeven vluchtsoort (Training, Examen, Proficiency check…)let classificatie = flight.vluchtSoortconst tweedeInzittende = flight['passagier/instructeur']if (tweedeInzittende != null && !hasAnyRole(flight.piloot, 'Licensed pilot') && hasAnyRole(tweedeInzittende, 'Instructeur')) { classificatie = flight.vluchtSoort ?? 'DBO'}classificatieVereenvoudigd uit een echte club. hasAnyRole komt van de module Toegangsbeheer.
Wijzig je een berekening, dan rekent Tabbr de bestaande records niet vanzelf opnieuw uit. Doe dat met de actie Herbereken velden op een selectie in een lijst (dat kan niet ongedaan gemaakt worden).
Velden van modules
Section titled “Velden van modules”Een veld dat een module meebrengt, toont “Dit veld hoort bij de module …”. Je kan het hernoemen en bepalen wie het ziet, maar niet verwijderen, uitschakelen of van type veranderen.
Achter de schermen
Section titled “Achter de schermen”Tabbr bewaart elk eigen veld in een vrije slot van de entiteit (SLOT1, SLOT2, …). Je kiest die slot niet
zelf, maar je komt hem tegen in de layout van kolommen ({{#SLOT4}}…{{/SLOT4}}) en in de technische weergave van
filters (root:SLOT13). Scripts gebruiken altijd de naam van het veld.