Creatief met Collections

In wat geavanceerdere Flows zul je vaker te maken hebben met bewerkingen die op verzamelingen records uitgevoerd moeten worden. In dit artikel geef ik je een aantal tips om geavanceerde mogelijkheden van Collections en Loops te benutten.

1 Collection Filter

Het Collection Filter element geeft je de mogelijkheid om een deel uit een Collection te isoleren als een nieuwe groep op basis van criteria en filterlogica, net zoals je die bij een Get Records element kunt. Het grote voordeel is dat je niet een extra query hoeft uit te voeren.

Stel je omgeving heeft een custom object dat Fruit heet. De records hebben een Naam en een Kleur. Aan het begin van je flow haal je gewoon alle Fruit records op. Als je in een bepaald scherm van je flow de gebruiker wilt laten kiezen uit alleen oranje vruchten, gebruik je geen nieuwe Get Records. Je weet immers al dat alle oranje vruchten in de omgeving in de oorspronkelijke Get all Fruits collection voorkomen. Dus je kunt een filter op die Collection toepassen en dat filter element maakt dan een nieuwe Collection met alleen de oranje vruchten.

2 Nested Loops met Collection Filters

Een gefilterde Collection kan ook een geneste Loop efficiënt maken. Met een geneste loop bedoel ik een loop in een loop. zonder filters groeit het aantal iteraties door de loop dan exponentieel. Heeft de Collection van de buitenste loop 100 records en de binnenste ook, dan zou je zonder filtering 100 x 100 = 10.000 mogelijke combinaties gaan evalueren en dat is meestal niet nodig. Een Collection Filter kan helpen het aantal combinaties terug te brengen. Om dat te demonstreren gebruik ik de volgende business case:

Onze klant verkoopt e-Bikes. Bij verschillende modellen horen verschillende accessoires die gratis worden meegeleverd bij aankoop van een fiets. De klant gebruikt een flow om Producten aan de Opportunity te koppelen. Binnen de flow selecteren de medewerkers de producten die verkocht moeten worden en de gekoppelde accessoires moeten automatisch toegevoegd worden.

We gebruiken dan een geneste loop. In de buitenste evalueer je elk handmatig geselecteerde fiets. In de binnenste loop wil je niet elke keer álle accessoires langs gaan, maar alleen die accessoires die bij de fiets in kwestie horen. Daarvoor plaats je een filter tussen het eerste en het tweede loop element en laat je de binnenste loop de gefilterde Collection gebruiken.

3 Equals Count

Als je wilt weten hoeveel elementen (enkelvoudige variabelen) er in je Collection zitten, kun je natuurlijk een loop over die hele collectie uitvoeren en in elke iteratie 1 optellen bij een getal variabele, maar dat is natuurlijk niet efficiënt. Je kunt in een Assignment de Equals Count operator gebruiken in combinatie met een Collection Variable. Equals Count staat voor het aantal elementen in de verzameling.

4 Collection sort

Met een Collection Sort element kun je een reeds bestaande verzameling sorteren in een andere volgorde. In het geval van een verzameling met records, kun je ook een ander veld gebruiken om te sorteren. Stel dat je oorspronkelijke verzameling Fruits gesorteerd is op Naam van A naar Z, maar je wilt ze nu sorteren van zwaar naar licht, dan gebruik je een Collection Sort om de volgorde aan te passen.

Een andere belangrijke mogelijkheid van het Collection Sort element is dat je ermee ook het aantal elementen in de verzameling kunt verkleinen. Ik kan bijvoorbeeld kiezen om alleen de zwaarste 5 vruchten te willen hebben.

Let op: Waar een Collection Filter element een nieuwe variabele introduceert voor de output en de oorspronkelijke verzameling ongemoeid laat, past een Collection Sort element de oorspronkelijke collectie aan. Dus als je met een Collection Sort het aantal record terugbrengt, is wat je eruit hebt gehaald ook echt weg.

5 Operators

Verschillende soorten variabelen hebben verschillende mogelijkheden als het gaat om het toewijzen van waarden. Bij verzamelingen is het – net als bij tekst en getallen – mogelijk om:

  • een nieuwe waarde toe te wijzen met Equals
    • Daarmee vervang je dus in één keer de hele waarde of alle waarden die daarvoor in de collectie zaten
  • iets toe te voegen met Add
    • Dan blijven de elementen die al in de verzameling zaten bestaan en komt er extra element bij

Hiernaast zijn er nog enkele andere interessante mogelijkheden voor verzamelingen:

  • Remove After First: verwijdert alle elementen na de eerste keer dat de waarde voorkomt die je voor de vergelijking aangeeft
    • Lijst voor assignment: Rood, Geel, Groen, Blauw
    • Remove after: Geel
    • Lijst na Assignment: Rood, Geel
  • Add at Start: voegt een element in op de éérste positie van de verzameling, waardoor alle elementen die er al in stonden één plaats opschuiven.
    • Lijst voor assignment: Rood, Geel, Groen, Blauw
    • Add at Start: Paars
    • Lijst na Assignment: Paars, Rood, Geel, Groen, Blauw
  • Remove All: verwijdert elk element dat gelijk is aan de waarde die je voor de vergelijking aangeeft
    • Lijst voor assignment: Rood, Geel, Groen, Geel, Blauw, Geel
    • Remove All: Geel
    • Lijst na Assignment: Rood, Groen, Blauw
  • Remove First: verwijdert alleen het eerste element dat gelijk is aan de waarde die je voor de vergelijking aangeeft. Elke volgende keer dat een element met die waarde voorkomt, blijft erin.
    • Lijst voor assignment: Rood, Geel, Groen, Geel, Blauw, Geel
    • Remove First: Geel
    • Lijst na Assignment: Rood, Groen, Geel, Blauw, Geel
  • Remove Before First: verwijdert alle elementen die voorkomen vóór de eerste keer dat de waarde voorkomt die je voor de vergelijking aangeeft.
    • Lijst voor assignment: Rood, Geel, Groen, Geel, Blauw, Geel
    • Remove Before First: Geel
    • Lijst na Assignment: Geel, Groen, Geel, Blauw, Geel
  • Remove Position: verwijdert het element op de positie die je aangeeft met een getal
    • Lijst voor assignment: Rood, Geel, Groen, Geel, Blauw, Geel
    • Remove Position: 2
    • Lijst na Assignment: Rood, Geel, Geel, Blauw, Geel
    • Rood is hierbij positie 0 in de oorspronkelijke verzameling, dus is groen positie 2
  • Remove Uncommon: verwijdert alle elementen waarvan de waarde niet gelijk is aan de waarde die je voor de vergelijking aangeeft.
    • Lijst voor assignment: Rood, Geel, Groen, Geel, Blauw, Geel
    • Remove Uncommon: Geel
    • Lijst na Assignment: Geel, Geel, Geel

Op deze pagina op de Salesforce Help site, kun je met voorbeelden nalezen wat elke operator doet.

Wil je tijdens een van de iteraties van de loop zorgen dan de rest van de verzameling niet meer geëvalueerd wordt, plaats dan na het juiste pad van een beslissingselement een toewijzing waarin je de verzameling waar de loop op draait leeg maakt.

Dit is dus vragen om problemen…

Veiliger en voorspelbaarder is om het als volgt op te lossen.

Overigens kun je dit soort scenario’s vaak (maar niet altijd) beter oplossen met een collection filter, waardoor je al vóór de loop zorgt dat alleen de juiste records geëvalueerd worden.