Wat is een macro?
Een macro is een ingebouwde formule die aan een veld is gekoppeld en die automatisch een waarde berekent of instelt op basis van andere velden in dezelfde of gerelateerde formulieren.
Macro’s zijn programmeerbare expressies die worden gebruikt om waarden dynamisch te evalueren op basis van veldgegevens, voorwaarden en functies. Deze handleiding is verdeeld in twee secties:
Gebruiker: Navigeer naar Configuratie van de veldindeling van de verzameling > Macro bewerken.
Definieer een macro-expressie met behulp van ondersteunde functies en veldverwijzingen. Voorbeeld:
=ALS(F1.LEEFTIJD > 18, “Volwassene”, “Minderjarig”)
De gebruiker kan de macro opslaan als concept of publiceren.
Opmerking: Macro’s die als concept worden opgeslagen, worden niet uitgevoerd tijdens recordbewerkingen. Alleen gepubliceerde macro’s worden geëvalueerd tijdens runtimebewerkingen.
Macrosyntaxis:
Veldreferentie: F1.Veldnaam verwijst naar het veld in de huidige context.
Functies: Voorbeelden zijn ALS, SOM, DSOM, DLOOKUP, EN, OF, NIET.
Basissyntaxis:
Voorbeeld: ADD(10, 5) = 15
Voorbeeld: IF(MARK != null, “Ja”, “Nee”)
Tekenreeksliteralen en aanhalingstekens:
Gebruik dubbele aanhalingstekens " voor tekenreekswaarden:
“Hallo”, “Beheerder”, “Test”
Geldig: IF(NAME == “Beheerder”, “Ja”, “Nee”)
Ongeldig: IF(NAME == ‘Beheerder’, …) Het gebruik van enkele aanhalingstekens ’ wordt niet ondersteund
Booleaanse logica & IF-macrogedrag:
IF-macro ondersteunt:
Expliciete vergelijking: IF(Conditie1 = true, “Ja”, “Nee”)
Impliciete evaluatie: IF(Conditie1, “Ja”, “Nee”)
Geneste expressies:
IF(AND(Var1 > 10, OR(Var2 < 5, Var3 == 20)), “OK”, “NO”)
Beide IF(A, x, y) en IF(A == true, x, y) werken wanneer A een Booleaanse waarde is.
Null-verwerking:
Gebruik het trefwoord null
IF(MARK != null, MARK, “Fallback”)
Genest gebruik: IF(MARK != null, MARK, “D/” + FORMAT(YEAR(IF(ITEM_CREATED != null, ITEM_CREATED, DATE())) - 2000, “00”))
Diepe nesting van logica of macro’s wordt volledig ondersteund:
IF(AND(Var1 > 10, OR(Var2 < 5, Var3 == 20)), IF(NOT(Var4), (Var1 + Var2) * Var3, (Var1 - Var2) / Var3), “not match”)
Met relatiemacro’s zoals DSUM: DSUM(“NUM1”, IF(MARK != null, “MARK = ‘INKOOP’”, “”))
Ondersteunde operatoren in inline-expressies:
Rekenkunde: +, -, *, /, %
Logisch: ==, !=, >, <, >=, <=
Booleaanse macro’s: AND, OR, NOT
Voorwaarden: IS NULL, IS NOT NULL, IN, LIKE, NOTLIKE.
Datumrekenkunde:
DATE1 - DATE2
Retourneert een tijdsbereik. Voorbeeld: DATE(2023, 10, 10) - DATE(2023, 09, 01) = “39.00:00:00”
Speciale karakters
Voor gemakkelijk rekenen kunnen operanden gebruikt worden. Voorbeeld: De macro ‘DATE(2023, 10, 10) + 2’ retouneerd 2023-10-12
Gehele getallen worden altijd als dagen behandeld. Daarnaast kunnen de volgende string waarden worden gebruikt:
| Eenheid | Karakter | Voorbeeld |
|---|---|---|
| Seconden | s | “2s” |
| Minuten | m | “2m” |
| Uren | h | “2h” |
| Dagen | d | “2d” |
| Weken | w | “2w” |
| Maanden | mo | “2mo” |
| Jaren | y | “2y” |
Indien je een macro wilt die de huidige datum pakt en daar 2 maanden en 2 weken aan toevoegd, kun je de volgende macro gebruiken:
Velden als datum
Ook kunnen velden direct gebruikt worden:
Macro-uitvoeringsstroom:
Macro geactiveerd:
Wanneer een recordveld met macro’s wordt aangemaakt of bijgewerkt, wordt de macro-engine aangeroepen.
Tijdelijke aanduiding vervangen:
Veldverwijzingen zoals F1.MARK of F2.AMOUNT worden vervangen met waarden uit:
Dezelfde verzameling (huidige record), of een gekoppelde verzameling (gebruikt de eerste gekoppelde record, gesorteerd op CreatedOn).
Volgorde van macro-uitvoering
Als meerdere velden macro-ingeschakeld zijn:
Afhankelijkheden tussen velden worden opgelost met behulp van topologische sortering.
De uitvoering gaat van onafhankelijke naar afhankelijke velden.
Cyclische afhankelijkheden resulteren in een fout.
Voorbeeld:
F1 = 10
F2 = F1 + 5 = 15
F3 = F2 * 2 = 30
Formule-evaluatie:
Elke macro-expressie wordt geëvalueerd met behulp van de Macro Evaluator. Dit kan ingebouwde macro’s (bijv. IF, DSUM, FORMAT) of externe functies aanroepen.
Resultaattoewijzing:
De berekende waarde wordt naar het doelveld van de record geschreven.
Macropropagatie:
Als het bijgewerkte veld wordt gebruikt in een ander veld met macro-ingeschakeld (zelfs in andere verzamelingen)
worden die afhankelijke macro’s automatisch opnieuw geëvalueerd. Dit zorgt ervoor Cascaderende consistentie in het hele systeem.
Voorbeeld: Het bijwerken van F1 kan leiden tot een herevaluatie van F2, wat vervolgens kan leiden tot een herberekening in F3 van een gerelateerde collectie.












