0

I need to know what are the advantages of the Apex records sharing compared to the standard record sharing with sharing rules?

When to use Apex records sharing over the standard record sharing?

2 Answers 2

4

The advantage of Apex sharing is that you can calculate sharing conditions that otherwise cannot be done by standard and criteria-based sharing rules. For example, you could base sharing on an web service call, a separate business logic sharing table, standard or custom fields, etc.

For the majority of use cases, the various sharing systems in Salesforce should be sufficient. You have Role-Based Sharing, Rule-Based Sharing, Criteria-Based Sharing, Territory-Based Sharing, Team Member Sharing, and Implicit Sharing. Some or all of these can be used in most ordinary situations. You should only use Apex sharing if no standard sharing configuration covers your business use case.

The documentation includes an example whereby the "hiring managers" and "recruiters" are given access to Job records so that they can see the details of the person being hired. This is not something you could accomplish using just standard share functionality, so using Apex Managed Sharing allows these shares to be created. There's actually very little use for Apex Managed Sharing, but you should be aware of its capabilities in case you ever need it.

3
  • thank you for your much appreciated and valuable comment. My biggest concern is when switching from standard record sharing rules to an apex sharing what will happen to the records which have already been shared. For instance I have a record A which had been shared via the standard sharing rule and if I remove the sharing rule and start using the apex sharing there will be no records in AccountShare table indicating tha the record A has already been shared.
    – user12347
    Commented Jun 16, 2020 at 12:04
  • 1
    @user12347 Sharing is cumulative across all sharing methods. There's no rule that says you must use either one share method or the other. You could easily use both together to create a blend of sharing based on standard features and custom code.
    – sfdcfox
    Commented Jun 16, 2020 at 12:06
  • Is there any chance how to update the AccountShare table with records which had already been shared via the standard sharing rules?
    – user12347
    Commented Jun 16, 2020 at 12:06
3

Note that both of them create share records under the hood. Most of objects in salesforce (exception may be a detail object in master-detail relationships) have a junction object with name __share that holds share records.

It’s advisable not to use apex sharing unless you absolutely need it and use the platform sharing features. This is because you can do sharing via clicks and platform automatically handles recalculation of sharing records for you.

Using clicks you can activate/deactivate/change criteria or rules via platform provided settings while with apex you have maintain lot of code to do recalculation.The whole idea of salesforce is anyone without knowledge of code can maintain the system. With apex you are adding a dependency that one must know code.

You should also note that some times the declarative sharing features won’t need your need and in that case apex provides that flexibility and capability.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .