Today we will cover the recent Salesforce Winter ’24 Release Notes. As always salesforce has added too many features in the release. We will cover some of them in this post.
Salesforce Winter ’24 Release Notes Points Related to Salesforce Admin
Manage In-Person Appointments More Efficiently Using Lobby Management
We can now use the enhanced lobby management dashboard to manage customers who prefer to visit the branch location—with or without a scheduled appointment. Greeters can use lobby management to check in customers, monitor their wait time, or mark them as a no show. Greeters can also reschedule or reassign an appointment if the assigned service resource is unavailable. Service resources also get notification when customers are waiting. To improve the branch performance waitlists, appointment information, such as participants per day and average wait time is captured.
Share Availability Details with Potential Customers
We can now share the appointment invitation URL with the availability options. Use an actionable list to create and share the appointment invitation URL and track the appointments booked using that invitation URL.
Configure Searchable Objects for Profiles More Easily (Beta)
Using the Search Manager configuration window we can configure searchable objects for a user profile.
Resolve Cases Faster with Einstein Search Answers (Pilot)
Using the new Einstein Search Answer we can extract relevant text from a knowledge article. Ask a question or enter a phrase in the global search bar and get the most relevant information from English-language knowledge articles. This will improve the case resolution time.
Transfer Ownership of Lightning Dashboards (Beta)
We can now transfer ownership of Lightning Dashboards whenever the current owner leave or due to any other reason. The new owner has full control over the dashboard contents. Previously we had to clone or recreate the dashboard when the creator moved on to other responsibilities.
Visualize Lightning Reports with Summary Formulas as You Create Them
When we select grouping options in the enhanced summary formula builder, the preview image updates instantly to show how the formula applies to the report. We can check summary formula that includes the PARENTGROUPVAL or PREVGROUPVAL function will be used in Lightning report. This is now available in Lightning Experience.



Report on Custom Permission Set and Permission Set Group Assignments
We can now use custom report type and build reports on custom permission set and permission set group assignments. We can report on all users assigned to a specific custom permission set or permission set group. Or, use the report to review an individual user’s assignments.
Save Time with Mass Quick Actions on Related Lists (Generally Available)
We can now use the Quick Actions on related list. We can now perform bulk updates using Quick Action. Streamline data entry by configuring quick actions with predefined field values and action layouts that include only the most important fields. And add quick actions directly on the related lists, right where users need them.
Salesforce Winter ’24 Release Notes Points Related to Salesforce Developer
Get the Latest LWC Features with Component-Level API Versioning
We can now version LWC component to inform the LWC framework to behave as it did for the Salesforce release corresponding to the API version for that component. example, setting the apiVersion
key to 58.0 informs LWC that the custom component continues to behave as it did in Summer ’23.
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
<apiVersion>58.0</apiVersion>
</LightningComponentBundle>
Control Workspace Tabs and Subtabs (Beta)
We can use the LWC workspace API to manage workspace tabs and subtabs. Import the lightning/platformWorkspaceApi
module to access the LWC Workspace API methods, wire adapters, and event-based APIs via Lightning Message Service.
These API methods for LWC are available for Lightning console apps.
closeTab()
—Closes a workspace tab or subtab.disableTabClose()
—Prevents a workspace tab or subtab from closing.focusTab()
—Focuses a workspace tab or subtab.getAllTabInfo()
—Returns information about all open tabs.getFocusedTabInfo()
—Returns information about the focused workspace tab or subtab.getTabInfo()
—Returns information about the specified tab.openSubtab()
—Opens a subtab within a workspace tab. If the subtab is already open, the subtab is focused.openTab()
—Opens a new workspace tab. If the tab is already open, the tab is focused.refreshTab()
—Refreshes a workspace tab or a subtab specified by the tab ID.setTabHighlighted()
—Highlights the specified tab with a different background color and a badge. Tab highlights don’t persist after reloading a Lightning console app.setTabIcon()
—Sets the icon and alternative text of the specified tab.setTabLabel()
—Sets the label of the specified tab.
These wire adapters are available for Lightning console apps.
EnclosingTabId()
—Returns the ID of the enclosing tab.IsConsoleNavigation()
—Determines whether the app it’s used within uses console navigation.
These Lightning message channels correspond to the Aura application events that are available for Lightning console apps. Their payloads are the same as the payloads for the Aura application events. Subscribe to these channels for the events that you want to listen for.
lightning__tabClosed
—Indicates that a tab was closed.lightning__tabCreated
—Indicates that a tab was created successfully.lightning__tabFocused
—Indicates that a tab was focused.lightning__tabRefreshed
—Indicates that a tab was refreshed.lightning__tabReplaced
—Indicates that a tab was replaced successfully.lightning__tabUpdated
—Indicates that a tab was updated successfully.
Use RefreshView API with Lightning Locker
The lightning/refresh
module and RefreshView API provide a standard way to refresh component data in Lightning web components (LWC). Now the RefreshView API also works with Lightning Locker, the security architecture in effect when Lightning Web Service (LWS) isn’t enabled. Previously, the RefreshView API required LWS to be enabled in the Salesforce org.
registerRefreshHandler(this.template.host, this.refreshHandler.bind(this));
registerRefreshContainer(this.template.host, this.refreshContainer.bind(this));
Use Third-Party Web Components in LWC (Beta)
We can now use third party web components in LWC without rewriting the web components for use with LWC. Custom elements are the building blocks of reusable web components, which you can create using customElements.define()
. A basic custom element looks like below.
customElements.define('my-custom-element', class extends HTMLElement {
constructor() {
super();
this.attachShadow({ mode: 'closed' }).innerHTML = '<div>Custom Element Constructor</div>';
}});
Create and Manage Toast Notifications (Generally Available)
Create a list of toast notifications with lightning/toast
, and manage them using lightning/toastContainer
on LWR sites.
// c/myToastComponent.js
import { LightningElement } from 'lwc';
import ToastContainer from 'lightning/toastContainer';
import Toast from 'lightning/toast';
export default class MyToastComponent extends LightningElement {
connectedCallback() {
const toastContainer = ToastContainer.instance();
toastContainer.maxToasts = 5;
toastContainer.toastPosition = 'top-right';
}
Toast.show({
label: 'This is a toast title with a {0} placeholder link that gets replaced by labelLinks',
labelLinks : [{
'url': 'https://www.lightningdesignsystem.com/components/toast/',
'label': 'Toast link'
}],
message: 'This message has a {0} placeholder link that gets replaced by from messageLinks',
messageLinks: [{
url: 'http://www.salesforce.com',
label: 'Salesforce link'
}],
mode: 'sticky'
variant: 'info',
onclose: () => {
// Do something after the toast is closed
}
}, this);
}
}
Specify Custom Access Using Permission Sets for User Mode Database Operations (Developer Preview)
The new AccessLevel.withPermissionSetId()
method supports database and search operations that are run with permissions specified in a permission set. By using this new method we can add extra permission while still running the code in user mode.
@isTest
public with sharing class ElevateUserModeOperations_Test {
@isTest
static void objectCreatePermViaPermissionSet() {
Profile p = [SELECT Id FROM Profile WHERE Name='Minimum Access - Salesforce'];
User u = new User(Alias = 'standt', Email='standarduser@testorg.com',
EmailEncodingKey='UTF-8', LastName='Testing', LanguageLocaleKey='en_US',
LocaleSidKey='en_US', ProfileId = p.Id,
TimeZoneSidKey='America/Los_Angeles',
UserName='standarduser' + DateTime.now().getTime() + '@testorg.com');
System.runAs(u) {
try {
Database.insert(new Account(name='foo'), AccessLevel.User_mode);
Assert.fail();
} catch (SecurityException ex) {
Assert.isTrue(ex.getMessage().contains('Account'));
}
//Get ID of previously created permission set named 'AllowCreateToAccount'
Id permissionSetId = [Select Id from PermissionSet
where Name = 'AllowCreateToAccount' limit 1].Id;
Database.insert(new Account(name='foo'), AccessLevel.User_mode.withPermissionSetId(permissionSetId));
// The elevated access level in not persisted to subsequent operations
try {
Database.insert(new Account(name='foo2'), AccessLevel.User_mode);
Assert.fail();
} catch (SecurityException ex) {
Assert.isTrue(ex.getMessage().contains('Account'));
}
}
}
}
Ensure that Duplicate Queueable Jobs Aren’t Enqueued
We can now handle the duplicate queueable jobs using the signature. Attempting to add more than one Queueable job to the processing queue with the same signature results in an exception on enqueue for the subsequent jobs.
AsyncOptions options = new AsyncOptions();
options.DuplicateSignature = QueueableDuplicateSignature.Builder()
.addId(UserInfo.getUserId())
.addString('MyQueueable')
.build();
try {
System.enqueueJob(new MyQueueable(), options);
} catch (DuplicateMessageException ex) {
//Exception is thrown if there is already an enqueued job with the same signature
Assert.areEqual('Attempt to enqueue job with duplicate queueable signature',
ex.getMessage());
}
So these are some of the points I like the most in Salesforce Winter ’24 release notes. For Salesforce Flow, we will cover them in separate post. Which point you liked the most in Salesforce Winter ’24, let me know in comments. Happy Programming 🙂