22 FebSalesforce Freigaberegeln mit APEX

In einem vergangenen Blogpost habe ich zusammengestellt wie man sich in Salesforce die Freigaberegeln definieren kann und habe darauf viele Rückfragen bezüglich APEX bekommen, daher will ich diesem Thema mal hier näher auf den Grund gehen:

Wie funktionieren die Freigaben im Detail – und wie kann man auf die Regeln per APEX zugreifen bzw. diese erstellen?

Das Prinzip ist so einfach wie genial. Um das zu verstehen müssen wir einen kurzen (sehr kurzen!) Ausflug in die Datenbank von Salesforce machen:

Für jedes Objekt für das die Unternehmensweiten Standardeinstellungen NICHT “öffentlicher Lese-/Schreibzugriff” ist, wird eine weiteres Objekt angelegt in dem die Freigaben abgelegt werden. Über die Admin-Bedienoberfläche ist das aber nicht sichtbar. Um darauf zuzugreifen bedient man sich Admin-Tool (z.B. Eclipse, Develpper Konsole, SoqlXplorer etc.) und findet dort das entsprechende Objekt.

Ich habe für Euch die Account-Sicherheitseinstellungen auf privat gesetzt und EINE einzige Freigaberegel erstellt und Euch mit dem SoqlXplorer einen Screenshot gemacht:

AccountSharing

 

Was dann in der Datenbank abgelegt wird ist nicht etwa die Regel selbst, sondern es wird für jeden (!) Account für den eine Freigaberegel erstellt wurde diese in die Sharing-Tabelle eingetragen. In diesem Beispiel wurde also aus einer Regel 12 Einträge.

Das ist auch der Grund weshalb man immer die Meldung bekommt, dass die Regeln “berechnet” werden und das etwas dauern kann nach dem Speichern. Denn Salesforce übersetzt die von Euch erstellten Freigaberegeln auf die Accounts und trägt diese dann in die Tabelle ein. Bei riesigen Datenmengen und entsprechend vielen Usern kann das schon mal richtig viel werden und entsprechend lange dauern.

So, und wie greift man jetzt auf die Tabelle per APEX zu? Ganz einfach: Ihr habt die Chance selbst dort Einträge vorzunehmen bzw. diese auch wieder zu löschen. In der Praxis sieht das dann so aus, dass man (bleiben wir beim Beispiel Account) bei jedem Speichern/Erstellen/Löschen einen Trigger startet, der die Sharing-Regeln in der Tabelle überarbeitet bzw. einträgt.

Ihr legt dort fest welcher User oder welche Gruppe (Vorsicht, das sind keine Chatter-Gruppen, sondern öffentliche Gruppen!) welchen Zugriff auf den Datensatz bekommt.

Mein Tip war und bleibt: Man kommt fast immer mit den Standard-Regeln aus. Erst wenn diese zu 100% ausgenutzt worden sind und Ihr Freigaben braucht, die man einfach nicht anders machen kann, solltet Ihr die APEX-Regeln nutzen.

Was ist Eure Best-Practice?