Ga naar inhoud

Jobs en planning

Een job is een script dat op de achtergrond draait: elke week een herinnering sturen aan wie een negatief saldo heeft, elke nacht de statistieken herberekenen, na elke wijziging aan een persoon een synchronisatie. Je stelt ze in onder Instellingen › Job › Job types.

Instelling Betekenis
Naam Scripts starten de job met deze naam.
Omschrijving, categorie Voor jezelf.
Referenced entity Het veld van de job dat het record bevat waarover de job gaat (bv. een persoon). Voeg daarvoor eerst een veld van het type entity toe aan Job (bv. persoon → personen); in het script is het dan job.persoon.
Cron-expressie Optioneel: wanneer de job vanzelf start, bv. 0 8 * * 3 (elke woensdag om 8 uur).
Van toepassing op Een filter: voor welke records er een job komt. Tabbr toont live hoeveel records er nu in aanmerking komen.
Zichtbaar voor Wie de jobs ziet in de sectie Jobs op een record.
Script Wat de job doet. Wat de laatste expressie oplevert, wordt bewaard als resultaat.

Met een cron-expressie én een gekoppelde entiteit start Tabbr op het schema één job per record dat aan de filter voldoet. Zonder gekoppelde entiteit is het één job.

Een lijst van jobs met hun type, status en tijdstip
Een lijst van jobs met hun type, status en tijdstip
  • vanzelf, op de cron-expressie;
  • vanuit een script: jobUtils.triggerJobForEntity('Naam van het jobtype', record) — de job start na het bewaren;
  • met de hand: de actie Trigger job op een record, of Opnieuw uitvoeren op een job.

Een job heeft een status: PENDING → RUNNING → COMPLETED of FAILED (met de fout). Elke job draait apart, in zijn eigen transactie: een fout in de ene raakt de andere niet.

Elke dag: herinnering aan wie zich aanmeldde voor overmorgen
const date = new Date()
date.setDate(date.getDate() + 2)
const signups = select().from('signup').where(filter('activity:date', EQ, date)).execute()
signups.forEach(s => {
if (s.owner != null && s.owner.isEntity()) {
sendEmailByTemplate('Herinnering aanmelding', s.owner, s)
}
})
;({ emailCount: signups.length })
In een hook op personen: synchronisatie na elke wijziging
function onUpdate() {
jobUtils.triggerJobForEntity('ZweefApp persoon sync', person)
}