Salesforce Winter’23 Release Quick Summary

Salesforce Winter’23 Release Quick Summary

Last Updated on September 29, 2022 by Rakesh Gupta

Currently, the Winter’23 release is available under the pre-release program. On the 26th of August, Sandboxes will be upgraded, as a result, your organization will get the look and feel of the Winter’23 release.

In this release, you will find lots of new features, as well as, new enhancements related to Lightning Experience, Salesforce Flow, Lightning Web Component, Apex, Experience Cloud, Einstein Automate, Customer Data Platform, Field Service, Marketing Cloud Account Engagement (aka Pardot), Quip, CRM Analytics, Enablement Sites(myTrailhead), and APIs.

For example, some exciting features like Filter Custom Report Types by Salesforce Fields (Beta), Use Event-based Scheduling with External Connections (Beta), Clone Lightning Apps (Beta), Develop from Anywhere Using Salesforce Code Builder (Beta), Synchronize Component Data Without a Page Refresh by Using RefreshView API (Pilot), and Resolve Cases Quickly with Interactive Einstein Search Answers (Pilot) are coming to Salesforce. 

Also, check out these beta and pilot features:

  1. Set Field-Level Security for a Field on Permission Sets Instead of Profiles During Field Creation (Beta): – Now when you create a field on an object, you can follow best practices and set field-level security for a field on permission sets instead of profiles. And rather than manually granting access to a field in each permission set, you can set field-level security on permission sets during field creation. This feature is also available when you set field-level security on a field or change the field type on a field.
  2. Build Components in Mixed Shadow Mode (Beta): – With mixed shadow mode, Lightning web components can use native shadow DOM even when the synthetic shadow polyfill is applied. Mixed shadow mode is disabled by default. Contact Salesforce Customer Support to enable mixed shadow mode.
    1. To enable mixed shadow mode on a component, set the static shadowSupportMode property to any.
      // native.js 
      import { LightningElement } from 'lwc'; 
      export default class NativeComponent extends LightningElement { 
      static shadowSupportMode = 'any'; 

  3. Manage Amazon Connect Queues in Salesforce (Beta): – With a few clicks in Salesforce, import Amazon Connect queues and their memberships into your contact center. To quickly adapt to changes in call volume, supervisors can reassign groups of agents to queues–all from within Omni Supervisor. Those changes are copied to Amazon Connect. To assign agents to queues in bulk, you now assign agents to groups and then assign the groups to queues.
    1. In the contact center details page, set up queues and groups. To replicate your Amazon Connect queues and routing configuration in Salesforce, import Amazon Connect queues, routing profiles, and queue memberships to the contact center.
  4. Select Multiple Records from a Table in a Flow Screen (Beta): – Leverage the new Data Table (beta) flow screen component to display a list of records on a flow screen. You can set the table to read only, or enable your users to select one or more records and use their selections later in the flow. And users can change the width of table columns and wrap or truncate overflowing text.
    1. Add the Data Table (beta) component to your screen flow and configure the fields.
  5. Speed Through Setup for Einstein Late Payment Risk Scoring (Beta): – Zip through setup for late payment risk scoring. On the Collections page in Setup, new links go straight to pages for these tasks: grant users permission to use late payment risk scoring and add the Late Payment Risk field to list views and record detail pages.
  6. Estimate Story Run Time (Pilot): – No more wondering how long it’ll take your model to complete, Einstein now shows approximately how much time it takes to create a story or update an existing one. While running, Einstein updates the estimated time to completion so that you can feel free to work on other things while Einstein does the heavy model-building lifting for you.
    1. Create a story with automated configuration.
    2. Create a story manually.
    3. Update an existing story.
  7. Automate Case Triage with Einstein Case Classification for Flows (Pilot): – Use Flow Builder with Einstein Case Classification together to dynamically classify new cases and route them to the correct queue. Automation helps agents deliver more efficient and productive service experiences to increase customer satisfaction and reduce agent handling time.
    1. From Flow Builder, to fetch recommendations, select FetchCaseClassificationRecommendations (generally available) from the Action menu. To apply the recommendations, select ApplyCaseClassificationRecommendations (pilot) from the Action menu.
  8. Use Encrypted Fields to Build Your Einstein Model (Pilot): – Now you can able to include encrypted fields when you build a predictive model for Case Classification, Case Wrap-Up, Reply Recommendation, Einstein Prediction Builder, and Einstein Recommendation Builder. Use artificial intelligence to save your agents time triaging and closing cases without compromising security. 

Supported Browsers for Lightning Experience

Lightning Experience is supported by Apple® Safari®’s latest version on macOS. The most recent stable versions of Microsoft® Edge Chromium, Mozilla® Firefox®, and Google Chrome™ are also supported.

Use Apple Safari on iPadOS (iOS 13.x) or laterPortrait orientation and orientation switching aren’t supported on Lightning Experience on iPad Safari. Use landscape orientation and maximize your Safari browser to full width. To avoid orientation switching, turn on the iPad rotation lock.

Customers / Administrator’s Point of View

  1. Track and Sort All Your Tasks with the To Do List: – Now your users can see all the tasks assigned to them in one component that’s available throughout Salesforce. With the To Do List docked in the Utility Bar, Sales Engagement users can see, sort, and organize tasks from records or cadences in a single actionable view. Users can apply labels to tasks in the To Do List to customize how they organize and prioritize them. 
    1. In the App Manager, add the To Do List to the Utility Bar for users. Users can choose a task category or a label to focus on the related tasks. Select a task to see details, apply a label, or take action. To act on a cadence task, users can navigate to the cadence target record and execute the task from the Sales Engagement component.
    2. This change applies to customers with Sales Engagement in Enterprise, Performance, and Unlimited editions.
  2. Schedule Recurring Shifts: – Territory managers and service resources can now create shifts in recurring patterns, such as daily, weekly, or monthly. The recurrence period must be less than or equal to 120 days from the date that the recurrence period begins.
    1. When you create a shift, select Recurring in the Type field. The Recurrence section shows the options to create a recurrence pattern.
  3. Collaborate Around Data with Lightning Reports and Dashboards in Slack: – Slack isn’t just for CRM Analytics anymore. Now all Salesforce users can browse, search, view, share, and subscribe to Lightning reports and dashboards using the CRM Analytics for Slack app. Teams can easily share reports and dashboards through scheduled subscriptions or posting to the team anytime. You can also run Einstein Discovery on Lightning reports and share the predictions and recommendations.
    1. Lightning reports and dashboards appear in recents, favorites, and searches within the CRM Analytics for Slack app. Open the menu on a report or dashboard to view and share the item.
  4. Subscribe to Lightning Reports and Dashboards Directly in Slack: – Get reports and dashboards that you want to see regularly by subscribing for yourself and others in the CRM Analytics for Slack app. No need to go out to Salesforce to set up and import a subscription. You can subscribe to up to seven reports or dashboards in Slack. A subscription refreshes the report or dashboard on a schedule that you set and posts a snapshot of the item to you and your specified recipients in Slack.
    1. In the Details window of a Lightning report or dashboard in the CRM Analytics for Slack app, click Subscribe.
  5. Use Screen Flows as Cadence Steps: – Now sales managers can specify a screen flow as a cadence step in the Cadence Builder. Use screen flow steps to let reps create a case, event, or task or to perform another action. The screen flow runs when the sales rep initiates the step for a target from their Work Queue or the Sales Engagement component on target records. Use the new Cadence Step Flow process type to create screen flows for cadence steps, or use the included flow templates.
    1. In the Flow Builder, create a screen flow from the Cadence Step Flow process type. Three flow templates are included in Winter ’23.
      1. Create a Case
      2. Create an Event
      3. Create a Task
  6. Automate Tasks with Extensibility Enhancements: – As part of extensibility enhancements, you can now take actions on prospects outside of Account Engagement. Supercharge Engagement Studio programs by automatically registering prospects for a webinar, sending them an SMS text, creating a new lead Salesforce, and more. External actions are built on invocable actions, so you can customize them to fit your business needs. Use external actions independently or in combination with external activities to close automation gaps across platforms.
    1. For each third-party app you use to interact with prospects, set up a marketing app extension and work with your developer to create the invocable action that fits your use case. Then, add an action type to your marketing app extension.
    2. After the action is configured, your marketing team can use it in Engagement Studio programs.
  7. Take the Guesswork out of Foreign Keys with Join Recommendations: – See which columns match each data source on the same screen where you choose your input data, and create a join and select your input in one step. Previously, when joining data sources in Data Prep, you needed to know their columns in advance to select the appropriate join key. This feature applies to Salesforce objects only.
    1. From the Add Input Data screen of a Data Prep recipe, select an object. This object is the left side of the join operation.
    2. In the right pane, the Related Objects tab lists the columns that have other objects related by a matching column. The selected related object is the right side of the join operation. When you select one, a number appears in the left column to indicate the order in which it was joined.
    3. When you click Next, the recipe displays the joined objects.
  8. Build Queries Easily with the Improved Fields Panel: – Add and work with multiple standard or live datasets, Salesforce objects, or Customer Data Platform data sources in the fields panel. Previously, for queries with multiple data sources, the fields panel showed only the primary data source, and you opened a separate lens to view additional data source fields. The redesigned panel organizes each data source’s measures, dimensions, and date fields in separate tabs so that you can avoid excessive scrolling. And, when working with Customer Data Platform objects, understand and review relationships between these objects as you create queries.
    1. In Query mode, add a dataset or data source (1). To view fields by type, with the dataset or data source selected, click the appropriate filter tab (2). To view hidden fields or field API names, click the gear icon (3). To remove an unused dataset or data source from the fields panel, click next to it (4).
  9. Deliver to Your Customers with Custom Address Fields (Generally Available): – Improve address data accuracy and your users’ experience with Custom Address Fields. For example, add a Warehouse Address field to a standard or custom object. Your users can enter a custom address, or they can use the Google lookup to search for an address. Then you can access each address that’s stored in a custom address field, either as a structured compound data type or as individual address components. This feature, now generally available, includes some changes since the last release.
  10. Route Work Faster with Estimated Wait Time for Customers: – To improve the customer experience, notify customers how long they must wait to speak to an agent. By knowing the estimated wait time, customers can make informed decisions about whether to contact your organization at a different time or use a different service channel. For example, if the wait time for a call is too long and the issue isn’t urgent, the customer can send an email instead.
    1. Set up estimated wait time for calls in a phone channel or messages in a Messaging for In-App and Web channel.
  11. Help Agents Navigate the Messaging for In-App and Web Conversation with New Tools:– Let agents scroll through messaging for in-app and web history, and then jump to the most recent message. If a new message is received, alert the agent with a notification in the conversation window. These features are turned on automatically.
    1. To return to the newest message after scrolling, an agent clicks the Jump to most recent (1).
    2. To view an unread customer message, an agent clicks New Message (2).
  12. Swarm on Customer Issues in Slack (Generally Available): – Swarming with the power of Service Cloud gives Service organizations the tools they require to collaborate at scale with experts, solve customer issues, and report on Swarming participation and impact. Swarming gives agents the necessary tools to involve other experts and seamlessly log collaboration, participation, and ownership. So, your service team can collaborate with others to turn a new or complex issue into a closed case or incident. Agents save time and increase customer satisfaction by eliminating the need for a tiered and inefficient service model. The Service Cloud for Slack app, now generally available, includes some enhancements since the beta release.
    1. To get started with the Service Cloud for Slack app, enable Slack in Lightning Experience and install the Service Cloud for Slack app in your workspace.
  13. Assign Leads to Territories (Generally Available): – Ensure coverage for your sales teams’ prospects when you distribute leads among territories manually. You determine access levels for the leads in your reps’ territories.
    1. Turn on Lead Access, and then specify access levels for your sales reps. Next, add the Assigned Territories related list to your lead page layouts.
    2. You then assign leads to territories using different methods depending on whether you assign multiple leads simultaneously or individual leads.
  14. Work Smoothly with Improved Usability of Salesforce Desktop Site Forecasts: – Sales reps and other forecast users can benefit from improved visualization and navigation on the forecasts page. Quota attainment percentages are shown as progress bars in the summary view. If a forecast value was adjusted and changed recently, you can see more information in a single popup, rather than two. To keep your time frame as a point of reference, the time period column is frozen as you scroll horizontally in summary view.
    1. If you enabled quotas and your user selected the Show Quota % Attainment display option on the forecasts page, quota attainment progress bars appear above quota attainment percentages. For information on what the colors mean, see Salesforce Help. You don’t need to do any setup to freeze the first column (time period). You can’t disable it.
    2. If your user selected the Show Changes in Last 7 Days display option on the forecasts page, forecasts with a recent change and an adjustment show a single popup upon hover. The popup contains information about the change and the adjustment.
  15. Create Custom Calculated Forecast Columns to Reflect Your Business: – You can tailor your forecasts to meet your business needs using up to five custom calculated columns per forecast type. For example, add custom columns for commit coverage or best-case-to-commit ratios. You can show, hide, and reorder most standard and custom columns on the forecasts page.
    1. To add custom calculated columns, edit a forecast type. On the Forecasts Settings page, under Available Forecast Types, select Edit Custom Columns from the quick actions for the forecast type. Then click Add Custom Column.
    2. After you add custom calculated columns, decide how you want them to appear to users on the Salesforce desktop site or in the Salesforce mobile app. On the Forecasts Settings page, under Available Forecast Types, select Select Columns to Display from the quick actions for the forecast type.
  16. Allow Multiple Values in Restriction or Scoping Rule Record Criteria: – Configure a restriction or scoping rule to use a comma-separated list of IDs or values in the record criteria.
    1. To create a restriction or scoping rule using more than one value in the record criteria, add a comma as a delimiter to separate the ID or string values. To include a single value that contains a comma, surround the value with double quotes (”).
  17. Optimize Collections Outreach by Using Cadences and Related Invoices: – Use cadences to focus your collections agents’ efforts where they can have the biggest impact. Collections teams can relate invoices to collection targets when adding them to a cadence. In the Sales Engagement Work Queue, agents see the upcoming cadence tasks for each collection target they own. Working through the list, they can view details for each invoice and take actions like calling or emailing. Teams can see cadence activity on invoice records and use cadence reports to understand which cadences lead to the most collections.
  18. Keep Deals Moving with Einstein Conversation Insights and Email Insights in Pipeline Inspection: – Show sales teams a select group of Einstein Conversation Insights and Email Insights in Pipeline Inspection so they can dig deeper into customer interactions to keep deals on track. Insights also include suggested actions, such as viewing calls and email records.
    1. To show insights from call recordings, go to Conversation Insights General Settings in Setup and configure Conversation Insights. To show insights from emails, enable and configure Einstein Activity Capture and Email Insights in Setup. After these features are enabled, insights about call recordings and emails are enabled in Pipeline Inspection.
  19. Stay on Top of Complex Projects with Enhanced Scheduling and Optimization: – Schedule complex work to efficiently account for situations where service appointments are constrained to a specific order, specific resources, or a combination of both. For example, ensure that a particular appointment can’t start until a related appointment is complete. Connect up to five related service appointments among service territories using Enhanced Scheduling and Optimization, which now supports complex work. After you create service appointment dependencies, enhanced scheduling and optimization uses all-or-none logic to schedule the entire group of dependent appointments, if room on the schedule allows. Otherwise none of the dependent service appointments is scheduled.

    1. Turn on Enhanced Scheduling and Optimization in Field Service Settings and set up the service territories that use enhanced scheduling. Then create scheduling dependencies between service appointments.
  20. Streamline Product Management with Enhanced Serialized Product Support: – Create one product transfer for each type of serialized product instead of multiple product transfers for each item. After the transfer, your inventory is updated with the quantity, status, and location of your inventory. Your service technicians use the mobile app to scan the barcode as they receive each item. And your inventory quantity, status, and location is updated. 
  21. Direct Cases to Qualified Agents with Omni-Channel Flows: – Use automation in Omni-Channel flows to route cases to the right agents. When Email-to-Case generates cases from incoming emails, your Omni-Channel flow can determine where to direct them. Previously, Omni-Channel flows didn’t support case routing unless you created a record-triggered flow.
    1. After you configure Omni-Channel and create an Omni-Channel flow, in Setup, go to Email-to-Case. Create a routing address that your customers can send support emails to. Then specify the flow and a fallback queue for that address.
    2. When a customer sends an email to the routing address, Email-to-Case creates a case if one doesn’t exist. The flow executes and directs the case to the appropriate Omni-Channel queue or agent. If the flow can’t determine which queue to use, it routes the case to the fallback queue.
  22. Simplify Survey Distribution by Sending Surveys From Record Pages: – Use the Send Survey action to easily send a quick pulse or relationship survey to gauge customer or employee satisfaction. With the action, going to Survey Builder isn’t the only way to send surveys. Users can send survey email invitations from any object’s record pages. 
    1. Add the Send Survey action to the page layout of any standard or custom object. Then, click Send Survey to send survey email invitations from the object’s record pages to individuals related to the record.
  23. Extend and Customize the Field Service Mobile App with Lightning Web Components (Beta): – Create amazing experiences for your mobile app users with Lightning web components. Use standard components to build robust guided procedures, create specialized documents with prefilled data from work orders, or bring your vision to life by building your own custom components.
    1. In this example, a Lightning web component is used to display a list of parts. You can search the table for specific parts (1), tap a column header once to sort ascending, then tap it again to sort descending (2). You can also tap a part name to view associated child records (3), and tap the Actions launcher to show contextual actions (4).
  24. Create ARC Relationship Graphs Quickly Using Templates: – Save time when creating relationship graphs in the Actionable Relationship Center by using templates. Two templates give you a head start on building graphs by providing you with pre-configured nodes that show relationships for your Business to Customer and Business to Business clients. 
    1. In Setup, create a new Actionable Relationship Center relationship graph. Select Default Templates and select B2C Graph.
    2. Or select B2B Graph.

Additional Enhancements Worth Noting!

  1. Be Ready for Multi-Factor Authentication Auto-Enablement: – The requirement to use multi-factor authentication (MFA) when accessing Salesforce products went into effect on February 1, 2022. All users must now use MFA when they log in to Salesforce, whether they’re logging in directly or using single sign-on (SSO). To help customers satisfy this requirement, in the first half of 2023, Salesforce is automatically enabling MFA for direct logins. In fall 2023, Salesforce is enforcing MFA by making it a permanent part of the Salesforce login process. To avoid disruptions to your users when these milestones occur, enable MFA as soon as possible.
    1. Get customizable templates for rollout planning and change management by downloading the MFA Rollout Pack.
    2. To monitor the MFA enforcement milestone schedule, see the MFA Enforcement Roadmap.
  2. Let Service Resources Add Multiple Topics to a Shift: – Territory managers and service resources can define the availability of resources for multiple topics by adding one or more topics to a shift. Use Work Type Group to define topics. If the Salesforce Scheduler for Health Cloud option is enabled, then define topics by using Work Type. Salesforce Scheduler shows service resources and available time slots based on the topic that a user selects when creating an appointment.
    1. On the Salesforce Scheduler Settings page, under the Multiple Topics for Shifts section, complete the prerequisites provided in the link (1). Then enable Multiple Topics for Shifts.
  3. Review a Custom Report Type’s Structure During Report Creation: – Not sure what custom report type to use when you create a report? You can now view the structure of available custom report types and choose the best one for your needs. The details panel shows the relationships between the joined objects, and tooltips explain the outcome of the joins.
    1. Create a report and select a custom report type. View the object and join details.
  4. Do More with Dynamic Related List Filters: – Now when you filter dynamic related lists in the Lightning App Builder, you can select multiple filter values for picklist fields. For example, on the Contact record page, filter a dynamic related list to show all cases with a priority of Medium or High. Previously, you could filter by only one picklist value.
  5. Get More Options for From Addresses in List Emails: – Make a list email appear like it’s coming from a group, such as, or a tailored user, such as Recipients react differently to emails depending on the sender’s name and email address. For example, something from a support department is more likely to be opened than something from an unknown person.
    1. When a rep chooses from multiple email addresses, replies automatically go to the email address of the sender. Replies to an email from go to that org-wide email’s work queue, while replies to the created email support a market attribution calculation
  6. Identify Which Sandboxes Get a Preview of the Next Salesforce Release: – View which sandboxes get upgraded early (preview), and which sandboxes are scheduled to be upgraded with production orgs (non-preview) during major Salesforce releases. Preview sandboxes provide early access to new features, so you can test your configurations before the production upgrade. Preview sandboxes are upgraded approximately 6 weeks in advance of production orgs during every major release.
  7. Enhance More Object Record Pages With Dynamic Forms: – You can make your account, including person account, contact, and opportunity record pages more robust by configuring them with Dynamic Forms.
    1. In the Lightning App Builder, open an account, including person account, contact, or opportunity record page. Click the new Fields tab, and place fields anywhere on the page. Or automate the process by migrating your Record Detail component to use Dynamic Forms with the click of a button.
  8. Manage Your Permission Assignments with the User Access and Permissions Assistant: – Analyze and report on permission assignments with the User Access and Permissions Assistant. Manage your permission set groups easily, and convert to permission sets that you can assign. Previously, this feature was known as Permissions Helper.
    1. To use this feature, download the app from AppExchange. Complete the tasks to enable the Tooling API for the app. And then create and assign permission sets for users who must access the app.
  9. Download Data Loader v56 Installer Files From a New Location: – Download Data Loader from Previously, the Data Loader installers for Windows and macOS were hosted on GitHub. The download link is also available on the Data Loader page in Setup.
  10. Review Prospects with Bot-Like Activity: – To protect the health of your business unit, Account Engagement can pause activity tracking for prospects with an excessive amount of activity. When a prospect’s activity tracking is paused, an icon appears on the prospect list view and an error appears on the prospect record. A prospect’s activity tracking is paused only if it impacts Account Engagement’s performance. Paused prospects who are opted in can still receive marketing emails.
  11. Simplify Prospect Opt-Out Status Between Account Engagement and Salesforce: – The prospect Opted Out field now requires a designated system of record, giving you one place to check for a record’s opt-out status. Choose between Account Engagement or Salesforce as the primary value for the prospect Opted Out field. Previously, the Opted Out field inherited the value from the most recently updated record.

    1. Edit the default prospect Opted Out field, and select an option under the Sync Behavior dropdown. In business units created after August 26, 2022, the field is set to use Pardot by default.
  12. Connect Securely to Amazon Athena and Perform Interactive Queries from Salesforce (Generally Available): – Use the Salesforce Connect adapter for Amazon Athena to integrate AWS data natively with Salesforce and to run interactive ad hoc queries. The new adapter takes advantage of Amazon Athena’s capability to run queries against data directly in Amazon Simple Storage Service (S3), without managing RDBMS infrastructure or ETL tools.
  13. Perform Async DML Operations for Cross-Org Adapter with Corrected External Object IDs: – When you initiate asynchronous DML operations on external objects with the cross-org adapter, the correct record IDs are passed to the job placed in the background jobs queue. The record IDs of external objects with the cross-org adapter are now assigned the correct key prefix x00. Previously, the record IDs began with an incorrect key prefix 001.
  14. Sell Subscriptions to Customers and Partners in Experience Cloud: – Capitalize on your investment in proven sales channels with minimal additional overhead. Subscription Management powers a self-service storefront for authenticated users in your Experience Cloud channel. Your customers or partners can use your storefront to buy and renew subscription products, while you use Subscription Management to manage your catalog and automate invoicing, payments, and refunds.
  15. Access All Omni-Channel Setup Tasks from One Page: – Less searching in Setup, more doing. To learn more about what Omni-Channel components to set up and get a list of all setup tasks, go to the new Omni-Channel setup home. The setup home also provides warnings when items aren’t correctly configured. On that page, you can also view details about and click a link to access every service channel instance defined for your company.
    1. To view Omni-Channel Home, select Omni-Channel Home in Setup.
  16. Start Bundling Appointments Quickly: – After you enable Appointment Bundling, your dispatcher can start bundling appointments right away. Field Service gives you all the default configuration that you need to get going. Use the default configuration or modify it to fit your company’s needs.
    1. From Field Service Settings, enable Appointment Bundling. The default policies are created and can be accessed from the App Launcher.
  17. Self-Join Nodes in Data Prep: – Self-join nodes in recipes when an object has a foreign key relationship to itself.
    1. In a Data Prep recipe, connect a node to itself and click Join.
  18. Take Advantage of the Enhanced Sites and Content Platform (Generally Available): – The enhanced sites and content platform brings together the power of Salesforce CMS and LWR sites. With this flexible new platform, you can create enhanced CMS workspaces in the Digital Experiences app so you can easily create, manage, and publish your content. Manage content in multiple languages, harness the organizational power of content collections, and then share your content with enhanced LWR sites.
  19. Help Users with More Targetable Locations and Backdrop: – More granular elements are targetable using targeted prompts for In-App Guidance. To draw more attention to the component being highlighted, targeted prompts now come with a gray backdrop.
    1. You can control what users notice so that they can easily find the item the prompt refers to.
    2. You can now target:
      1. List view dropdown menu, pin, and buttons in the header
      2. App name
      3. App Launcher
      4. Items in the navigation bar, including items in the item’s dropdown menu
      5. Record tabs and subtabs
      6. Record highlight panel fields
    3. All targeted prompts, including targeted prompts created before Winter’23, have a gray backdrop. Users click outside of the prompt to remove the backdrop.
  20. Track SSO and MFA Logins to Connected Tenants: – For security, track logins that use single sign-on (SSO) and multi-factor authentication (MFA), including who logged in to a specific tenant and how often.
    1. In the Security Overview panel, under Authentication, select MFA & SSO to open the dashboard.
  21. Respond to Customers Faster with Quick Text in Messaging for In-App and Web: – Reduce agent response times and standardize your brand’s voice with Quick Text. Agents can insert pre-written greetings and answers to commonly asked questions into the conversation. All Quick Text features except Folders are supported.
    1. Quick Text is turned on automatically. Agents use the Quick Text button to insert text and create new text.
  22. Salesforce CMS
    1. To improve Salesforce CMS performance, each instance is limited to 300 channels. This limit doesn’t include Experience Cloud sites connected to CMS workspaces.
    2. To improve Salesforce CMS performance, each instance is limited to 2,000 workspaces. This limit includes CMS workspaces and enhanced CMS workspaces.
  23. Product Renamed
    1. High Velocity Sales Was Renamed to Sales Engagement
    2. Sales Cadences Were Renamed to Cadences
    3. MuleSoft Composer for Salesforce is now Flow Integration.
    4. Salesforce CDP Has Been Changed to Customer Data Platform
    5. myTrailhead Were Renamed to Enablement Sites 

Developer’s Point of View

  1. Create Overlays with the New Modal Component: – Use modals to interrupt a user’s workflow and draw attention to an important message. A modal, which displays the message on top of the current app window, requires a user to interact with it to regain control over the app.
    1. To create a modal component, import LightningModal from lightning/modal in your JavaScript file. Then, create a component class that extends LightningModal.
      /* c/myModal.js */
      import { api } from 'lwc';
      import LightningModal from 'lightning/modal';
      export default class MyModal extends LightningModal {
          handleOkay() {

    2. This component doesn’t use a lightning-modal tag. Instead, the modal’s HTML template uses helper lightning-modal-* components to make the modal’s header, footer, and body. The lightning-modal-body component is required, and the others are optional.
      <!-- c/myModal.html -->
          <lightning-modal-header label="My Modal Heading"></lightning-modal-header>
          <lightning-modal-body>This is the modal’s contents.</lightning-modal-body>
              <lightning-button label="OK" onclick={handleOkay}></lightning-button>

  2. Fix Invalid HTML Syntax to Avoid Component Loading Errors: – Invalid HTML syntax in your LWC markup now results in a runtime error. Previously, components loaded without returning a warning even if they included invalid HTML syntax. 
    1. The framework enforces valid syntax in all Lightning web components. In Spring’22, the web console displays invalid HTML syntax warnings to promote standard HTML practices in your code. In Winter’23, these warnings are converted to errors and can prevent your components from loading correctly. Invalid HTML syntax includes:
      • Missing or misplaced DOCTYPE tag
      • Missing or misplaced head start tag
      • Nested noscript in head element
      • Non-matching opening and closing tags
      • Unexpected end of file
      • Unexpected metadata element after head element

      LWC flags invalid markup for you, such as a missing closing tag or an extra closing tag. You can also enable HTML validation in Visual Studio Code using an HTML validator plugin. For example, remove the extra </template> tag in this component example to prevent runtime errors.

      </template><!-- Remove extra closing tag -->

  3. Fix Invalid Template Usage to Avoid Warning When Component Loading:Loading an LWC component results in a warning if your component includes a <template> element with an invalid attribute. On non-root <template> elements, only for:eachiterator:iteratorName and if:true|false directives are supported.Salesforce recommend that you fix your component template to remove invalid attributes in your <template> element.

    In Spring’23, this invalid usage of the <template> element doesn’t render correctly and loading a component that contains this invalid usage will result in an error.
    For example, the non root <template> element in this example contains an invalid attribute.

        <!-- This template element contains an invalid attribute -->
        <template class="slds-m-around_medium">

    To fix the warning and make sure that your component continues to load correctly in future releases, remove the invalid attribute or use another element like <div> or <span>, depending on your use case.

        <div class="slds-m-around_medium"> 

  4. Remove Non-Global Design Tokens in CSS: – Only design tokens labeled as Global Access (GA) are supported in your Lightning web components’ CSS. Non-global design tokens no longer work after Spring’23.
    1.  After Spring’23, usage of non-global design tokens, such as those labeled as internal (I), results in a validation error No TOKEN named tokenName found during component save for API version 57.0 and later.For example, this usage of the non-global --lwc-heightInput token isn’t allowed and returns the error No TOKEN named force:base.heightInput found.
      /* This non-global token usage doesn't work */
      div { 
          height: var(--lwc-heightInput); 

      The following usage is allowed, but it’s invalid because of the non-global --lwc-heightInput token, which is placed inside the calc CSS function.

      /* This doesn't work after Spring '23 */
          height: calc(var(--lwc-height-header) - (var(--lwc-heightInput)));

      Replace the non-global tokens in your CSS with a global token or use a custom Aura design token instead.

      div {
          height: var(--lwc-lineHeightText); /* use a global design token */
      .resultcontainer {    
          height: calc(var(--lwc-height-header) - (var(--lwc-lineHeightText)));

  5. Enable Third-Party Integrations with Light DOM (Generally Available): – Lightning web components render in shadow DOM by default, providing strong encapsulation but posing challenges for global styling and many third-party integrations. With light DOM, your component markup is attached to the host element instead of its shadow tree. You can then access it like any other content in the document host.
    1. To enable a component to render in light DOM, set the renderMode static field in your component class.
      import { LightningElement } from 'lwc';
      export default class LightDomApp extends LightningElement {
          static renderMode = 'light'; // the default is 'shadow'

      Use the lwc:render-mode template directive on the <template> tag of your component.

      <template lwc:render-mode='light'>
              <p>Hello World</p>

      When you enable light DOM on a component, it no longer renders its elements in the #shadow-root tree.

              <p>Hello World</p>

      A light DOM component can contain a shadow DOM component. Similarly, a shadow DOM component can contain a light DOM component. However, base Lightning components always render in shadow DOM. Restricting light DOM to specific namespaces isn’t supported.

      LWC doesn’t scope styles automatically for you. To prevent styles from bleeding in or out of a component, use a *.scoped.css file to implement scoped styles for a component.

  6. Use DataWeave in Apex to Enable Data Transformation to Different Formats (Developer Preview): – DataWeave in Apex is now in Developer Preview. This feature enhances native Apex data transformation support by integrating Mulesoft’s DataWeave library into the Apex runtime. It makes data transformation easier to code, more scalable, and efficient. With this feature, Apex developers can focus more on solving business problems and less on addressing the specifics of file formats.
    1. You can create DataWeave scripts as metadata and invoke them directly from Apex. Similar to Apex, DataWeave scripts are run within Salesforce application servers, enforcing the same heap and CPU limits on the executing code.
    2. This example shows the transformation of an input CSV file into Contact SObjects.
      // CSV data for Contacts\n
      String inputCsv = 'first_name,last_name,email\nCodey,"The Bear",'; 
      DataWeave.Script dwscript = DataWeave.Script.createScript('csvToContacts');
      DataWeave.Result dwresult = dwscript.execute(new Map<String, Object>{'records' => inputCsv});
      List results = (List)dwresult.getValue();
      Assert.areEqual(1, results.size());
      Contact codeyContact = results[0];
      Assert.areEqual('The Bear',codeyContact.LastName);

    3. The CSV data is transformed to objects using the DataWeave script csvToContacts.dwl.
      %dw 2.0
      input records application/csv
      output application/apex
      records map(record) -> {
       FirstName: record.first_name,
       LastName: record.last_name,
      } as Object {class: "Contact"}

  7. Call Invocable Actions from Apex (Generally Available): – Invocable.Action is a new Apex class that allows you to call invocable actions from Apex code.
    1. For example, this class calls the standard invocable action “chatterPost” to post a message to the current user’s feed.
      public class MyApexClass {
          public void postToChatter(String recordId) {
              Invocable.Action action = Invocable.Action.createStandardAction('chatterPost');
              action.setInvocationParameter('text', 'This is an example Chatter post.');
              action.setInvocationParameter('subjectNameOrId', recordId);
              List results = action.invoke();
              if (results.size() > 0 && results[0].isSuccess()) {
                  System.debug('Created feed item with ID: ' +

    2. This class calls a custom invocable action named Doubler that returns a number that’s twice the input value.
      public class MyApexClass {
          public void doubler (Double input) {
              Invocable.Action action = Invocable.Action.createCustomAction('apex', 'Doubler');
              action.setInvocationParameter('input', 1);
              List results = action.invoke();                                          
              if (results.size() > 0 && results[0].isSuccess()) {
                  System.debug('Result is: ' + results[0].getOutputParameters().get('output'));

  8. Salesforce Flow Enhancements: – There are several enhancements in Salesforce Flow as follows:
    1. Cut and Paste Flow Elements: – Change the order of flow elements in auto-layout faster by using cut and paste. Previously, to move an element on the canvas, you copied and pasted the element then deleted the original element, and then you updated the API name of the pasted element.
    2. Use Formula Builder in Flow Resources and Collection Filter Elements: – You can now use an enhanced formula builder in Flow Formula-type resources and the Collection Filter element. The builder guides you through the syntax so that you can create an expression more easily. Instead of waiting until you save a flow, you can check the formula syntax and catch errors as you work.
    3. Use Record-Triggered Flows to Update Related Records: – Now you can use record-triggered flows to update any records related to the triggering record.
    4. Launch Screen Flows With Lightning Web Components: – Embed a screen flow from any Lightning Web Component with the new lightning-flow component. Developers can supercharge their flows by customizing finish behavior, setting custom styling, or launching flows from their Lightning Web Components. And they can offload complex input collection and branching logic to Flow, saving time and money.
      1. This example shows an LWC component with the Survey_customers flow API name.
    5. Filter Your Picklists By Record Type in Flow Screens: – Now you only see relevant picklist values when using Dynamic Forms for Flow. Previously, all the picklist values for a field appeared, regardless of whether a record type was provided, and could show irrelevant values.
    6. Select Multiple Records in the Lookup Flow Screen Component: – Now you can search and then select more than one record with the Lookup flow screen component. You can specify a selection maximum and one or more default records.
      1. Add the Lookup component to your screen flow and set the Maximum Selections field to a value greater than 1.
    7. Use In and Not In Operators in Flows to Find Related Records: – With the new In and Not In operators, a flow accesses a collection of primitive values to get related records without using the Loop element. The flow uses fewer SOQL queries and DML statements, and performs faster. The new operators support accessing collections of type Text, Number, Date, Date/Time, Currency, and Boolean. The operators are available in the Get Records, Update Records, and Delete Records elements.
      1. To ensure your flows don’t exceed governor limits, use the In operator. For example, a flow gets all related contacts if their role equals Decision Maker and if their related accounts have a shipping state in California. With the new In operator, the flow executes the Get Records element only three times. That’s three SOQL queries no matter how many contacts the flow finds.
      2. Because the In and Not In operators don’t support accessing values on record collections in this release, the flow assigns the account IDs to a text collection, caAccountIds. The Get Records element gets all related account contact roles if their account IDs are in caAccountIds and if their Role equals Decision Maker.
      3. The Get Records element gets all related contacts if their contact IDs are in contactIDs. And you’re done.
      4. Previously, the Loop element iterated over a collection of values to get related records. Each time the flow got a related record via the Loop element, the flow used one SOQL query. If the flow got over 100 records, the flow failed because it exceeded the governor limit of 100 SOQL queries per transaction. If you debugged the flow, the debug details showed over 100 executions of the Loop and Get Records elements.
    8. Test One, Two, Three, Flow (Generally Available): – Before you activate a record-triggered flow, you can now test it to quickly verify its expected results and identify flow run-time failures. In Flow Builder, you create, save, and run flow tests. Previously, you debugged a flow manually to troubleshoot failures each time they occurred. Now, you create and save a flow test from a debug run. Then each time you modify the flow, you can run the test. Flow tests don’t support flows that run when a record is deleted. This feature, now generally available, includes some changes since the last release. Flow tests now support scheduled paths. Previously, flow tests supported only paths that run immediately. Packaging is now supported.
  9. Flow Orchestrator: – There are several enhancements in Flow Orchestrator as follows:
    1. Assign Steps to Credentialed Experience Cloud Site Visitors: – When an interactive step in an orchestration runs, it creates a work item and assigns it to a user, group, or queue. You can now assign or reassign an interactive step to a credentialed Experience Cloud site visitor. You can also assign or reassign an interactive step to a group or queue that includes only credentialed Aura site visitors or credentialed LWR site visitors.
    2. Create Reports with Flow Orchestration Objects: – You can now track your Flow Orchestration usage with Salesforce reports. Create reports that include Flow Orchestration Run, Flow Orchestration Stage Run, Flow Orchestration Step Run, and Flow Orchestration Work Item objects.
    3. Use Subflow Elements with Evaluation Flows: – Create more complex custom entry and exit conditions for orchestration stages and steps with the Subflow element in evaluation flows. And you can reuse your evaluation flows that contain common criteria. Evaluation flows can call only evaluation flows. And evaluation flows can be called only from other evaluation flows.
  10. Write Clear and Intentional Apex Assertions: – Improve the readability of your Apex code by using the assert methods in the new System.Assert class that fit the exact conditions that you’re checking for. We still support the existing System class assert methods. But we also recommend that you start using the new ones soon and that you update your existing code to use them.
    1. Apex provides three assert methods. System.assert()System.assertEquals(), and System.assertNotEquals(). While adequate for many use cases, these methods can result in ambiguous or verbose error messages. For example, this Apex code checks for a null value.
      System.assertEquals(null, 'null');

      The resulting exception is correct, but ambiguous between literal nulls and null strings.

      System.AssertException: Assertion Failed: Expected: null, Actual: null

      The new System.Assert class provides methods that handle all types of logical assertions and comparisons. When you use an assert method intended for a specific condition, the clarity of your Apex code improves. And if the assertion results in an exception, it’s easier to read and understand

  11. Secure Even More Apex Code with User Mode Database Operations (Beta): – Run more database operations in user mode with the enhanced user-mode support. The new Database methods support an accessLevel parameter so that you can run the operations in user mode instead of in the default system mode.
  12. Prevent Record Duplication with Idempotent Record Writes for UI API (Beta): – Use idempotent record writes to avoid duplication of records and server-side operations.Currently, only the /ui-api/records endpoint supports idempotent record writes for POST, PATCH, and DELETE requests. To make a request idempotent, include an Idempotency-Key value in your request header.
    curl --location --request POST 'https:///services/data/v56.0/ui-api/records' \
    --header 'Authorization: Bearer ' \
    --header 'Content-Type: application/json' \
    --header 'Idempotency-Key: 12cfe4e6-e477-4de8-aa4e-95d31aa2be24' \
    --header 'Cookie: BrowserId=yVVAfz9GEeuRCtc5jOsncA; CookieConsentPolicy=0:0' \
    --data-raw '{
        "apiName": "ResourceAbsence",
        "fields": {
            "CreatedDate": "2022-12-01T14:52:16.000Z",
            "LastModifiedDate": "2022-12-01T14:52:16.000Z",
            "ResourceId": "0Hnxx0000004C92CAE",
            "Start": "2022-12-02T14:52:16.000Z",
            "End": "2022-12-03T14:52:16.000Z"

    The Idempotency-Key header value is in the UUID v4 format. You can use a library that supports UUID v4 generation, including the Java UUID utility.

    We recommend that you use a unique Idempotency-Key header value for each operation. The idempotency key doesn’t provide idempotency indefinitely and auto-expires after 30 days if the same key is reused.

  13. Choose Any Name for a Global Value Set: – When you create a custom global value set or global value set translation in API version 56.0 or later, the developer name is appended with the suffix __gvs. You can now create a global value set or translation with any name and it doesn’t conflict with a standard entity of the same name.
  14. Filter Your Stream of Platform Events with Custom Channels (Generally Available): – Optimize event processing by receiving only the event messages that match a predefined filter on a custom channel. Create a channel and configure it with a filter expression for CometD clients. With fewer events delivered, subscribers can make more efficient use of the event delivery allocation.
    1. With the Customize Application permission, you can configure stream filtering using Tooling API or Metadata API. To create a channel, use PlatformEventChannel. To add a filter expression for a custom platform event, use PlatformEventChannelMember.This example shows a filter expression value in the PlatformEventChannelMember.FilterExpression field.
      (City__c LIKE 'S%' OR City__c='New York') AND Has_Shipped__c=true 
        AND Delivery_Date__c>2022-07-21T09:30:11-08:00

  15. Develop Event-Driven Apps with Pub/Sub API (Generally Available): – Publish and subscribe to platform events and change data capture events using Pub/Sub API, a secure, highly performant, and scalable API based on gRPC. Use one of the 11 supported programming languages, including Python, Java, Go, and Node. Get peace of mind with final publishing results instead of intermediate queueing results. And with subscription flow control, fine-tune the number of event messages that you receive based on your event processing speed.
    1. gRPC requires defining a service, which specifies the methods that can be called remotely with their parameters and return types. The server implements this interface and runs a gRPC server to handle client calls. The client has a stub that mirrors the methods available on the server.
    2. Pub/Sub API uses protocol buffers as the Interface Definition Language (IDL) and as the underlying message interchange format. The Pub/Sub API service is defined in a proto file, with RPC method parameters and return types specified as protocol buffer messages. Within those protocol buffer messages, the payload of the published and delivered events is encoded in binary Apache Avro.
    3. This proto file example is based on the Pub/Sub API proto file, but we shortened it in this illustration. This proto file defines the service by listing the methods to publish, subscribe, get the schema, and get the topic information.

Additional Enhancements Worth Noting!

  1. Secure Components by Default with Lightning Web Security in New Orgs: – To protect custom Lightning web components, the setting Use Lightning Web Security for Lightning web components is enabled by default in new Salesforce orgs. The new Lightning Web Security architecture is replacing Lightning Locker over several releases.
  2. Access iframe Content in Lightning Web Security: – Lightning Web Security now permits Lightning web components to access content in iframe elements. With this change, you can use another web development feature that Lightning Locker blocks. 
  3. Chart Your Apex Course with the Save Order of Execution Diagram: – Check out the new diagram that represents the save order of execution, which is the order that events are applied when you save a record in Salesforce.
  4. Limits on Concurrently Open Query Cursors are Removed: – Query cursors open concurrently per user are no longer restricted in number. Batch Apex start, execute, and finish method result sets are also included. Previously, these limits applied to open query cursors, and are now removed.
    1. Maximum number of query cursors open concurrently per user
    2. Maximum number of query cursors open concurrently per user for the Batch Apex start method
    3. Maximum number of query cursors open concurrently per user for the Batch Apex execute and finish methods
  5. Get Daily Limit for Running Apex Test Classes Asynchronously: – Use the new DailyAsyncApexTests limit information in the Limits REST resource to understand your org’s limit for asynchronous Apex test executions. The DailyAsyncApexTests limit returns the maximum number of Apex tests that can be queued in a 24-hour period and the remaining number of Apex tests available based on your current usage. This limit is available in API version 56.0 and later.
  6. Transfer Package Ownership to a Different Dev Hub: – Transfer the ownership of an unlocked or second-generation managed package from one Dev Hub org to another. A transfer can occur internally between two Dev Hub orgs that you own, or you can transfer a package externally to another Salesforce customer, Salesforce Partner, or ISV. This change provides a way to sell an unlocked or second-generation managed package.
    1. To initiate a package transfer, log a case with Salesforce Partner Support. Because this is a complex procedure, Salesforce performs the package transfer process for you.
  7. Monitor Your Platform Event Usage in the User Interface: – Monitor your event publishing and delivery usage easily in Setup for high-volume platform events and change events. The event publishing usage applies to all publishing methods for high-volume platform events. The event delivery usage counts against the default allocation for only to CometD, Pub/Sub API, and the empApi Lightning component.
    1. From Setup, in the Quick Find box, enter Platform Events, and then select Platform Events.
  8. Monitor Your Daily Event Delivery Usage with REST API – Use the DailyDeliveredPlatformEvents value of the limits REST resource to find out how many high-volume platform events and change events were delivered in the last 24 hours. This limits value counts against the default event delivery allocation for only CometD, Pub/Sub API, and the empApi Lightning component.
  9. Access the Email Composer from Custom Components:– Developers can now invoke the send email action from a custom component. The fields can be left blank, or use predefined values. Previously, you could access the email composer only from the UI, either through the Global Action menu, or via the Send Email tab on a record’s detail page. Standard quick actions can be invoked using the navigation service and page reference from any custom LEX component.
  10. Set Up Server-to-Server Integrations with the OAuth 2.0 Client Credentials Flow: – To directly share information between Salesforce and a third-party app, set up the OAuth 2.0 client credentials flow. With this flow, the third party exchanges its client credentials defined in the connected app—its consumer key and consumer secret—for an access token. Because there’s no explicit user interaction in the client credentials flow, it’s useful for scenarios such as running automated reports. Salesforce also recommend using this flow as a more secure alternative for the OAuth 2.0 username-password flow.
  11. Enjoy Longer Access to More Query Results: – Some limitations on query results have been removed. Pagination beyond 10 result sets per user is now supported, and query results are available for 2 days, including results in nested queries.

Salesforce Mobile App Enhancements

The Salesforce Mobile App updates include the upcoming retirement of two tablet experiences, forecast types now grouped by territory hierarchy, and a beta to optimize viewing mobile reports. In enhanced LWR Experience Cloud sites, custom Lightning Web Components can now have different integer property values. Mobile Publisher now has a beta to support Lightning Web Runtime (LWR) Sites for Experience Cloud, ease of configuration for navigation settings, and a kiosk mode for barcode scanner.

  1. View More Forecast Types in the Salesforce Mobile App: – See and use forecast types that are grouped by territory hierarchy. For example, you can forecast opportunity revenue by territory. Previously, in the Salesforce mobile app, you could view forecast types grouped by user role only.
  2. Get Optimized Mobile Reports with Enhanced Reports (Beta):- Enhanced Reports automatically optimizes reports for consumption on mobile devices without reconfiguring the report formats. In this improved mobile experience, you get a responsive user interface with mobile-friendly features such as faster load times, more consistent performance, and text wrapping within tables for minimized scrolling.
    1. When you open a report, the report name appears (1) followed by a Summary Information ribbon (2) and the report header row and data (3).
  3. Unify Your Analytics on Mobile: – Analytics Home that you use for the full desktop site is now on Salesforce Mobile. All of your Salesforce analytics assets are organized in a cohesive experience rather than being scattered across different tools. Plus, you get a more powerful search experience, better organization, and personalization in an intuitive and easy interface.
    1. Unified Home is enabled from the full desktop site, which turns on Unified Analytics for mobile and desktop. From Setup, in the
    2. Quick Find box, enter analytics, and then select Settings. Select Enable the Unified Experience for Analytics Home.
    3. The Analytics Tab is updated to a new Unified Home experience. Browse (1) shows all your Analytics assets organized by type. Favorites (2) let you save preferred analytics assets for quick access. Collections (3) are curated CRM Analytics dashboards and lenses to customize your space. Watchlist (4) enables you to monitor your important CRM Analytics dashboard metrics from Home. Recents (5) show your most currently opened analytics assets by type.
  4. Enable Lightning on Tablet Before Other Tablet Experiences are Retired: – Lightning on tablet: single-column and Legacy Salesforce1 are scheduled for full retirement in Spring‘23. The new Lightning on tablet experience becomes the default tablet app experience for new organizations after Winter‘22 and for all organizations in Spring ‘23.
  5. Use Different Property Values for Desktop, Tablet, and Mobile in Custom Lightning
    Web Components
    : – For enhanced LWR Experience Cloud sites, custom Lightning Web Components can now have different integer property values. With screen-size responsive integer properties, custom Lightning Web Components use the integer property value that best matches the end user’s screen size. For example an integer property can be used to set the height of a component. By making that property screen-size responsive, the component can now have different heights depending on the current screen size

    1. You must programmatically declare which component properties you want to be screen-responsive.
    2. After a property is declared screen-responsive, use Experience Builder to assign the integer property values for the different view modes. Select the custom component in the page you’re configuring. In the component’s property editor, properties that have been programmatically declared as screen-size responsive are indicated by an icon. Hover over the icon for additional information.
    3. To assign the property value for each screen size, switch between the different view modes.

Key Resources:

Check out the resources below to learn about some of the most exciting innovations before officially GA on October 14th!

Formative Assessment:

I want to hear from you!

What are your favorite Winter’23 release note gems? You can download release notes in HTML format!, for PDF files.

Feel free to share in the comments below.

Have feedback, suggestions for posts, or need more information about Salesforce online training offered by me? Say hello, and leave a message!

One thought on “Salesforce Winter’23 Release Quick Summary

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.