7. 7
Lightning Web Component: Open Source
● Broadens appeal of the framework
● Allows simplifying technology portfolio
● Creates skill portability for developers
8. 8
More Predictable Apex Limit Use for @AuraEnabled
● Apex limits in Lightning components are now applied per action.
○ Previously, the Apex limits applied across all the actions batched
together (boxcar’ed) in a request (XHR).
$A.enqueueAction()
9. 9
More Predictable Apex Limit Use for @AuraEnabled
Bonus
● Limits that are applied when using cacheable=true or
continuation=true no longer affect other actions in the same
boxcar
● Event monitoring data for the Apex Execution event type is now for
each component @AuraEnable action rather than for each boxcar.
10. 10
Retirement of Aura Components in aura:ui Namespace
● Starting Summer ‘21 they’ll become unsupported
○ Stop using ui:, always use lightning: namespace
components instead
○ Refactoring existing ui: uses
12. 12
MetadataComponentDependency Queries (Beta)
SELECT MetadataComponentName, MetadataComponentType
FROM MetadataComponentDependency
WHERE RefMetadataComponentType = 'ApexClass'
SELECT MetadataComponentName, MetadataComponentType
FROM MetadataComponentDependency
WHERE RefMetadataComponentId = yourFieldId
Untangle your dependencies!*
*Tooling API only
13. 13
Query in Bulk API 2.0
Compared to Bulk API -
● Asynchronous processing of SOQL queries that return large amounts
of data (10,000 records or more)
○ It does not require you to handle batches - all results are returned in
one set
○ Limits have been simplified and are available via the /limits endpoint.
● better integrated with other Salesforce REST APIs.
○ It does not require a special X-SFDC-Session header.
○ It supports all the regular OAuth workflows.
○ Its design is more consistent with the other APIs
16. 16
Enforce Field Level Security in Apex (Beta)
● stripInaccessible( )
○ Easily removing inaccessible fields from
■ Query (and subquery) results
■ Insert/update/upsert DMLs for the current user
17. 17
Enforce Field Level Security in Apex (Beta)
List<Account> accountsWithContacts = [SELECT Id, Name, Phone, (SELECT Id, LastName, Phone FROM Account.Contacts)
FROM Account];
// Strip fields that are not readable
SObjectAccessDecision decision = Security.stripInaccessible(AccessType.READABLE, accountsWithContacts);
// Print stripped records
for (Integer i = 0; i < accountsWithContacts.size(); i++) {
System.debug('Insecure record access: '+accountsWithContacts[i]);
System.debug('Secure record access: '+decision.getRecords()[i]);
}
// Print modified indexes
System.debug('Records modified by stripInaccessible: '+decision.getModifiedIndexes());
// Print removed fields
System.debug('Fields removed by stripInaccessible: '+decision.getRemovedFields());
19. What is the per-org limit for long running Apex
request?
20. 20
Callouts are excluded from long-running request limit
● Long-running request = execution time runs over 5 seconds
● HTTP callout processing time is no longer include when calculating this
limit - timer is paused for callout and resume when callout completes
21. 21
New ApexSettings Metadata Type Fields
● To enable tracking of aggregate, instead of detailed, totals for Apex test
coverage data, use the new enableAggregateCodeCoverageOnly field.
● To enable serial execution of Apex tests, use the new
enableDisableParallelApexTesting field.
● To suppress Apex debug log details in unhandled exception emails, use
the new enableDoNotEmailDebugLog field.
● To prevent Apex test executions from incrementing auto-number fields for
non-test records and creating gaps, use the new
enableGaplessTestAutoNum field.
25. 25
Einstein Platform: Build Better Predictions with Insights
“When an Einstein feature,
such as Einstein Prediction
Builder, makes a prediction
and saves the results, an
AIRecordInsight record and
several associated child
records are created”
● AIRecordInsight
○ AIInsightReason
○ AIInsightFeedback
○ AIInsightAction
○ AIInsightValue
● Potential uses
○ Measure effectiveness
○ Measure acceptance rate
○ Automate post-prediction actions
(through AIPredicationEvents)
26. 26
Einstein Platform Services
Einstein Language & Vision: New Language and algorithm
Fields
The response for Einstein Language API calls that return model information now contains the language and algorithm fields.
● API Response JSON Contains a New language Field
○ The response JSON for an Einstein Language API call that returns model information now contains the language
field. When you train a dataset, the resulting model inherits the language of the dataset. For Einstein Language
datasets and models, the return value is en_US.
○ For Einstein Vision datasets and models, the return value is N/A.
● API Response JSON Contains a New algorithm Field
○ For Einstein Language, the default return value is intent.
○ For Einstein Vision, the default return value is object-detection.
28. 28
Communities: Harness the Power of Salesforce CMS
● Salesforce CMS now GA
○ Content type templates
○ Multi-channel support
○ Enhanced CMS Component in Community Builder
○ Support for Tabs + Visualforce communities!
29. 29
Lightning Components In Community Builder: New Options
● Use Tile Menus to Brighten up your Community
● Customize the Record List Component Header
○ list actions, list searches, refresh, charts, and filter buttons, object
names, and image icons
● Hide User Profile Pictures
● Display Einstein Discovery Predictions in Lightning Experience
Community Pages
30. 30
Securing Guest User
● Secure Guest Users’ Record Access with a New Setting
● Set Org-Wide Defaults to Private for Guest Users
● Manage Community and Guest Users’ Visibility
● View All Users and Other Permissions Disabled in Guest User Profiles
● Automatically Assign Records Created by Guest Users to a Default Owner
● Using Sharing Rules to Grant Record Access to Guest Users
Structured, scriptable way of understanding dependency
In the past the choices are mostly UI
“Where is this used”
Dev Console
Try deleting it
No ordering, grouping, offset
Limited where clause
MetadataComponent/RefMetadataComponent
Id
Name
Type
Namespace
MetadataComponent depends on RefMetadataComponent
An apex class depends on a field that is referenced in one of SOQL queries etc
The stripInaccessible() security feature for field-level data protection has moved from pilot to beta and is available in production orgs. In Winter ’20, we extended the feature for subqueries and added the enum value UPSERTABLE to System.AccessType. Use this new enum with the stripInaccessible method to enforce field- and object-level checks for both insert and update.
Why: You can use the stripInaccessible method to strip the fields that the current user can’t access from query and subquery results. You can use it to remove inaccessible fields from sObjects before a DML operation to avoid exceptions. You can also use the method to sanitize sObjects that have been deserialized from an untrusted source.
How: The stripInaccesible method checks the source records for subquery fields that don’t meet the field-level security check for the current user. The method returns a list of sObjects that contain only the fields that are accessible to the current user. If the user doesn’t have access to the relationship field from child to parent, the return list of sObjects doesn’t include the child relationship.
If the user doesn’t have permission to read the Phone field of a Contacts object, this example code removes the subquery field before reading the records. The DML operation completes without throwing an exception.
Every org has a limit on the number of concurrent long-running Apex requests. This limit counts all requests that run for more than 5 seconds (total execution time). However, HTTP callout processing time is no longer included when calculating the 5-second limit. We pause the timer for the callout and resume it when the callout completes.
Continued Metadata coverage expansion
Metadata API only items (no UI counterpart)
Get details on the logic behind Einstein predictions via insight objects. When an Einstein feature, such as Einstein Prediction Builder, makes a prediction and saves the results, an AIRecordInsight record and several associated child records are created. Use these records to understand how Einstein predictions are made and apply custom logic after the predictions are saved to improve and customize predictions.
Where: This change applies to Lightning Experience in Professional, Enterprise, Performance, Unlimited, and Developer editions where Einstein features, such as Prediction Builder or Case Classification, are enabled.
Why: For example, use a report that measures actual versus predicted values to assess how well changes to predictions improve prediction results. You can also build a report that measures prediction user feedback, such as measuring the user acceptance rate of Case Classification recommendations.
Einstein insight objects are also valuable when adding custom logic after a prediction is made. When Einstein writes prediction results back to AI prediction fields, custom logic, such as Apex triggers, workflow rules, and assignment rules, aren’t run. To add custom logic based on Einstein prediction results, use a platform event subscriber, such as Process Builder, to get notifications for AIPredictionEvents, which contain references to AI insight objects. For example, you could create a Process Builder process for leads triggered by an AIPredictionEvent that inspects the referenced AIRecordInsight and uses the insight information to decide whether to reassign the lead.
You can also use Einstein insight objects to build a better user experience. For user tasks that require making decisions in the Salesforce UI, you can create custom components that leverage insights to present recommended decision choices to the user.
Making AI/Einstein features less of a black box
Salesforce CMS is now generally available with an updated design and some new options. Localize your content, create your own custom content types, and make content available to B2B Commerce managed packages and communities created with Salesforce Tabs + Visualforce.
Where: This change applies to Lightning Experience in Essentials, Enterprise, Performance, Unlimited, and Developer editions. Salesforce CMS is available via Lightning and Salesforce Tabs + Visualforce communities.
Why:
Content isn't just for Lightning communities anymore. Get content created and managed in Salesforce CMS using Chatter REST API or Apex and add it to Salesforce Tabs + Visualforce communities.
Create custom content types to meet your content creation needs, like banners, product announcements, or FAQs, with the Managed ContentType in Metadata API. Custom content types appear as forms in the Salesforce CMS app and can also be used as a way to create collections for publication
n the Salesforce CMS app, Share To... is now Channels. Still the place to add communities that share content, just a new name to look for in CMS Workspaces.
In Community Workspaces, we've enhanced Collections. Now manual and dynamic CMS Content collections are based on a specific content type to help you target content delivery better.
n Community Workspaces, each content type gets its own content detail page to give you better presentation control.
In Community Builder dozens of new layout options let you get creative with enhanced CMS Components, giving you greater ability to match your needs and your imagination.