Rapporteren van niet-bestaande data

Blog Gerbrand Spaans | 04-05-2018 Salesforce

Werken op een SaaS platform kent specifieke problemen omdat er meestal spelregels gelden die door het platform strict worden gehanteerd. Als briljante admins proberen wij zo goed en zo kwaad mogelijk om die beperkingen heen te werken. Dit is vaak erg frustrerend, maar een goede workaround is mooi, toch?

Klanten vragen ons vaak om inzage in het aantal verwijderde records, wat neerkomt op een verzoek voor een rapport op basis van niet-bestaande data. Onmogelijk! Maar laten we toch het onmogelijke doen! Gelukkig heeft Salesforce een Prullenbak waarin verwijderd materiaal eerst gedumpt wordt voordat deze definitief worden verwijderd. Hoe werkt het?

Alle Salesforce records, naast de standaardvelden die in de layout zichtbaar zijn, ook een aantal verborgen velden die het platform gebruikt om bepaalde beslissingen te nemen, zoals het isDeleted veld. Wanneer het isDeleted veld op true wordt gezet lijkt een record verwijderd te zijn en is het verdwenen uit alle List Views en Salesforce in het algemeen, met uitzondering van de Prullenbak. Daar blijft het 15 dagen alvorens definitief te verdwijnen.

Dus verwijderde bestanden kun je makkelijk laten zien, toch? Nee dus.

Na enig onderzoek vond ik een mooi SOQL statement waarmee geavanceerde queries mogelijk zijn: toevoegen van het ALL ROWS statement aan het einde van een query zou alle records, inclusief verwijderde, toegankelijk moeten maken voor de query engine, zodat we kunnen filteren en ze zichtbaar maken.

Hmmm. Deze snelle demo verliep niet echt lekker….

Het ALL ROWS statement lijkt alleen beschikbaar te zijn vanuit Apex, dus om de hele demo te tonen moet er wat programmeerwerk verricht worden. Mijn belangrijkste vraag was: “Kunnen we een grafiek genereren van het aantal records dat dagelijks verwijderd wordt?” Daarom gaan we precies dat creëren.

We beginnen met de custom controller. De oplossing voor ons probleem zit in de functie getAggregateAccountData(), waar we alle verwijderde accounts bevragen en op datum groeperen om zo een dagelijks overzicht van verwijderde accounts te krijgen.

Omdat Salesforce verwijdering van records na 15 dagen definitief maakt, krijgen we maximaal 15 rijen. Dan laten we op deze rijen een functie los die ze in een object list beschikbaar maakt voor gebruik door de VisualForce grafiek.

En de VisualForce pagina code:

En dat is het, een Page die je op je homepage kunt zetten zodat bij inloggen direct te zien is wat er is gebeurd!

Wil je meer weten over Salesforce development of heb je vragen over hoe dit op je production org te krijgen, laat het me weten via een van de social kanalen. Succes met coderen!

Wat kunnen wij voor u doen?
Neem contact op