Voorbeeld: opvolgactie uitvoeren

Sommige klanten hebben hun database zo ingericht dat ze bij elk profiel een collectie van bestellingen bijhouden. Elke keer dat iemand een nieuwe bestelling plaatst, wordt er een subprofiel toegevoegd aan deze collectie door middel van (bijvoorbeeld) een call naar de REST API. En als de status van een bestelling verandert, dan zorgt een andere call naar de REST API er voor dat het subprofiel wordt bijgewerkt.

Met een opvolgactie kun je instellen dat, wanneer een subprofiel wijzigt, er een mail moet worden verstuurd. Echter: dit is alleen relevant als de allerlaatste bestelling van status verandert. Met een javascript-evaluatie-box kun je hiervoor een script schrijven. Dit script controleert of de bestelling inderdaad de laatste bestelling is, en zorgt dat de opvolgactie alleen wordt uitgevoerd indien dit inderdaad zo is.

Handig om te weten

De volgende variabelen zijn al beschikbaar in het script, omdat ze door de opvolgactie zelf alvast zijn aangemaakt:

  • subprofile: het gewijzigde subprofiel (dit is dus de bestelling die net is gewijzigd)
  • profile: het klantprofiel (met daarin een collectie van alle bestellingen)

In het script zoeken we een bestelling die nieuwer is. Als die bestaat, dan is de opvolgactie gestart door een eerdere bestelling (en dus niet de nieuwste), en voeren we de opvolgactie niet verder uit.

Het script

// de datum van de bestelling waardoor de opvolgactie is opgestart
const besteldatum = Date.parse(subprofile.fields.besteldatum);

// we gaan de laatste bestelling zoeken in de collectie 'bestellingen'
const collection = profile.collections.bestellingen;

// alle eerdere bestellingen
const bestellingen = profile.subProfiles(collection);

// doorloop alle bestellingen om te zien of er wellicht al een nieuwere bestelling is
for (const i in bestellingen) {

    // stop het bestelling-subprofiel in een variabele
    const bestelling = bestellingen[i];

    // als deze bestelling _later_ is dan de bestelling die de opvolgactie heeft 
    // getriggered, dat willen niet verder met de opvolgactie
    if (Date.parse(bestelling.fields.besteldatum) > besteldatum) return false;
}

// er is geen nieuwere bestelling gevonden, dus de opvolgactie is inderdaad gestart
// door de nieuwste bestelling, en we kunnen de rest van de opvolgactie uitvoeren
return true;