Top 10 Salesforce Spring ’20 Features for Developers

Share this article...

The Salesforce Spring ’20 release is another comprehensive release from Salesforce. Sometimes I think I take the whole ‘three feature rich releases each year’ benefit for granted. It’s a massive engineering feat to deliver, and the more you go into the details about how Salesforce achieve it, the more impressive it feels.

With the Salesforce Spring ’20 date fast approaching, let’s take a look at some of the most impactful new features for Salesforce developers!

1. DeleteEvent – New subject Available

There will be a new sObject available called DeleteEvent, which can be used to query and filter on records in your Recycle Bin. On page 500 of the release notes (woah!) we see that:

“DeleteEvent works with all standard objects that support the Recycle Bin and all custom objects.”

This is much more helpful to developers because previously, one would have to use a SOQL leveraging ALL ROWS and an attribute isDeleted. For example, using an execute anon script, you could do something like this:

List<Account> deletedAccounts = [SELECT Name FROM Account WHERE IsDeleted = TRUE ALL ROWS];

system.debug(‘deletedAccounts is: ‘ + deletedAccounts);

As per this document here, however, ALL ROWS could only be used in Apex SOQL queries. The alternative in the API is to call queryAll(). Also, you couldn’t use this in the Query Editor of the Developer Console.

So, having a new sObject to specifically query deleted records will be much easier, quicker and definitely helpful to developers. I can imagine that one could use DeleteEvent to write some interesting logic to say ‘at the end of each week, send a custom email to a set of users to let them know what the number of records in the recycle bin is and how that is grouped by the type of sObject’. It wouldn’t be feasible to do something like this before unless you executed a query like the one above for every single sObject in your org.

2. In-App Guidance

Although not strictly one for developers, I am finding the In-App Guidance feature that was recently released to be so under-rated, and not especially well-known about. I really recommend that you check out this three-minute video on how powerful this new feature is. Salesforce have enhanced this feature further now by providing new objects specifically for translation.

3. SOQL and SOSL Character Limits Increase

SOQL and SOSL have had their character limits increased from 20,000 to 100,000. This is very helpful for when you need to write those looongg SOQL queries which might have lots of OR conditions.

 4. SFDX CLI version (48.0) – Create Package Without Validation

If you’ve been in the coalface of SFDX packaging, you’ll know that the time taken to create an SFDX package can take a really, reaaally long time. With the latest and greatest SFDX CLI version (48.0) you’ll be able to use a new flag ( — skipvalidation) on the package:version:create command to create a package without any validation:

Skipping validation allows you to create package versions faster, but you can’t promote a package version that was created without validation.

See page 473 of the release notes for more information on this topic.

5. Lightning Message Service (LMS) in Beta

Remember Visualforce? With the introduction of Aura and Lightning Web Components (LWC), Visualforce isn’t as prominent as it once was. Nonetheless, there are millions of Visualforce pages across Salesforce production orgs with billions of page views each month. Bearing in mind that there are millions of lines of s-controls (the precursor to Visualforce) in Salesforce production orgs, it’s hard to see Visualforce going away anytime soon.

So, to help communicate across these different web technologies, Salesforce have released Lightning Message Service (LMS) in Beta. This impactful demo highlights how to communicate between these three technologies (Visualforce, Aura and Lightning Web Components (LWC)). This looks like a natural step in the trend towards enabling developers to wire up these different technologies together. I suppose Lightning Out and the slds attribute for Visualforce pages were precursors – it’ll be interesting to see what could be next!

I think that because there is still a feature delta between these different technologies, the option to wire them up using the aforementioned techniques is very helpful. For example, if you want a custom email template then you’ll  have to use a Visualforce template, and if you want a button in Lightning Experience (LEX) that looks exactly like a custom button — not a quick action — then you’ll have to use a Visualforce page which then calls Apex, and if you want to see metrics on how many people have viewed your UI elements and you don’t want to use a third party tool like Google Analytics then you’d have to use Visualforce (VisualforceMetrics) etc. I find that there is actually a lot that Visualforce still has to offer and although I am a HUGE fan of LWC, I’m glad that Salesforce gives us the option to use the best of all worlds.


If you’ve ever used PMD to help perform static code analysis, you may have come across one of their ‘core’ rules called ‘ApexCRUDViolation’. Let’s take a look:

public class Foo {
public Contact foo(String status, String ID) {
Contact c = [SELECT Status__c FROM Contact WHERE Id=:ID];

// Make sure we can update the database before even trying
if (!Schema.sObjectType.Contact.fields.Name.isUpdateable()) {
return null;

c.Status__c = status;
update c;
return c;

At the time I first came across this, I thought ‘that’s neat’. Especially as Schema doesn’t burn a SOQL statement. Well, using WITH SECURITY_ENFORCED provides the same thing but in a much more concise and SOQL friendly way. The documentation explains this in much greater detail.

7. Use Event Monitoring to track CPU Time Consumed by Apex

One of my favourite (and I think very under-rated) Salesforce features is event monitoring. This is a paid-add on as part of Salesforce Shield (although you can get some of its features for free as per this trailhead). It’s the golden source as to who-did-what-when. Adam Torman (Salesforce) has written extensively about Event Monitoring in his brilliant blog —

You can use Event Monitoring to track CPU time consumed by Apex triggers.

Well, so what? I could always just run a trigger and do a debug the Limits class?

Well, yeah, but Event Monitoring will give you this in a much more quantitative way. I don’t suppose you want to keep reconciling debug logs from different users across different days? Having this data in Event Monitoring will help you more clearly ask very granular questions about the performance of your org.

8. Maximum API Request Limit Removed

Salesforce has removed the max daily cap of one million API requests for Enterprise and Professional orgs.

In this ‘Internet of Things’ era, this will surely be very helpful to many customers. Plus, the default daily API request allocation has been raised from 15,000 to 100,000. Finally, you can manage your API request consumption more effectively because of a new usage-based entitlement that shows the total API requests aggregated over 30 days.

9. Salesforce Data Mask

During Dreamforce ’19, Salesforce Data Mask was unveiled to an eager audience. This is a tool to help you configure what subsets of data should be masked in your sandbox environments. It’s a fully platform-native approach to mask private data without taking data out of Salesforce. This Trailhead module takes you through the process of using Salesforce Data Mask and this blog post details the feature further.

This is a very helpful feature, especially in this ‘GDPR’ era. For example, if a ‘subject’ reaches out to an organisation and submits a Subject Access Request; which essentially says ‘hello — you have 30 days to kindly show me what data you have about me’ you wouldn’t want to have to go into all of those sandboxes as well as prod, right?

What would be very interesting to know is whether a Salesforce masking API will be on the road-map soon!

10. Lightning Base Components Become Open-source

Lightning Web Components are really cool. In my book, they are even cooler now that Salesforce have made them open-source. The base components are available for web developers who wish to use them outside of Salesforce too. Check out the Github repos here and here.

Base Components in the c namespace are intended for use on the Salesforce platform. However, we realize the desire to use them in non-Salesforce scenarios. Currently, many components will work, but others will not, due to dependencies on the Salesforce platform. Our goal is to provide Base Components for non-Salesforce use cases, and we’ve created the LWC Storybook PoC to show what this might look like in the future.

Probably the single fastest way to get acquainted with LWC is to look at the recipes repo here.


So, overall, it’s another comprehensive release from Salesforce. Sometimes I think I take the whole ‘three feature rich releases each year’ benefit for granted. It’s a massive engineering feat to deliver, and the more you go into the details about how Salesforce achieve it, the more impressive it feels. The ‘Hammer Time’ Salesforce blog article, for example, is very illuminating and makes me think of Thor for some reason…

Other times, I think ‘OK — that’s cool and all but what about sharing rules for activities or custom fields for attachments?’ etc. One thing I appreciate a lot, and which is surely a HUGE unique selling point for Salesforce, is that they have so much information available on their new features almost immediately on Trailhead.

So, those are personally my fave top 10 features from this particular release — what about yours? Let me know by leaving a comment below.

Add Comment